如何在systemd-journald存储日志前过滤冗余日志消息
如何在systemd-journald存储日志前过滤冗余日志消息
当然可以实现!systemd-journald本身就支持在日志落地存储前过滤掉你不需要的冗余消息,完全不用依赖外部日志管理器,也和查询时的过滤逻辑完全分开。下面是具体的配置步骤:
1. 使用自定义配置片段(推荐方式)
为了不修改默认的/etc/systemd/journald.conf主配置文件,避免后续系统更新覆盖你的设置,我们可以在/etc/systemd/journald.conf.d/目录下创建独立的过滤配置文件,这样更便于管理和维护。
比如创建一个专门过滤监控登录日志的配置文件:
sudo touch /etc/systemd/journald.conf.d/filter-monitor-logins.conf
2. 添加针对性过滤规则
编辑这个配置文件,根据你的实际需求添加匹配规则。journald支持多种过滤方式,最常用的两种是精确匹配和正则表达式匹配:
方式一:精确匹配固定消息内容
如果你能明确写出要过滤的完整消息文本,可以使用FilterMessage配置项,开头加!表示丢弃匹配到的日志:
[Journal] # 丢弃包含"monitoring system login"的日志消息 FilterMessage=!monitoring system login
方式二:正则表达式匹配(更灵活)
如果日志消息有固定格式但包含动态内容(比如带时间戳、变量用户名),用正则表达式匹配会更实用,使用FilterMessageRegex配置项:
[Journal] # 丢弃所有"monitor"用户的登录日志 FilterMessageRegex=!session opened for user monitor
如果你需要批量过滤低优先级日志(比如debug、info级别的冗余消息),还可以用优先级过滤:
[Journal] # 只存储warning及更高级别的日志(自动丢弃info、debug等低优先级内容) FilterPriority=warning
3. 重启journald让规则生效
配置完成后,重启systemd-journald服务即可应用新的过滤规则:
sudo systemctl restart systemd-journald
补充小技巧
- 针对特定服务的日志(比如sshd的登录记录),可以结合服务名编写更精准的正则,比如:
!sshd\[.*\]: Accepted publickey for monitor - 如果你不想完全丢弃日志,只是想限制高频冗余消息的生成频率,可以用
RateLimitIntervalSec和RateLimitBurst配置,比如设置RateLimitIntervalSec=30s和RateLimitBurst=5,表示30秒内同一消息最多记录5次,超出的会被临时丢弃
备注:内容来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

