rsyslog 按什么顺序处理 /etc/rsyslog.d/ 下的配置文件?

rsyslog 按文件名字典序加载 /etc/rsyslog.d/ 中的 .conf 文件,数字前缀控制顺序;规则先写先生效,需注意冲突与停止规则。本文详解加载机制与排序实践。

最佳实践
rsyslog 按什么顺序处理 /etc/rsyslog.d/ 下的配置文件?封面

结论: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.conf20-custom.conf 先于 30-advanced.conf

为什么顺序重要

rsyslog 的规则是逐条匹配、顺序执行的:

  • 排在前面的过滤规则先命中,动作先执行
  • 如果前面的规则把消息写走后执行了 stop(或旧语法 ~),后面的规则就再也看不到这条消息
  • 重复配置同一个动作(比如两条规则都把所有日志写进 /var/log/syslog)会导致重复写入

排序实践

  1. 用数字前缀管理顺序10-*.conf20-*.conf50-*.conf,一眼看出先后。
  2. 具体规则放前面,兜底规则放后面:比如先把某应用的日志分流到专属文件并 stop,再放通用的兜底写入规则。
  3. 避免跨文件重叠配置:两个文件都定义同名模板或重复规则,后加载的未必覆盖前面的,容易出现难以排查的行为。
  4. 改完先校验再重启rsyslogd -N1 检查语法,systemctl restart rsyslog 生效。

观测云对照

分流规则可以更省心。 传统做法靠 rsyslog 规则顺序做日志分流,规则多了容易互相打架。改用 DataKit 采集后,按来源直接配置不同日志集合并分别设置存储策略与索引,分流逻辑集中可见,不再依赖文件加载顺序。

常见问题(FAQ)

Q:没有数字前缀的文件怎么排序?
A:纯按字母序,app.confzdb.conf 之前。建议统一加数字前缀。

Q:rsyslog.d 里的配置会覆盖主配置文件吗?
A:不是覆盖关系,而是拼接。同名全局指令(如 $RepeatedMsgReduction)以最后加载到的为准,规则则全部生效。

Q:如何让某条消息只进一个文件?
A:在该条规则的动作后加 stop,阻止后续规则继续处理这条消息。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台