Nginx默认不支持 Syslog或者 Pipe方式,不过淘宝发布的 tengine支持这两种方式,示例如下。
logformat syslog "syslog:local7:info:192.168.0.2:514:nginxlog";
其中 nginxlog将记录在 DEVNAME字段。
此外,人人发布的 ngx_http_accounting_module实现了针对带宽和状态码的 Syslog统计输出。编译 Nginx时使用--add-module=/path/to/ngx_http_accounting_module参数即可。
在 Nginx中只需要两行配置。
http{ http_accounting on; server {
http_accounting_id server_string; location / { # http_accounting_id location_string; } } }
默认会每 10秒钟发送统计数据到本机的 Syslog,然后在本机的 Rsyslog中配置如下指令,即可在本机和远程接收到基于具体域名甚至具体 URL的访问情况统计。
$template NADailyLog,"/var/log/NgxAccounting/%$YEAR%/%$MONTH%/%$YEAR%-%$MONTH%-%$DAY%.log"
$template SSFormat,"%timegenerated%||%msg%\n"
if $programname == 'NgxAccounting' then ?NADailyLog;SSFormat if $programname == 'NgxAccounting' then @192.168.0.2;SSFormat if $programname == 'NgxAccounting' then ~
最终保存的日志示例如下。
Apr 5 14:41:43|| pid:10295|from:1365144073|to:1365144103|accounting_id: youdomain|requests:250|bytes_out:788668|200:237|404:11|403:2