Syslog 定义了许多类 Unix 系统采用的消息模型和传输惯例。Rsyslog 是其中一种实现,可以接收、过滤、转换、存储和转发消息。它可以与 systemd-journald 共存;无论哪一个名称,都不意味着每个应用程序都使用这条路径。
日志 · 第 2 课
syslog
学习 syslog 的设施、严重级别、路由规则以及 logger 命令如何工作。
设施与严重级别
一条 syslog 消息带有设施字段,用来描述大致来源类别,同时带有从紧急到调试的严重级别。常见设施包括 auth、cron、daemon、kern、mail、user,以及 local0 到 local7。
严重级别具有顺序。在经典选择器语法中,daemon.warning 通常会匹配 daemon 设施中 warning 及所有更严重级别的消息,而不只是 warning。支持经典语法的实现可以使用等号修饰符进行精确匹配,例如 daemon.=warning。
daemon.warning 这样的经典选择器通常匹配什么?
阅读 rsyslog 规则
Rsyslog 通常加载一个主文件和 /etc/rsyslog.d/ 下的配置片段。传统规则由选择器和其后的操作组成:
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
kern.* /var/log/kern.log
第一行路由两个身份验证设施的所有优先级。第二行广泛选择消息,但排除这两个设施。第三行路由内核设施消息。文件操作前的 - 通常表示请求异步写入,并不表示排除。
更改生产环境路由前,应检查所有被包含的文件,并验证已安装版本所用的确切语法。
在传统 rsyslog 规则中,哪一部分是操作?
发送测试消息
使用 logger 提交一条带有可识别标签和优先级的受控测试消息:
$ logger -p user.notice -t lesson-test 'routing check 2026-08-31T10:00'
然后查询预期目的地,例如:
$ journalctl -t lesson-test --since '5 minutes ago'
根据转发和路由配置,同一个事件可能同时出现在 journal 和文本文件中。logger -s 还会将消息复制到标准错误,但这不能证明消息已被持久存储。
logger -t lesson-test 会向提交的消息添加什么?
更改并验证路由
更改前,应保存当前配置并确定下游使用者。使用当前实现的配置检查模式验证语法,通常为:
$ sudo rsyslogd -N1
只有验证通过后,才能通过服务管理器重新加载服务。发送一条新的带标签消息,验证每个必需目的地,并检查服务状态和内部错误日志。语法有效的规则仍可能路由范围过宽、产生重复记录或暴露敏感数据。
日志跨越不可信网络时,远程转发应使用经过身份验证的加密传输。UDP 传送没有端到端确认;关键审计要求需要采用能够处理队列、丢失、完整性、访问控制和接收端中断的设计。
什么足以证明新路由规则可以正常工作?
课程已完成
你已完成 syslog
现在,你可以从消息元数据一直测试到 syslog 配置的目的地。
区分设施与有序的严重级别。
分别阅读选择器及其操作。
使用
logger发送带标签和优先级的事件。验证配置,并端到端确认传送结果。