将 Linux 日志转发到 Linux 上的 fluentd

将 Linux 日志转发到 Linux 上的 fluentd

在一台虚拟机上我有这个/etc/rsyslog.d/50-default.conf

*.* @192.168.29.1:42185

#  Default rules for rsyslog.

在装有 fluentd 的虚拟机上我有这个:

我有这个/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,只是没有发送文件。

答案1

如果我没记错的话,rsyslog 通过 TCP 转发日志(在配置文件中,这被列为“为了可靠性”),但 fluentD 的侦听器默认在 UDP 上侦听。对 fluentD 配置进行此更改应该允许您在 TCP 上接收日志:

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

如果在进行此更改后仍未收到日志,我将使用 TCP dump 检查代理上是否正在接收流量:

tcpdump -i any port 42185

这还应表明是否正在接收 TCP 或 UDP(仅指定port,而不是tcpudp

编辑:除此之外,请确保您的 rsyslog 配置正确:我所见过和使用过的所有示例,@@在转发规则中都有一个重复:

*.* @@192.168.29.1:42185

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

相关内容