【Splunk】使用syslog-ng和HF(UF)收集syslog日志(三)syslog-ng配置
2019-2-2 18:43:58 Author: mp.weixin.qq.com(查看原文) 阅读量:3 收藏

这部分详细讲讲syslog-ng服务器上的配置。

一、配置关系图

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

二、配置说明
1、syslog-ng.conf配置
@include "/etc/syslog-ng/patterndb.d/"
可以在主配置文件里包含其它路径下的配置,这样有利于配置维护。在这里我们包含了/etc/syslog-ng/patterndb.d/路径下的配置文件。
这里可以看到我们在路径下有4个配置文件:
F_nginx:接收nginx日志的配置文件;
L_linux:接收linux日志的配置文件;
Y_local:用来接收本机日志的配置文件;
Z_all:用来接收所有其它syslog日志的配置文件;

注意:在这里的配置文件的生效顺序依据文件名首字母大小写顺序,具体的规则查看syslog-ng-ose-guide-admin 5.6.1节。

sources_tcp_1515 {
   tcp(ip(0.0.0.0) port(1515) so_rcvbuf(805306368) so_sndbuf(8096) time_zone(GMT) keep_timestamp(yes) max-connections(5000) );
};

这里我们建立了一个tcp/1515端口的源,用来接收其它IP发送到这个端口的日志。涉及的参数有很多,具体内容查看syslog-ng-ose-guide-admin 6.5节;

2、Nginx日志配置文件

templatet_nginx {
   template("${MSG}\n");
};

destination d_nginx {
   file("/mydata/syslog/NGINX/$SOURCEIP/$YEAR-$MONTH-$DAY.log" template(t_nginx) perm(0755) dir_perm(0755) create_dirs(yes));
};

filter f_nginx {
   netmask(10.100.18.247/255.255.255.255);
   # match("nginx_access:" value("MSGHDR"));
   program("nginx_access");
};

log {
   source(s_tcp_1515);filter(f_nginx); destination(d_nginx);
};

log配置简单理解:来自source的日志,如果匹配了filter,将会发往destination。
我们在《Splunk:使用syslog-ng和HF(UF)收集syslog日志(二)》文中将Nginx、Linux日志都发到了tcp/1515端口,但是只有匹配了filter(f_nginx)的日志,才会发往destination(d_nginx)。

我们继续看看filter的配置:
filter f_nginx {
netmask(10.100.18.247/255.255.255.255);
# match("nginx_access:" value("MSGHDR"));
program("nginx_access");
};
netmask指定了源IP地址是10.100.18.247;
program指定了syslog的program为nginx_access;我们怎么知道是nginx_access呢,这点在《Splunk:使用syslog-ng和HF(UF)收集syslog日志(二)》文中,我们在nginx.conf配置文件里定义了tag=nginx_access。关于tag、program具体信息,大家可以看看syslog有关的RFC协议里有详细的介绍。

templatet_nginx {
template("${MSG}\n");
};

template配置设定了日志的存储格式,这里只有一个字段MSG,就和我们在《Splunk:使用syslog-ng和HF(UF)收集syslog日志(二)》文中rsyslog配置部分nginx配置%msg%一样,也和我们在nginx.conf配置文件里定义的log_format一样。

《Splunk:使用syslog-ng和HF(UF)收集syslog日志(二)》文中我们留了一个问题,现在我们看看。
rsyslog中nginx日志格式配置如下:
template(name="T_nginxaccess_remote" type="string" string="%syslogtag%%msg%\n")
syslog-ng中nginx日志格式配置如下:
templatet_nginx {
template("${MSG}\n");
};

可以看到在rsyslog上和syslog-ng上,定义的日志格式并不一样,但是最终在Nginx服务器和syslog-ng服务器,保存的nginx最终日志格式都是一样的:

在通过rsyslog将nginx日志发到syslog-ng服务器时,我们定义的template
template(name="T_nginxaccess_remote" type="string" string="%syslogtag%%msg%\n")
也就是将%syslogtag%一并发到syslog-ng服务器,然后我们在syslog-ng的filter配置里:
filter f_nginx {
netmask(10.100.18.247/255.255.255.255);
# match("nginx_access:" value("MSGHDR"));
program("nginx_access");
};

才可以使用program("nginx_access");将nginx日志过滤出来,最终记录的日志格式仍然是
templatet_nginx {
template("${MSG}\n");
};

和我们在nginx服务器上定义的格式一致了。
如果我们在rsyslog配置的时候,不将%syslogtag%传送过来,我们在syslog-ng服务器上,就无法使用tag相关参数的过滤规则。大家可以自己配置试试,如果不配置%syslogtag%,记录的日志格式会是什么样。

这里再留一个问题,syslog的tag和program有什么关系?

3、Linux日志配置文件

templatet_linux {
   template("timestamp=\"${STAMP}\",dest_ip=\"${SOURCEIP}\",devicetype=\"Linux\",facility=\"${FACILITY}\",severity=\"${LEVEL}\",program=\"${PROGRAM}\",syslogta
g=\"${MSGHDR}\",msg=${MSG}\n");
};

destination d_linux {
   file("/mydata/syslog/LINUX/$SOURCEIP/$YEAR-$MONTH-$DAY.log" template(t_linux) perm(0755) dir_perm(0755) create_dirs(yes));
};

filter f_linux {
   not (filter(f_nginx));
};

log {
   source(s_tcp_1515); filter(f_linux); destination(d_linux);
};

log配置简单理解:来自source的日志,如果匹配了filter,将会发往destination。
这里的filter是f_linux,内容是不匹配f_nginx的日志,所以从这里可以看出为什么我们在创建配置文件时要考虑文件命名。
templatet_linux {
template("timestamp=\"${STAMP}\",dest_ip=\"${SOURCEIP}\",devicetype=\"Linux\",facility=\"${FACILITY}\",severity=\"${LEVEL}\",program=\"${PROGRAM}\",syslogta
g=\"${MSGHDR}\",msg=${MSG}\n");
};

日志格式定义,这里使用了key:value的形式,便于后续splunk采集日之后自动解析字段。

三、参考资料
The syslog-ng Open Source Edition 3.12 Administrator Guide
https://www.balabit.com/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/
rsyslog 8.30.0 documentation
http://www.rsyslog.com/doc/v8-stable/index.html
syslog相关RFC规范

加入星球查看更多内容:


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