rsyslog 按什么顺序处理 /etc/rsyslog.d/ 下的配置文件?
rsyslog 按文件名字典序加载 /etc/rsyslog.d/ 中的 .conf 文件,数字前缀控制顺序;规则先写先生效,需注意冲突与停止规则。本文详解加载机制与排序实践。
结论:rsyslog 按文件名的字典序(lexicographical)依次处理 /etc/rsyslog.d/ 目录下的配置文件——从主配置 rsyslog.conf 中的 $IncludeConfig /etc/rsyslog.d/*.conf 展开,先排在前面的文件先被读取,规则也就先生效。
加载机制
主配置文件 /etc/rsyslog.conf 末尾通常有这样一行:
$IncludeConfig /etc/rsyslog.d/*.conf
启动时 rsyslog 先读主配置,遇到 include 指令时把匹配的文件按字典序逐个展开拼接,形成一份完整的规则集。10-base.conf 先于 20-custom.conf,20-custom.conf 先于 30-advanced.conf。
为什么顺序重要
rsyslog 的规则是逐条匹配、顺序执行的:
- 排在前面的过滤规则先命中,动作先执行
- 如果前面的规则把消息写走后执行了
stop(或旧语法~),后面的规则就再也看不到这条消息 - 重复配置同一个动作(比如两条规则都把所有日志写进
/var/log/syslog)会导致重复写入
排序实践
- 用数字前缀管理顺序:
10-*.conf、20-*.conf、50-*.conf,一眼看出先后。 - 具体规则放前面,兜底规则放后面:比如先把某应用的日志分流到专属文件并
stop,再放通用的兜底写入规则。 - 避免跨文件重叠配置:两个文件都定义同名模板或重复规则,后加载的未必覆盖前面的,容易出现难以排查的行为。
- 改完先校验再重启:
rsyslogd -N1检查语法,systemctl restart rsyslog生效。
观测云对照
分流规则可以更省心。 传统做法靠 rsyslog 规则顺序做日志分流,规则多了容易互相打架。改用 DataKit 采集后,按来源直接配置不同日志集合并分别设置存储策略与索引,分流逻辑集中可见,不再依赖文件加载顺序。
常见问题(FAQ)
Q:没有数字前缀的文件怎么排序?
A:纯按字母序,app.conf 在 zdb.conf 之前。建议统一加数字前缀。
Q:rsyslog.d 里的配置会覆盖主配置文件吗?
A:不是覆盖关系,而是拼接。同名全局指令(如 $RepeatedMsgReduction)以最后加载到的为准,规则则全部生效。
Q:如何让某条消息只进一个文件?
A:在该条规则的动作后加 stop,阻止后续规则继续处理这条消息。