Tcp
在 syslog-ng 中使用網路指令時出現“EOF 空閒時”
我想將日誌從本地機器轉發到遠端伺服器。借助 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如下:
source mysource { syslog( ip(0.0.0.0) transport(udp) port(514) max-connections(80) keep-hostname(yes) ); syslog( ip(0.0.0.0) transport(tcp) port(514) max-connections(80) log_iw_size(8000) keep-hostname(yes) ); }; ...
當我
tail -f /var/log/syslog
,我收到以下錯誤:Oct 29 16:37:28 servername syslog-ng[718]: Syslog connection accepted; fd='83', client='AF_INET(127.0.0.1:40034)', local='AF_INET(0.0.0.0:514)' Oct 29 16:37:28 servername syslog-ng[718]: Invalid frame header; header='' Oct 29 16:37:28 servername syslog-ng[718]: Syslog connection closed; fd='83', client='AF_INET(127.0.0.1:40034)', local='AF_INET(0.0.0.0:514)'
編寫以下行代替這兩個
syslog
指令可以解決問題:source mysource { network(transport(tcp) port(514) max-connections(80)); }