2014-09-19 193 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的不记录在系统日志正常格式。