我想将日志从本地机器转发到远程服务器。借助 SSH 隧道,可以通过 localhost:5514 访问远程服务器。我写了以下conf:
# Filters
filter f_local0 { facility(local0); };
filter f_worker { program("^worker."); };
# Destinations
destination d_log01_local { file("/home/myuser/logs/worker/$YEAR$MONTH$DAY/$PROGRAM.$YEAR$MONTH$DAY" template("$HOST $MSG\n") create_dirs(yes) dir_group("adm") group("adm") dir_perm(0770) perm(0644) ); };
destination d_log01_remote { network("localhost" transport(tcp) port(5514) persist-name("remote_worker") disk-buffer( reliable(yes) disk-buf-size(50000000) )); };
# Logs
log { source(s_src); filter(f_local0); filter(f_worker); destination(d_log01_local); };
log { source(s_src); filter(f_local0); filter(f_worker); destination(d_log01_remote); };
本地目的地运行良好,但远程目的地没有:我没有在位于 localhost:5514 的服务器上收到任何日志。
当 I 时tail -f /var/log/syslog
,syslog 记录以下行:
Oct 22 11:25:05 esad-10076 syslog-ng[17319]: Syslog connection established; fd='35', server='AF_INET(127.0.0.1:5514)', local='AF_INET(0.0.0.0:0)'
Oct 22 11:25:05 esad-10076 syslog-ng[17319]: EOF occurred while idle; fd='35'
Oct 22 11:25:05 esad-10076 syslog-ng[17319]: Syslog connection broken; fd='35', server='AF_INET(127.0.0.1:5514)', time_reopen='60'
我不明白这个错误,也不知道如何解决它。
我应该指定在编写这个 conf 之前,我有另一个 conf 用来syslog
代替,network
这个 conf 可以完美地工作。我现在只需要使用网络来使用的功能,reliable
以便在网络中断的情况下不会丢失任何日志。
# Filters
filter f_local0 { facility(local0); };
filter f_worker { program("^worker."); };
# Destinations
destination d_log01_local { file("/home/myuser/logs/worker/$YEAR$MONTH$DAY/$PROGRAM.$YEAR$MONTH$DAY" template("$HOST $MSG\n") create_dirs(yes) dir_group("adm") group("adm") dir_perm(0770) perm(0644) ); };
destination d_log01_remote { syslog("localhost" transport(tcp) port(5514) persist-name("remote_worker")); };
# Logs
log { source(s_src); filter(f_local0); filter(f_worker); destination(d_log01_local); };
log { source(s_src); filter(f_local0); filter(f_worker); destination(d_log01_remote); };
问题发生在另一端:接收方。目前有两种不同的 syslog 协议:rfc3164一种(旧的)和rfc5424一种(新的)。有关更多信息,请参阅此博客文章。
我正在使用旧协议在我的服务器上接收日志,并且消息与使用较新协议的发送机器发送的日志不匹配(因此出现“标头”问题)。
我的conf如下:
当我
tail -f /var/log/syslog
,我收到以下错误:编写以下行代替这两个
syslog
指令可以解决问题: