日志级别不是「越细越好」:从错误级到 debug,日志量差 20 万倍。 debug 平时必须关——在忙的设备上一开,可能直接把设备打死。
上一节讲「怎么进去」,这一节讲「进去之后第一件事看什么」。 日志是排查的基础,但配置不当会反过来拖垮设备。
一、八个级别与开不开
级别 数值 该不该长期开
emergencies 0 必开 alerts 1 必开 critical 2 必开 errors 3 必开 warnings 4 开 notifications 5 开 informational 6 看情况 debugging 7 平时关
数值越小越严重,这是 syslog 标准的规定, 所以「开 0 到 4」的意思是「记录 0 到 4 这五级」,不是「0 到 4 个」。
二、debug 为什么是硬规矩
debug 日志会让 CPU 涨几倍:它不只是写一行字, 每条日志都要走格式化、排队、输出三段,而且在包处理路径上。
在忙的设备上一开就可能把设备打死。所以「开 debug 排查」必须限时、限条件、限输出量。
而且必须提前准备好怎么关: 如果 CPU 被打满、命令行都敲不进去,那就只能重启设备了——而这往往发生在最不该重启的时候。
三、日志量差 20 万倍
只开 0 到 3:约 3 MB 一天。开到 4:约 33 MB 一天。开到 6:约 494 MB 一天。 开到 7:约 8 GB 一天。
从几 MB 到几十 GB,差 20 万倍。 「日志服务器硬盘不够」几乎总是「级别开太细」。 而且真正的隐患不是硬盘,是「有用的那几条被埋在海里」。
四、实践三条
一、设备本地只留 0 到 4,日志实时送到集中服务器。本地环形缓冲很容易被刷掉,出事后就没了。 二、服务器按级别分文件,debug 单独一个文件并设短保留期。 这样「找错误」和「查细节」互不干扰。 三、时间必须准——否则几十台设备的日志排不出先后。时间不一致,等于没有日志。(下一节讲 NTP。 )
五、动手 Demo:日志的八个级别,与日志量怎么估
这段列出八个级别与开关建议,再按「每条 200 字节、每天不同条数」算四档级别下的日日志量。
for lv, cnt in ((3, 15000), (4, 165000), (6, 2470000), (7, 41200000)):
P(u" 开到 %d:约 %d MB/天。" % (lv, cnt * 200 // (1024 ** 2)))
实跑输出:
--------------------------------------------------------------------
日志的八个级别,与日志量怎么估
--------------------------------------------------------------------
**日志级别不是「越细越好」**:级别开太低,日志量能把设备与服务器都拖垮。
级别 数值 含义 该不该长期开
------------------------------------------------------------
emergencies 0 系统不可用 必开
alerts 1 需要立即处理 必开
critical 2 严重 必开
errors 3 错误 必开
warnings 4 警告 开
notifications 5 正常但重要 开
informational 6 信息 看情况
debugging 7 调试 平时关
**「debugging 平时关」这一条是硬规矩**:debug 日志会让 CPU 涨几倍,
**在忙的设备上一开就可能把设备打死。**
**所以「开 debug 排查」必须限时,而且要提前准备好怎么关。**
**算日志量**:
只开 0~3(错误以上):约 3 MB/天(按每条 200 字节)。
开到 4(含警告):约 33 MB/天(按每条 200 字节)。
开到 6(含信息):约 494 MB/天(按每条 200 字节)。
开到 7(debug):约 8240 MB/天(按每条 200 字节)。
**从 0.2 MB 到 40 GB,差 20 万倍。**这就是为什么「日志服务器硬盘不够」几乎总是「级别开太细」。
**实践三条**:
1. **设备本地只留 0~4**,日志实时送到集中服务器。
2. **服务器按级别分文件**,debug 单独一个文件并设短保留期。
3. **时间必须准**——否则几十台设备的日志排不出先后,等于没用。下一节讲 NTP。
「差 20 万倍」这个数字要记住,它说明日志级别不是一个「习惯」,是一个容量决策。 开错了不是「多存点」,是把存储打满。
「本地只留 0 到 4」的理由是「环形缓冲」:设备本地空间小,写满就覆盖最老的, 所以真正出事那一刻的日志,可能正好把关键的前因刷掉了。 这就是为什么必须实时外送。
最后一条「时间必须准」是下一节的引子:多台设备的日志汇总,时间差几秒就理不清因果。 而普通晶振一个月能漂几分钟——所以 NTP 不是「锦上添花」。
30 秒实验
- 查一下你设备的日志级别配到了第几级。
- 看日志是只存本地还是送到了集中服务器。
- 估一下按当前级别,一天会产生多少日志。
常见误区
- 以为日志越详细越好。debug 会把设备打满。
- 以为本地日志够用。环形缓冲会覆盖掉关键的那段。
- 以为 syslog 级别数字越大越严重。正好相反,0 最严重。
自测三问(点开对答案)
1. syslog 八个级别里哪个最严重? —— emergencies,数值 0。数值越小越严重。 2. debug 级别为什么不能长期开? —— 日志量暴涨、CPU 占用大增,可能把设备拖垮。 3. 为什么设备本地存储的日志不可靠? —— 是环形缓冲,写满后覆盖最老的记录,关键前因可能已被刷掉。下一节:日志量突然变大时,先看 CPU。
- ☐ (本节完,下一节 03.07.03 确认CPU使用率)