Nginx 用syslog传输error.log到远程服务器

error_log配置syslog远程传输

error_log syslog:server=127.0.0.1:514,facility=local0,severity=info,tag=nginx error;

其中server指定传输的IP&Port。为了开发方便,这里设置了本机的rsyslog服务端口。

facility指定产生日志的实体,有一些固定的选择,比如kern,mail,user,local0,local1等。

severity指定日志级别(不是nginx的日志级别)。

tag指定标识,这里设置的tag为"nginx"。

error指定了nginx的日志级别,根据需要也可以选其它级别,例如warn,info,debug等。

配置rsyslog服务

编辑/etc/rsyslog.conf,添加配置如下

#启用udp模块
module(load="imudp")
#输入是udp协议,端口514
input(type="imudp" port="514")
#ficility为local0的日志输出到/var/log/error.log
local0.*             -/var/log/error.log

这里是把facility为local0的syslog输出到本机的/var/log/error.log文件,也可以传输到远程数据库。由于手头没有数据库,不列举配置了。

配置好之后systemctl restart rsyslog就好了(具体service名字用tab补全)。

错误日志格式

示例如下

Nginx 错误日志格式,每个红框是一个字段,从左到右,从上到下依次是

syslog header中的时间,时间格式可以通过ActionFileDefaultTemplate设置

hostname,我的主机名这是的是A,不确定是hostname变量转小写了还是syslog输出转的。

tag,这里设置的值是nginx。

nginx日志时间,nginx日志默认时间精度是秒,我自己改成毫秒了,代码中修改的位置是ngx_cached_err_log_time变量赋值的部分,毫秒直接用tp->msec就好了。

[error] 是日志级别

271612#0是记录的进程PID和线程TID,用#分割

*301xxx 是连接ID

connect() failed xxxx这部分就是nginx代码里面输出的具体错误信息