Rsyslog日志格式实例:记录IP地址而非主机名

1.背景

Rsyslog日志平台-日志工作流引擎,中介绍了基于rsyslog日志采集中心的案例。这里rsyslog都是V8.2以上版本。

日志客户(192.168.1.29)将日志发送到日志采集中心(192.168.2.27)的时候,日志中的地址默认是发送日志主机的名称或者IP,但不同的Linux有区别。这样汇聚到rsyslog日志采集中心就会出现无法日志记录中没有IP,如下:

Sep 10 10:13:55 localhost.localdomain mysql [task_output] ,20210910i31083,print.doc,1,2,…

rsyslog使用本机的hostname来记录,网上很多文章介绍了rsyslog解决这个问题的方法。

  1. 修改/etc/hosts文件,增加一条域名记录,然后hostname命令可以看到新的域名(需要重启网络),或者直接hostname {主机名}马上生效(但不能保存),例如下面都是可行的

    hostname mail.test.com
    hostname 192.168.1.29
    
  2. 在配置文件中自定义 L o c a l h o s t n a m e 、 Localhostname、 Localhostnamemyhostname、$PreserveFQDN之类,参见定位 rsyslog v8 的主机名是localhost 问题,但没有成功。

第1种方法勉强可用,但用IP当主机名比较别扭。总归rsyslog默认的日志格式中hostname/ip处理需要更好的处理方法。

2. rsyslog日志格式定义与模板

rsyslog日志的格式定义中是有很多变量或属性参数,http://www.rsyslog.com/doc/v8-stable/configuration/properties.html,可以在日志客户(192.168.1.29)上的/etc/rsyslog.conf中如下定义:

$template recippalette,"<%pri%>%protocol-version% %timestamp::date-rfc3339% 192.168.1.29 %app-name% %msg%\n"
local4.*              /var/log/mysql.log;recippalette
#local4.*             @192.168.2.27:514;recippalette

这里,在模板中直接自己定义了日志的格式,%%中间都是rsyslog变量(MSG属性,如果系统属性是 开 头 , 如 开头,如 year),地址部分默认是%hostname%,为什么不用变量 %fromhost-ip% 是因为它很多时候是’127.0.0.1’,不如直接上真实IP。然后将本机local4.*级别日志全部用recippalette模板就可以实现用真实IP记录日志,也可以发送到日志收集中心。

rsyslog v8支持新格式模板语法和旧格式模板语法,对于简单需求,使用旧格式更加直观吧!

案例中,有的日志是通过logger命令发出的,logger命令是rsyslog的客户端工具之一,配置同样有效。

但是,logger -n 192.168.2.27 …,是直接发到远端,就不会使用本地的配置模板。可以用配置上面最后注释的那一行的方式,不使用-n 参数,在本地先处理一次IP,再自动发送到远端日志服务器192.168.2.27。

3.日志(收集)中心的操作

用来上面的模板后,从日志客户端发送的原始日志就已经带上自己的IP。

在日志收集中心(192.168.2.27)上,还需要对收集的日志进行分目录存储(每个日志客户IP一个目录,并按日期区分),/etc/rsyslog.conf中定义如下:

$template fromRemote,"/home/logdata/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
:fromhost-ip, !isequal, "127.0.0.1" ?fromRemote

# 这里是当日志客户中没有进行IP替换的时候,在日志中心进行统一替换,并转发到其它日志服务设备。
$template relay,"<%pri%>%protocol-version% %timestamp::date-rfc3339% %fromhost-ip% %app-name% %msg%\n"
:fromhost-ip, !isequal, "127.0.0.1" @192.168.0.32:514;relay

#如果不需要处理,直接转发到其它日志服务器
# *.* @192.168.0.32:514

第一部分模板,就是根据日志客户的IP地址(fromhost_ip),自动生成日志目录,按IP和日期,对所有日志客户(非本机)的日志按本模板进行存储。

甚至可以对IP地址按段来定义存储路径
:fromhost-ip, startswith,“192.168.10.” ?fromRemote

第二部分模板,是可以将收集到的日志转发到其它日志服务设备(192.168.0.32),如ELK分析系统,如果所有的日志客户都自己处理好了了IP地址,就直接转发,否则就需要在日志收集中心做一次转换。

根据性能考虑,建议是在日志客户这里自己处理好外发日志的ip问题。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值