使用syslog-ng和HF收集syslog日志(三)syslog-ng配置

这部分详细讲讲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节。

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

2、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("$\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("$\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("$\n");

};

和我们在nginx服务器上定义的格式一致了。

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

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

3、Linux日志配置文件

log配置简单理解:来自source的日志,如果匹配了filter,将会发往destination。

这里的filter是f_linux,内容是不匹配f_nginx的日志,所以从这里可以看出为什么我们在创建配置文件时要考虑文件命名。

templatet_linux {

template("timestamp=\"$\",dest_ip=\"$\",devicetype=\"Linux\",facility=\"$\",severity=\"$\",program=\"$\",syslogta

g=\"$\",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://kuaibao.qq.com/s/20190202G0T9NZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券