web-dev-qa-db-ja.com

LinuxログをLinuxのfluentdに転送する

1つはVMこれは/etc/rsyslog.d/50-default.confにあります

*.* @192.168.29.1:42185

#  Default rules for rsyslog.

Fluentdを使用したVMには、次のものがあります。

私はこれを/etc/td-agent/td-agent.confに持っています

<source>
  type syslog
  port 42185
  tag  rsyslog
</source>

<match rsyslog.**>
  type copy
  <store>
    # for debug (see /var/log/td-agent.log)
    type stdout
  </store>
  <store>
    type elasticsearch
    logstash_format true
    flush_interval 10s # for testing.
  </store>
</match>

しかし、/ var/log/td-agent.logを見ると、リモートマシンに何も送信されていないようです。

2014-08-08 10:51:10 -0700 [info]: adding source type="syslog"
2014-08-08 10:51:10 -0700 [info]: adding source type="forward"
2014-08-08 10:51:10 -0700 [info]: adding source type="http"
2014-08-08 10:51:10 -0700 [info]: adding source type="debug_agent"
2014-08-08 10:51:10 -0700 [info]: adding match pattern="td.*.*" type="tdlog"
2014-08-08 10:51:10 -0700 [info]: adding match pattern="debug.**" type="stdout"
2014-08-08 10:51:10 -0700 [info]: adding match pattern="rsyslog.**" type="copy"
2014-08-08 10:51:10 -0700 [info]: listening fluent socket on 0.0.0.0:24224
2014-08-08 10:51:10 -0700 [info]: listening dRuby uri="druby://127.0.0.1:24230" object="Engine"
2

ログが送信されない理由がわかりません。また、rsyslogに問題があり、ファイルが送信されていないかどうかを確認する方法もわかりません。

2
James Black

私が間違っていなければ、rsyslogはログをTCP(構成ファイルでは、これは「信頼性のために」とリストされています)を介して転送します)が、fluentDのリスナーはデフォルトでUDPでリッスンします。 fluentD configを使用すると、TCPでログを受信できるようになります。

<source>
  type syslog
  port 42185
  protocol_type tcp
  tag  rsyslog
</source>

この変更を行った後もログを受信して​​いない場合は、TCPダンプを使用して、トラフィックがエージェントで受信されているかどうかを確認します。

tcpdump -i any port 42185

これは、TCPまたはUDPが受信されているかどうかも示す必要があります(portまたはtcpも指定せず、udpのみを指定します)

編集:これに加えて、rsyslog構成が正しいことを確認してください:私が見て使用したすべての例では、転送ルールに二重の@@があります:

*.* @@192.168.29.1:42185

http://www.rsyslog.com/doc/rsyslog_reliable_forwarding.html

3
Andrew