syslog 消息格式详解:PRI、时间戳、TAG 各是什么?
syslog 消息由 PRI(优先级数字)、Header(时间戳+主机名)、MSG(TAG+内容)三部分组成。PRI = facility×8 + severity。本文拆解 RFC 3164 格式与各字段含义。
一条经典 syslog 消息长这样:<34>Oct 11 22:14:15 myhost su: 'su root' failed——尖括号里是优先级 PRI,随后是时间戳、主机名、进程标签和正文。
三段结构(RFC 3164)
<PRI> TIMESTAMP HOSTNAME TAG: MESSAGE
<34> Oct 11 22:14:15 myhost su: 'su root' failed for lonvick on /dev/pts/8
- PRI:尖括号内的数字 =
facility × 8 + severity。34 = facility 4(auth)× 8 + severity 2(critical); - TIMESTAMP:
Mmm dd HH:MM:SS本地时间(注意没有年份和时区——老格式的著名缺陷); - HOSTNAME:来源主机;
- TAG:产生消息的进程名(如
su:),常带 PID; - MESSAGE:正文,最大 1024 字节。
新版本:RFC 5424
<34>1 2024-01-15T10:30:00.123Z myhost app 1234 ID47 [exampleSDID@32473 k="v"] 消息正文
增加了:版本号、带时区的高精度时间戳、结构化数据(SD 段)。新部署建议用 5424。
观测云对照
观测云 DataKit 的 syslog 采集器同时兼容 3164/5424 两种格式,自动解析 facility、severity、hostname 为可检索字段。
常见问题(FAQ)
Q:facility 和 severity 常见值? facility:0 kern、1 user、3 daemon、4 auth、16-23 local0-7;severity:0 emerg 到 7 debug。
Q:时间戳没有年份怎么办? 接收端按接收时间补年份——跨年归档时注意歧义。