外观
Syslog 协议详解
1. Syslog 协议概述
1.1 协议作用
Syslog 协议是用于网络设备、服务器和应用程序进行日志记录和传输的标准化协议。它提供了一种统一的机制来收集、传输和存储系统日志信息。
Syslog 的核心价值
Syslog 协议解决了异构系统中日志管理的标准化问题,使得不同厂商、不同类型的设备能够使用统一的格式进行日志记录和传输。
1.2 历史发展
- RFC 3164 (2001):最初的 BSD Syslog 协议规范
- RFC 5424 (2009):现代化的 Syslog 协议规范
- RFC 5425 (2009):传输层安全扩展
- RFC 5426 (2009):可靠传输机制
版本选择建议
新系统推荐使用 RFC 5424 标准,老系统可以继续使用 RFC 3164 兼容模式。
2. Syslog 架构组成
2.1 核心组件
Syslog 架构由以下核心组件构成:
2.1.1 日志源 (Originator)
- 生成日志消息的实体
- 可以是操作系统、应用程序或网络设备
2.1.2 发送者 (Sender)
- 负责将日志消息发送到收集器
- 支持多种传输协议
2.1.3 中继器 (Relay)
- 可选组件,用于转发日志消息
- 可以进行消息过滤和修改
2.1.4 收集器 (Collector)
- 接收和处理日志消息
- 通常是 Syslog 服务器
2.2 传输协议
Syslog 支持多种传输协议,各有特点:
| 协议 | 端口 | 可靠性 | 连接类型 | 适用场景 |
|---|---|---|---|---|
| UDP | 514 | 不可靠 | 无连接 | 高性能场景,允许丢包 |
| TCP | 514/601 | 可靠 | 有连接 | 要求可靠传输的场景 |
| TLS/TCP | 6514 | 可靠+安全 | 有连接 | 敏感信息传输 |
UDP 传输的局限性
UDP 协议不保证消息送达,在网络拥塞或设备故障时可能丢失日志。如果业务对日志完整性要求较高,应使用 TCP 或 TLS 传输。
3. Syslog 消息格式
3.1 RFC 5424 消息格式
现代 Syslog 消息遵循以下格式:
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID [SD-ID PARAM-NAME="PARAM-VALUE"] MSG1
3.1.1 字段说明
| 字段 | 必选 | 说明 | 示例 |
|---|---|---|---|
<PRI> | 是 | 优先级 | <34> |
| VERSION | 是 | 协议版本 | 1 |
| TIMESTAMP | 是 | ISO 8601 时间戳 | 2023-12-30T10:30:00Z |
| HOSTNAME | 是 | 主机名或 IP | server01.example.com |
| APP-NAME | 否 | 应用名称 | apache2 |
| PROCID | 否 | 进程 ID | 1234 |
| MSGID | 否 | 消息 ID | ID123 |
| SD | 否 | 结构化数据 | [meta sequenceId="1"] |
| MSG | 否 | 消息内容 | User login successful |
3.2 RFC 3164 消息格式
传统格式相对简单:
<PRI> TIMESTAMP HOSTNAME TAG: MSG1
版本兼容性
RFC 3164 是向后兼容格式,许多老旧设备仍然使用这种格式。现代 Syslog 实现通常支持两种格式。
4. Syslog 消息优先级
Syslog 消息是采用 BSD syslogd 风格的 facility.priority 格式。其中 facility 是设施代码,priority 是优先级。
4.1 设施代码 (Facility)
设施代码标识日志消息的来源类型:
| 代码 | 关键字 | 描述 | 示例 |
|---|---|---|---|
| 0 | kern | 内核消息 | 硬件故障、驱动问题 |
| 1 | user | 用户级别消息 | 用户应用日志 |
| 2 | 邮件系统 | SMTP、POP3 服务 | |
| 3 | daemon | 系统守护进程 | 系统服务日志 |
| 4 | auth | 认证/授权 | 登录、权限变更 |
| 5 | syslog | Syslog 自身 | Syslog 服务消息 |
| 6 | lpr | 打印系统 | 打印队列、作业 |
| 7 | news | 新闻系统 | NNTP 服务 |
| 8 | uucp | UUCP 系统 | 文件传输 |
| 9 | cron | 时钟守护进程 | 定时任务 |
| 10 | authpriv | 私有认证 | 敏感认证信息 |
| 11 | ftp | FTP 服务 | 文件传输协议 |
| 12 | ntp | NTP 服务 | 时间同步 |
| 13 | logaudit | 日志审计 | 安全审计 |
| 14 | logalert | 日志告警 | 紧急告警 |
| 15 | clock | 时钟守护进程 | 系统时钟 |
| 16-23 | local0-7 | 本地使用 | 自定义应用 |
设施代码选择建议
- 系统服务使用对应标准设施代码
- 自定义应用建议使用 local0-local7
- 安全相关日志使用 auth 或 authpriv
4.2 严重级别 (Severity)
严重级别表示消息的重要性,从 0 (最严重) 到 7 (最不重要):
| 代码 | 关键字 | 描述 |
|---|---|---|
| 0 | emerg | 紧急情况,系统不可用 |
| 1 | alert | 必须立即处理 |
| 2 | crit | 关键条件 |
| 3 | err | 错误条件 |
| 4 | warning | 警告条件 |
| 5 | notice | 正常但重要的消息 |
| 6 | info | 信息性消息 |
| 7 | debug | 调试信息 |
严重级别使用原则
严重级别应该反映消息对系统运营的影响程度,而不是消息的技术严重性。
4.3 优先级示例
4.3.1 优先级计算原理
Syslog 优先级是一个 8 位数字,由设施代码 (Facility) 和严重级别 (Severity) 组合计算:
优先级 = (设施代码 × 8) + 严重级别
4.3.2 计算示例
Facility: mail (2)
Severity: err (3)
Priority = 2 × 8 + 3 = 19
Facility: local0 (16)
Severity: warning (4)
Priority = 16 × 8 + 4 = 1321
2
3
4
5
6
7
2
3
4
5
6
7
4.3.3 常用优先级
| 优先级 | 设施 | 严重级别 | 含义 |
|---|---|---|---|
| 0 | kern | emerg | 内核紧急情况 |
| 9 | cron | alert | 定时任务告警 |
| 23 | local0 | err | 本地应用错误 |
| 30 | daemon | info | 守护进程信息 |
| 191 | local7 | debug | 本地调试信息 |
优先级过滤风险
设置过高的过滤阈值可能导致重要日志被丢弃。建议在测试环境中验证过滤规则。