2014-09-19 195 views
0

我想發送nginx訪問日誌到遠程syslog-ng服務器。 我在每一邊安裝了syslog-ng(server-client)。 客戶端:10.10.10.2 服務器:10.10.10.1 某些日誌文件(消息,syslog,mail.log)從客戶端成功發送到服務器,但不發送nginx日誌。 服務器配置:nginx發送日誌到遠程系統日誌服務器

source s_net { 
    tcp(ip(0.0.0.0) port(1999) 
    tls(key_file("/etc/syslog-ng/key.d/privkey.pem") 
     cert_file("/etc/syslog-ng/cert.d/cacert.pem") 
     peer_verify(optional-untrusted))); }; 

destination d_net_nginx_access { file("/mnt/syslog_storage/HOSTS/$HOST 
/nginx.access.log"); }; 

filter f_nginx_access { program("nginx") }; 

log { source(s_net); filter(f_nginx_access); destination(d_net_nginx_access); }; 

客戶端配置:

source s_src { 
     system(); 
     internal(); 
}; 

destination tls_log { 
tcp("10.10.10.1" port(1999) 
tls(ca_dir("/etc/syslog-ng/ca.d")));}; 

destination d_nginx_access { file("/var/log/nginx/nginx.access.log"); }; 

filter f_nginx { program("nginx"); }; 

log { source(s_src); filter(f_nginx); destination(d_nginx_access); }; 

# All messages send to a remote site 
# 
log { source(s_src); destination(tls_log); }; 

我不知道現在是什麼問題。 在此先感謝。

回答

1

問題是,在客戶端上,您訪問Nginx日誌作爲目標。目的地 - 顧名思義 - 你東西。 syslog-ng不讀取目標。郵件日誌和其他日誌的原因是因爲他們直接登錄到syslog(),所以syslog-ng不必讀取單獨的文件。 Nginx不使用syslog()服務(除非你配置它,最近的版本有一個syslog插件),所以nginx日誌不會到達syslog-ng,因此你設置的過濾器也不會捕獲它們。

現在,在客戶端上轉移nginx的日誌,改變nginx的目的地是這樣的:

source s_nginx_access { file("/var/log/nginx/nginx.access.log" flags(no-parse)); }; log { source(s_src); source(s_nginx_access); destination(tls_log); };

flags(no-parse)是因爲有nginx的不記錄在系統日誌正常格式。