Nginx用rsyslog转发日志的一些小坑
我们从Nginx的代码中可以看到,给syslog发通知的时候,tag后面跟了2个字符 冒号+空格,所以阿里云这里的文档完全是坑爹
if $syslogtag == 'nginx' then @@10.101.166.173:11111;ALI_LOG_FMT
这里判断的是$syslogtag,也就是这种配置
access_log syslog:server=ip:port,facility=local7,tag=nginx,severity=info combined;
这边配置tag为 nginx,而 $syslogtag 不会是 nginx,而是 nginx+冒号+空格
查了rsyslog文档,$syslogtag 的行为本来就是程序自己定的,(),真正需要的是 这个 $programname
所以这样的配置是可以work的:
cat /etc/rsyslog.d/nginx.conf
input(type="imuxsock" Socket="/var/log/nginx.sock" CreatePath="on")
# $template ALI_LOG_FMT,"2.3 streamlog_tag %timegenerated:::date-unixtimestamp% %fromhost-ip% %pri-text% %app-name% %syslogtag% %msg:::drop-last-lf%
"
template(name="ALI_LOG_FMT" type="string" string="2.3 streamlog_tag %timegenerated:::date-unixtimestamp% %fromhost-ip% %pri-text% %app-name% %syslogtag% %msg:::drop-last-lf%
")
if $programname == 'nginx' then @@127.0.0.1:11111;ALI_LOG_FMT
& ~
注意,最后的那个 $ ~ 表示被上条规则匹配的日志不在发送到别的地方,因为nginx的默认的facility 是 local7 和boot.log是一样的,会造成发送日志的同时 也写入到boot.log ,造成boot.log巨大,这也是一个坑点。
另外其实,可以自己配置nginx的日志格式 满足ilogtail的采集规则,这样可以少走一次rsysylog。这里的 streamlog_tag 对应阿里云的syslog采集日志的时候的log tag.
版权声明:Nginx用rsyslog转发日志的一些小坑是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。