syslog 记录格式
Linux 传统 syslog 记录形如 Oct 12 09:15:30 host sshd[1234]: message,时间不含年份也不带时区,跨年或跨主机分析时容易产生歧义。较新的 rsyslog 可以配置带年份与时区的高精度格式,先确认本机采用哪一种,再决定解析方式。
基本信息
| 传统格式 | 月日时分秒、主机名、程序与 PID、消息,无年份与时区 |
|---|---|
| 高精度格式 | 带年份、时区偏移与微秒,由 rsyslog 模板控制 |
| 格式定义 | rsyslog.conf 及 rsyslog.d 目录中的模板设置 |
| 验证方法 | 用正则匹配行首即可判断实际采用哪种格式 |
| 常见问题 | 无年份导致跨年度分析时归属困难 |
| 权限要求 | 读取系统日志需要 root 或相应组 |
典型使用场景
- 解析日志前先确认时间字段格式
- 处理跨年度日志的时间归属问题
- 跨主机对齐时间线时统一格式口径
- 编写可靠的日志解析与统计脚本
- 判断日志是否经过格式改造
最小示例
最小示例
head -3 /var/log/auth.log # 观察行首实际格式
grep -c '^[A-Z][a-z][a-z] ' /var/log/auth.log # 统计传统格式行数
grep -cE '^[0-9]{4}-[0-9]{2}-[0-9]{2}T' /var/log/auth.log # 统计高精度格式行数
grep -Rn 'ActionFileDefaultTemplate\|RSYSLOG_' /etc/rsyslog.conf /etc/rsyslog.d/ 2>/dev/null | head
date # 与本机当前时间对照
timedatectl 2>/dev/null | head -6 # 时区与时钟状态格式要素对照
| 要素 | 传统格式 | 高精度格式 |
|---|---|---|
| 时间 | Oct 12 09:15:30,无年份无时区 | 2026-10-12T09:15:30.123456+08:00 |
| 主机名 | 有 | 有 |
| 程序与 PID | sshd[1234] | sshd[1234] |
| 时间精度 | 秒 | 微秒 |
| 跨年判断 | 需要结合其它信息推断 | 可直接判定 |
不含年份的格式在跨年度分析时要结合文件 mtime 或轮转顺序推断年份,报告中需写明推断依据,不要默认按当年处理。
同一台主机上不同程序可能使用不同模板,逐个文件确认比按系统统一假设更可靠。
日志格式被改动既可能是运维优化,也可能是掩盖行为的前置动作,属于需要结合文件时间戳核查的信息。
修改日志模板会改变后续记录格式;取证阶段先保存当前配置,不要为了统一格式而调整线上配置。