如何让rsyslog的imfile模块递归动态添加日志文件?
用rsyslog imfile模块递归监控子目录日志文件
你完全可以直接在rsyslog.conf里通过imfile模块实现动态递归配置,不需要依赖脚本生成静态文件列表——不过这个功能要求rsyslog版本在8.2006及以上,先确认你的版本:
rsyslogd -v
输出里能看到具体版本号,满足要求就可以按下面的步骤配置:
- 加载imfile模块
在rsyslog.conf开头添加模块加载指令,同时设置轮询间隔(单位秒,按需调整):
module(load="imfile" PollingInterval="10")
- 配置递归监控规则
添加input块,用**通配符实现递归匹配所有子目录下的.log文件:
input( type="imfile" File="/var/log/**/*.log" Tag="app-logs:" Severity="info" Facility="local0" PersistStateInterval="1000" ReadMode="2" reopenOnTruncate="on" )
各参数说明:
File="/var/log/**/*.log":**表示递归匹配所有层级的子目录,精准定位所有.log文件Tag:给这类日志打标记,方便后续过滤或转发时识别Severity/Facility:自定义日志的级别和设备,可根据需求调整PersistStateInterval:每处理1000行日志就保存一次读取位置,避免rsyslog重启后重复读取旧日志ReadMode="2":按行读取日志,实时跟踪文件内容变化reopenOnTruncate="on":当日志文件被截断(比如日志轮转)时自动重新打开,防止丢失新日志
- 验证并生效配置
先检查配置文件语法是否正确:
rsyslogd -N1
如果没有报错,重启rsyslog服务让配置生效:
systemctl restart rsyslog
注意事项
- 旧版本兼容:如果你的rsyslog版本低于8.2006,那就只能用你之前参考的脚本生成静态配置的方案,因为旧版本不支持
**递归通配符 - 性能优化:如果/var/log下的日志文件数量极多,建议适当调大
PollingInterval,避免频繁轮询占用过多系统资源 - 权限问题:确保rsyslog进程(通常是syslog用户)拥有所有目标.log文件的读取权限,否则会监控失败
内容的提问来源于stack exchange,提问作者mat.viguier
相关产品推荐
相关产品推荐

