【Splunk】使用syslog-ng和HF(UF)收集syslog日志(二)源端(Nginx)配置
2017-11-14 11:29:53 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

在“Splunk:使用syslog-ng和HF(UF)收集syslog日志(一)”一文中写了整体的配置,这部分详细讲讲源端(nginx)这部分的配置细节。

一、配置关系图

(加入知识星球“企业Splunk实践”查看高清大图)

二、Nginx access日志配置

配置说明

在nginx.conf文件里或站点配置文件里配置即可,log_format指定日志格式,access_log指定日志存储路径,这里主要说明下access_log的配置。

access_log syslog:server=unix:/usr/local/nginx/logs/nginxaccess.sock,tag=nginx_access,nohostname nginxjsonupstream;

syslog:”:通过syslog记录;

server=unix:/usr/local/nginx/logs/nginxaccess.sock”:指定UNIX-domain socket路径,不用手动创建该文件;

tag=nginx_access”:设定syslog tag,默认为nginx;

nohostname”:在syslog header中不添加hostname;

nginxjsonupstream”:指定log_format;

这里还有几个参数可以设定:

facility”:指定syslog facility,默认为local7;

severity”:指定syslog severity,默认为info;

tag、facility、severity这几个参数可以根据实际情况修改,这几个参数很重要,在后面rsyslog、syslog-ng配置中我们都会用到这几个值。

参考资料

Configuring Logging:

https://www.nginx.com/resources/admin-guide/logging-and-monitoring/

Module ngx_http_log_module:

http://nginx.org/en/docs/http/ngx_http_log_module.html

Logging to syslog

http://nginx.org/en/docs/syslog.html

三、Rsyslog配置

配置说明

rsyslog配置部分,我们先说说以下部分。

第一部分nginx日志处理,按照实际配置关系,我们按照颜色单独分作两部分:

template(name="T_nginxaccess_remote" type="string" string="%syslogtag% %msg%\n")

template(name="T_nginxaccess_local" type="string" string="%msg%\n")

template(name="T_nginxaccess_File" type="string" string="/usr/local/nginx/logs/access_%$year%-%$month%-%$day%.log")

ruleset(name="nginxaccessrule") {

   action(type="omfile" dynaFile="T_nginxaccess_File" Template="T_nginxaccess_local" ioBufferSize="1512k" flushOnTXEnd="off" asyncWriting="on")

   action(type="omfwd" Target="10.100.18.28" Port="1515" Protocol="tcp" Template="T_nginxaccess_remote" )

}

input(type="imuxsock" Ruleset="nginxaccessrule" Socket="/usr/local/nginx/logs/nginxaccess.sock")

具体的配置语法请查看参考资料。

红色部分是将日志记录到本地:

dynaFile="T_nginxaccess_File":指定日志存储路径及命名为按天生成;

Template="T_nginxaccess_local":指定日志格式,具体的日志格式为string="%msg%\n"

我们从实际access日志可以看到,日志格式和在nginx上配置的log_format格式是一样的,也就是说%msg%这个字段就等于:

{"@timestamp":"$time_iso8601",'

'"hostaddr":"$server_addr",'

'"remote_addr":"$remote_addr",'

'"http_x_forwarded_for":"$http_x_forwarded_for",'

'"request_method":"$request_method",'

'"domain":"$host",'

'"uri":"$uri",'

'"request_uri":"$scheme://$http_host$request_uri",'

'"status":$status,'

'"server_protocol":"$server_protocol",'

'"size":$body_bytes_sent,'

'"responsetime":$request_time,'

'"http_referer":"$http_referer",'

'"upstr_addr": "$upstream_addr",'

'"upstr_status": $upstream_status,'

'"ups_resp_time": $upstream_response_time,'

'"accept":"$http_accept",'

'"agent": "$http_user_agent"}'

蓝色部分是将日志发往syslog-ng服务器:

Target="10.100.18.28":服务器IP

Port="1515":端口

Protocol="tcp":协议

Template="T_nginxaccess_remote" :日志发出去的格式

请注意:

在这我们定义的日志格式是string="%syslogtag% %msg%\n",和本地定义的格式string="%msg%\n"不一样。

但是,大家可以看看第一篇文章中的图,我们最终在syslog-ng服务器(10.100.18.28)上记录的acces日志格式是和本地(10.100.18.247)记录的access日志格式是一样的。

那么有两个问题:

1、为什么定义的格式不一样,但是最终记录的日志格式是一样的?

2、为什么需要再发往syslog-ng服务器时,加上“%syslogtag% ”部分,作用是什么?

这部分非常重要,后续我们在syslog-ng配置部分再讲。

第二部分linux服务器日志处理:

*.info,local7.none @@10.100.18.28:1515

这部分的配置是把linux的系统日志*.info都发给了syslog-ng服务器。

@@:代表TCP方式,如果是@代表UDP;

10.100.18.28:syslog-ng服务器IP;

1515:端口;

这里为什么加上local7.none,在nginx配置部分我们知道nginx通过syslog记录日志的时候,默认facility是local7,severity是info。这边加上local7.none就不会再把nginx日志重复发一份到syslog-ng服务器(因为我们上边已经发了一份了)。

参考资料

Configuration:

http://www.rsyslog.com/doc/v8-stable/configuration/index.html

加入星球查看更多内容:


文章来源: https://mp.weixin.qq.com/s?__biz=MzI5NzAzMDg0NA==&mid=2650697843&idx=1&sn=4179950ae45102462b0e65fe67d3b343&chksm=f4b195a0c3c61cb64f59037d7eaf468c8bf35296dbeff9e0006adc1d83a2876f29c376878b82&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh