我希望本地的 Logstash 实例将 syslog 和所有/var/log/*
文件转发到远程的、中央的 Logstash 实例。
管道/etc/logstash/conf/logstash-local.conf
如下所示:
input {
file {
type => "syslog"
path => [ "/var/log/*.log", "/var/log/syslog" ]
}
}
output {
stdout { codec => rubydebug }
tcp {
host => "logging.example.com"
port => 5000
}
}
当我尝试执行时logger "foo"
,事件被记录到本地系统日志中,但在我的远程 Logstash 中找不到它。系统日志中也没有其他事件。
我尝试过的事情:
- 本地 Logstash 在其日志文件中报告管道正在正常运行
- 我使用 telnet 连接到远程服务器,并验证直接输入是否被正确处理
- 权限已在本地更改,以授予用户 Logstash 成为 adm 组成员资格
一切看上去都很完美......但它不起作用!:)
答案1
如果您还不确定,输出tcp {}
将使用json
编解码器进行传输。如果您的接收方没有预料到这一点,您将得到很多东西。除此之外,您的配置看起来很可靠。输出上没有过滤器,所以一切都应该同时进行。
在调试方面,启动时检查您的网络统计信息,看看是否正在尝试打开到您的远程的 TCP 连接。卡住的某些东西SYN_SENT
表明问题出在 Logstash 之外的其他东西上。如果您仍然无法打开该连接,则可能需要使用系统调用跟踪器(如 strace(Linux 系统)或 procmon(Windows 系统))启动 logstash,以查看连接创建调用发生了什么。