rsyslog不记日志问题分析记录(2)

本文记录了在使用rsyslog作为日志记录工具时遇到的日志突然停止记录的问题。问题根源在于rsyslog监听的/dev/log端口变化,而某些程序的socket监听端口未随之变化。解决方案包括在日志接口调用openlog_internal函数以更新端口,以及手动或自动删除listen.conf文件后重启rsyslog。同时,文中提到了glibc的syslog函数和rsyslog源码的相关信息。
摘要由CSDN通过智能技术生成

    实际工作中用到了rsyslog来做本地日志的记录工具。但在实际使用过程中,偶尔会出现日志写着写着,就不记日志的情况。具体原因是因为,rsyslog监听的/dev/log的端口变了,但是使用记录日志的程序,对应的域socket监听的端口没有变。具体的可见以下的分析内容。

以下是第二阶段的分析报告。

glibc版本:glibc-2.17-222.el7.x86_64

rsyslog版本:8.24.0

 

该问题最近又看了一段时间,定位原因和之前定位的结论一样。问题的根节点在于rsyslog监听/dev/log的端口有时会变,而有的网元监听该端口没有跟随变化导致不能正常记日志。但仍无法弄清楚rsyslog打开的/dev/log的端口为什么会变化,并且有的网元没有跟随变化。目前进一步的验证是,通过GDB在不记日志的网元调用流程中,重新调用openlog_internal函数的话,监听端口会变成正确的监听端口,并重新开始记日志。而openlog会调用该函数,所以可以在当前代码的日志函数接口里,增加该函数的调用。虽然该函数在rsyslog的man手册里说明并非必须,但增加该函数的调用后,应该能解决偶尔出现不记日志的情况。

如果基于以上方法修改的话,则在日志的函数接口中会增加处理流程,因此就有可能会影响日志记录的效率,所以针对不调用openlog和调用openlog,写了小程序进行日志性能的测试,具体结论如下:

 

 

 

日志记录起始时间

日志记录结束时间

产生日志的大小

产生日志的条数

时间(S)

平均值

每条日志产生30个字符

不使用openlog

16:20:49

16:22:08

737M

11513084

79

145735

使用openlog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值