rsyslog条件过滤可在写入磁盘前分流或丢弃日志,提升效率;按程序名、内容关键词精准屏蔽低价值日志;依优先级分级分流至不同路径;模块化配置便于维护;配合logrotate实现三层管控。

直接过滤掉冗余日志,比事后清理更高效。rsyslog 的条件过滤机制能在日志写入磁盘前就完成分流或丢弃,从源头减少无效数据堆积。
按程序名精准屏蔽低价值日志
某些服务(如 dhclient、avahi-daemon、bluetoothd)默认产生大量 debug 或 info 级别日志,实际运维中极少查阅。可在 /etc/rsyslog.d/50-filter.conf 中添加规则直接丢弃:
-
:programname, isequal, "dhclient" ~—— 匹配 dhclient 所有日志并丢弃 -
:programname, startswith, "snapd" ~—— 屏蔽所有 snapd 开头的进程日志 -
:msg, contains, "DHCPACK" ~—— 按内容关键词过滤(慎用,避免误杀)
注意:每条规则后必须加 ~,表示“匹配即终止处理”,否则仍会落入后续通用规则。
按优先级分级分流,避免混存挤占空间
不是所有日志都需要长期保留。可将高频率但低敏感度的日志(如 info、debug)导向独立路径或直接丢弃,而保留 warning 及以上级别到主日志区:
- 在配置文件中定义模板:
$template LowPriLogs,"/var/log/lowpri/%$YEAR%-%$MONTH%-%$DAY%.log" - 添加分流规则:
*.info;*.debug ?LowPriLogs & ~ - 再为关键级别单独配置:
*.warning;*.err;*.crit /var/log/warn-and-above.log
这样既保留了排障必需信息,又避免 info 日志把 /var/log 填满。
启用模块化过滤,提升规则可维护性
避免把所有规则堆在单个文件里。建议分层管理:
- 在 /etc/rsyslog.d/ 下建多个小文件,如
10-dhcp-drop.conf、20-kernel-filter.conf - 每个文件只处理一类逻辑,便于定位和开关
- 确认 rsyslog 加载顺序:数字前缀越小越先加载,确保基础模块(如 imudp/imtcp)已启用
修改后执行 sudo systemctl restart rsyslog 并用 sudo rsyslogd -N1 验证语法无误。
配合 logrotate 做二次控制
过滤是第一道关,轮转是第二道保障。即使做了过滤,分流后的日志仍需合理归档:
- 为独立路径(如
/var/log/lowpri/)单独配置 logrotate 规则 - 示例:
/var/log/lowpri/*.log { daily rotate 2 compress missingok notifempty } - 不压缩也可接受——这类日志本就不重要,快速轮替+自动删除比压缩更省 CPU
过滤 + 分流 + 轮转三层联动,能稳定把日志增长控制在预期范围内。











