📡 第三章 路由器和它庞大的功能
📄 一句话概括

日志级别不是「越细越好」:从错误级到 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 秒实验

  1. 查一下你设备的日志级别配到了第几级。
  2. 看日志是只存本地还是送到了集中服务器。
  3. 估一下按当前级别,一天会产生多少日志。

常见误区

  1. 以为日志越详细越好。debug 会把设备打满。
  2. 以为本地日志够用。环形缓冲会覆盖掉关键的那段。
  3. 以为 syslog 级别数字越大越严重。正好相反,0 最严重。
自测三问(点开对答案) 1. syslog 八个级别里哪个最严重? —— emergencies,数值 0。数值越小越严重。 2. debug 级别为什么不能长期开? —— 日志量暴涨、CPU 占用大增,可能把设备拖垮。 3. 为什么设备本地存储的日志不可靠? —— 是环形缓冲,写满后覆盖最老的记录,关键前因可能已被刷掉。

下一节:日志量突然变大时,先看 CPU。

相关笔记