RHEL 7中Rsyslog配置咨询:仅保留系统日志至/var/log/messages
我在RHEL 7环境下处理过很多日志过滤的需求,刚好能解决你遇到的问题。下面是一步步的配置方法,帮你精准保留系统相关日志到/var/log/messages,同时丢弃无关内容:
1. 先备份原有配置(重要!)
在修改配置前,先备份默认的rsyslog配置文件,防止配置出错无法恢复:
cp /etc/rsyslog.conf /etc/rsyslog.conf.bak
2. 编辑Rsyslog主配置文件
打开/etc/rsyslog.conf,先找到默认的/var/log/messages规则行,一般是这样的:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
把这一行注释掉(在开头加#),然后替换成你需要的精准过滤规则。这里的核心是明确哪些是“系统相关日志”,通常包括内核、认证、系统守护进程、syslog自身的日志,你可以根据需求调整:
# 保留内核日志 kern.* /var/log/messages # 保留认证/权限相关日志 authpriv.* /var/log/messages # 保留系统守护进程日志 daemon.* /var/log/messages # 保留syslog服务自身的日志 syslog.* /var/log/messages
如果需要更精细的级别控制(比如只保留info及以上级别,排除debug),可以写成:
kern.info;kern.!emerg /var/log/messages authpriv.info;authpriv.!emerg /var/log/messages daemon.info;daemon.!emerg /var/log/messages syslog.info;syslog.!emerg /var/log/messages
3. 添加丢弃无关日志的规则
在上面的规则之后,添加一行来丢弃所有其他未匹配的日志:
# 丢弃所有未匹配的日志消息 *.* ~
注意:
~是rsyslog传统的“丢弃”动作,在RHEL 7的rsyslog版本中完全有效。如果是更新的版本,也可以用:stop,但~在这里更直观。
4. 检查自定义配置目录
如果你的系统在/etc/rsyslog.d/目录下有自定义的配置文件,也要检查这些文件,确保没有冲突的规则(比如某些文件可能会强制把特定日志写到messages里)。如果有冲突,要么修改这些文件,要么删除不需要的规则。
5. 重启Rsyslog服务并验证
配置完成后,重启rsyslog服务让配置生效:
systemctl restart rsyslog
接下来验证效果:
- 查看
/var/log/messages,确认只有你指定的系统日志存在; - 用测试命令生成一条无关日志,比如用户级别的日志:
这条日志应该不会出现在logger -p user.info "This is a test user log"/var/log/messages里,说明过滤生效了。
额外提示
如果需要调试过滤规则,可以在前台运行rsyslog,实时查看日志处理情况:
systemctl stop rsyslog rsyslogd -n -f /etc/rsyslog.conf
这样就能看到哪些日志被匹配、哪些被丢弃,方便调整规则。
内容的提问来源于stack exchange,提问作者mokazo

