syslog-ng配置咨询:如何按进程拆分日志文件
syslog-ng配置咨询:如何按进程拆分日志文件
当然可以实现这个需求啦!syslog-ng自带的宏就能帮你轻松按进程拆分日志,具体操作很简单,看下面的说明:
首先,你需要了解syslog-ng里的PROGRAM宏——它会自动提取日志行里的进程名称,还能智能去掉后面跟着的PID(比如日志里的CRON[2342925],PROGRAM宏会只保留CRON),完全匹配你想要的按进程拆分的需求。
接下来只需要修改你的destination配置部分,把原来按FACILITY命名日志文件的逻辑,换成用PROGRAM即可,同时保留按IP分目录的结构。
修改后的完整配置如下:
source s_network_udp { syslog(transport(udp) port(514)); }; destination d_local { file("/var/log/${HOST}/${PROGRAM}.log" create_dirs(yes)); }; log { source(s_network_udp); destination(d_local); };
配置生效后,你会得到这样的文件结构:
- ./0.0.0.1/systemd-resolved.log
- ./0.0.0.1/CRON.log
- ./0.0.0.2/systemd-resolved.log
- ./0.0.0.2/CRON.log
...
原来混在daemon.log里的不同进程日志,现在都会各自存到对应的进程名日志文件中,完美解决你的问题~
最后给你几个小提醒:
- 修改完配置后,先运行
syslog-ng -s检查语法是否正确,没问题再重启syslog-ng服务; - 如果遇到进程名包含特殊字符(比如空格、斜杠)的情况,可以用syslog-ng的模板功能来格式化进程名,替换掉特殊字符;
- 按进程拆分后日志文件数量可能会增多,记得配置logrotate这类工具进行日志轮转,避免磁盘空间被占满。
备注:内容来源于stack exchange,提问作者user9503
相关产品推荐
相关产品推荐

