文章詳情

GCP帳號購買 谷歌雲系統日誌分析與故障定位:看懂 /var/log/messages 診斷當機原因

谷歌雲GCP2026-09-04 15:25:51谷歌雲優惠充值

第一章:從「當機」到「可驗證的原因」

很多人面對生產環境的當機,第一反應是焦慮:日誌看了一堆,卻不知道從哪裡下手。其實排查當機最有效的做法,不是把所有訊息都翻完,而是建立一條「可驗證的時間線」,再用系統化的方法縮小範圍。本文聚焦一個最常見也最關鍵的來源:Linux 的 /var/log/messages。你會看到,當你學會讀「訊息的語氣、來源與關聯」,當機原因就不再像謎語。

在谷歌雲(或任何以 Linux 為核心的環境)裡,/var/log/messages 通常會記錄核心、系統服務與硬體相關的事件摘要。它未必記載完整細節,但它最擅長回答幾件事:當機前發生了什麼?當機是由核心層觸發,還是應用層先出問題?系統是否出現磁碟、記憶體、網路或檔案系統的硬傷?是否有重複的錯誤模式,能直接指向某個元件或設定。

接下來我們會用實際排查思路走一遍流程,並穿插常見案例。你不需要懂所有內核知識,只要能把日誌讀出「先後關係」與「影響範圍」。

第二章:準備工作——先把時間點抓準

排查當機最容易犯的錯,是在錯誤的時間範圍內搜尋。你以為當機在上午九點發生,但其實服務開始異常在八點五十分,或是節點重啟在八點五十九分。日誌往往是連續的,真正的關鍵在於找到「事件中心」。

建議你先做三件事:

  • 確認當機/重啟/無回應的實際時間(包含時區)。
  • 確認受影響的範圍:是整台 VM 掛掉,還是單一服務停止?是否有自動重啟?
  • 收集同一時間段的相關線索:系統告警、監控(CPU、Memory、Disk I/O、Network)、以及最近的變更(更新、部署、掛載變更、擴縮容)。

當你能確定「當機前幾分鐘」或「當機前一小時」是目標區間,就能把 /var/log/messages 的搜尋聚焦在最有價值的行。

第三章:如何閱讀 /var/log/messages 的基本結構

/var/log/messages 的行通常包含時間戳、主機名、服務或模組名稱、以及訊息內容。你要做的第一件事不是逐字研究,而是辨識「誰在講話」。

你可以把日誌的語句拆成三個維度:

  • 來源(Source/Program):例如 kernel、systemd、cron、NetworkManager、fsck、ata、ext4、SELinux 等。來源決定你該看什麼領域。
  • 嚴重性(Severity):如 error、critical、alert、emerg(有時也以文字或符號表現)。嚴重性用來判斷是否「接近根因」。
  • 訊息內容(Message):是否提到 OOM、I/O error、hung task、superblock、journal、link failure、timeout、watchdog、soft lockup 等字眼。

另外,要注意兩種常見陷阱:

  • 訊息太多但沒有因果:某些錯誤是連鎖反應或是週期性告警。你需要找「最先出現」且「能造成當機」的那一類。
  • 時間排序錯誤:日誌檔輪替、系統時鐘跳動、容器環境層級不同,都可能讓你以為先後順序錯了。若你看到時間戳異常,先以重新啟動事件或 kernel 啟動訊息校正時間軸。

GCP帳號購買 第四章:建立「事件時間線」的實作方法

你不需要一行一行手動翻。最可靠的方式是用關鍵字把訊息切片,並把切片結果串成時間線。實務上,你可以用以下思路:

  • 先找當機或重啟附近的「關鍵事件」:例如 kernel: rebootsystemd: StartingrunlevelwatchdogCRITICAL
  • GCP帳號購買 再向前推,找造成環境失穩的「前兆」:例如 OOM killer、hung task、ext4 error、journal replay、磁碟超時。
  • 最後再觀察當機後的訊息:它們常告訴你「重啟是正常還是因故」。例如「檔案系統需要修復」「上次未正常關閉」等。

建立時間線時,你要特別記錄三件事:時間點來源模組訊息類型。這樣即使最後要查更多檔案(如 /var/log/syslog、dmesg、journalctl),你也不會迷路。

第五章:常見當機原因類型與 /var/log/messages 的典型訊號

當機原因多種多樣,但大致可歸成幾個類型。你把日誌中的語句映射到類型上,就能快速把搜尋範圍縮小。

5.1 核心崩潰或看門狗(kernel crash / watchdog)

當系統真的「當機」,常見的訊號是核心層面停止回應或被強制重啟。/var/log/messages 通常會出現:

  • watchdog 相關訊息:例如 soft lockup、hard lockup、watchdog: BUG、watchdog: reset。
  • kernel panic:panic、not syncing、Attempted to kill init。
  • 最後一段在重啟前後出現:重啟後的 kernel 起始訊息與檔案系統修復。

GCP帳號購買 如果你在當機前看到連續的 lockup 或 watchdog 觸發,原因多半與核心行為、驅動、硬體層(例如虛擬化網卡或磁碟控制器)或資源競爭相關。這種情況你要做的不只是看最後一句話,而是看「lockup 從何時開始、在哪個子系統先出錯」。

5.2 檔案系統損壞或磁碟 I/O 錯誤(fs/ext4/xfs + I/O errors)

很多「看似當機」其實是檔案系統在崩潰後的連鎖反應。當磁碟 I/O 出現問題,核心與檔案系統會反覆報錯,最後可能導致服務無法寫入重要狀態,進而觸發重啟或監控判定失效。

/var/log/messages 常見關鍵字:

  • ext4 / xfs:ext4 error、journal commit failure、recovery required、inode、superblock。
  • 磁碟 I/O:I/O error、blk_update_request failed、timeout、resetting device、Buffer I/O error。
  • 裝置層:ata、nvme、scsi、sdX 相關錯誤。

你需要注意的是:磁碟錯誤通常不是「突然出現」就讓整台掛掉。更常見的是先出現 timeout、再出現錯誤堆疊,最後在關鍵時間點觸發 watchdog 或導致必要服務停止。找到最早的 I/O timeout,就是你要追的起點。

5.3 記憶體不足(OOM killer)與資源耗盡

OOM(Out Of Memory)是最常見的「非核心崩潰但仍造成當機或重啟」原因之一。若系統因為記憶體被耗盡,核心會開始殺死進程,造成服務全面不可用;某些監控或系統策略可能再觸發重啟,讓你以為是當機。

/var/log/messages 常見訊號:

  • Out of memory、oom-killer、Killed process、memory cgroup out of memory。
  • 在 OOM 前的徵兆:大量 swapping、reclaim 失敗、kswapd 壓力、per-cpu memory 等相關字眼。

讀 OOM 訊息時,關鍵不在「它發生了」,而在「它殺了誰」。你要看被殺的進程名稱(或 PID)、當時的使用量與可能的責任服務。然後把這個進程的行為對照監控:例如部署後記憶體突增、資料處理任務卡住導致堆積。

GCP帳號購買 5.4 網路中斷與時間同步問題

網路問題本身未必造成硬當機,但可能造成:

  • 依賴外部服務的應用失去通訊,並因為重試風暴或阻塞而耗盡資源。
  • 某些系統服務或容器因網路不可用而進入不可恢復狀態。
  • 時間同步(NTP/chrony)異常,導致證書驗證、排程任務或登入流程失敗,間接造成災難。

/var/log/messages 常見關鍵字:

  • link down、NIC reset、carrier、failed to connect、timeout。
  • chrony 或 ntp:synchronization lost、clock jumped。

如果你在當機前看到頻繁網卡重置,通常需要結合雲平台事件(例如特定網段抖動、路由變更)或你自身的配置(例如 MTU、bonding、防火牆規則)。

5.5 系統服務失敗、依賴鏈錯誤與啟動流程崩潰

有些「當機」是因服務啟動失敗導致整體不可用。這類情況不一定有內核錯誤,但 /var/log/messages 仍可能出現 systemd 相關的 failure 與重啟。典型訊號:

  • systemd: unit failed、dependency failed、Start request repeated too quickly。
  • 服務反覆重啟:導致節點資源被反覆占用。

這種情況你要找最早的「真正失敗原因」。不要被「後面一串重啟」迷惑。通常第一個 unit 的錯誤才是根因,後面只是連鎖。

第六章:案例推演——你應該怎麼把訊息串起來

以下用「日誌故事」的方式讓你練習。注意:這些是常見模式的重組,你在自己的環境不一定完全一樣,但思路可以直接套用。

案例一:ext4 journal commit failure → 檔案系統不可寫 → 服務掛起 → 監控判定失敗

假設你在當機前 12 分鐘看到大量:

  • ext4 error / filesystem needs recovery
  • journal commit failure
  • Buffer I/O error

接著 2 分鐘後出現:

  • 服務開始報「無法寫入」或「db 開不了」
  • systemd 對某服務重啟失敗

GCP帳號購買 最後當機時間點附近,你看到 watchdog 或節點被重啟。

這裡的關鍵不是「最後重啟」而是前面檔案系統訊號。你要的結論應該是:「磁碟 I/O 或檔案系統寫入問題先發生,造成服務無法運作,進而引發整體失效。」

你接下來的行動會包括:確認磁碟裝置健康、檢查是否曾出現非正常關機、查看是否掛載選項不合適或磁碟空間耗盡導致寫入失敗。

案例二:OOM killer 殺死關鍵服務 → 服務重啟失敗 → 節點進入不穩定狀態

假設在當機前 3 分鐘的 /var/log/messages 出現:

  • Out of memory
  • Killed process xxxx (java/python/node) total-vm ...
  • memory cgroup out of memory

同時你在監控看到記憶體曲線快速上升,CPU 也可能飆高。

接著在當機前 1 分鐘左右,有 systemd 訊息:

  • service restart scheduled
  • Start request repeated too quickly

最後重啟或服務完全不可用。

你要形成的因果鏈是:特定服務記憶體爆炸 → OOM killer 先殺進程 → 服務短時間內反覆起不來 → 系統被監控或重啟機制納入處置。

處理方式會比「加大記憶體」更進一步:找出記憶體暴增的觸發條件(例如請求堆積、快取失控、資料批處理任務異常),並設定合理的資源限制、GC 參數或壓測驗證。

案例三:hard lockup → 驅動/虛擬化層卡死 → 核心被 watchdog 重置

假設當機前 20 分鐘開始就有:

  • soft lockup / hard lockup
  • CPU stuck in task
  • watchdog: BUG: soft lockup

如果這些訊息集中在某個驅動模組或某類 I/O,尤其在高負載或特定時間窗出現,那基本可推斷與驅動或虛擬化硬體事件相關。

此時你需要把結論寫得更具體:不是「當機」這麼籠統,而是「核心在特定任務上卡死,觸發 watchdog 重置」。

接下來行動通常包括:升級內核或驅動版本、更新虛擬化相關設定、檢查是否有已知漏洞與相容性問題,並在下一次重現時抓取更多核心轉儲或 dmesg 輸出(這裡不展開,但你的下一步會更明確)。

第七章:把 /var/log/messages 用到「能落地」的程度

讀到這裡,你可能會問:看懂了類型,那要怎麼做「實際修復」?答案是:你必須從日誌中提取「可驗證的假設」而不是「感覺」。

落地做法可以分成三層:定位、驗證、修復。

GCP帳號購買 7.1 定位:你要回答三個問題

  • 是什麼時間失控? 找到從正常到異常的起點。
  • 是誰先出錯? 哪個模組最早開始報錯或觸發嚴重事件。
  • 錯誤如何擴散? 是資源耗盡導致服務崩潰,還是檔案系統故障導致不可恢復?

7.2 驗證:用對照資料排除巧合

當你看到例如 ext4 error,不要立刻認定根因。你可以用對照資料做排除:

  • 監控是否同時出現磁碟延遲、I/O wait 飆升?
  • 當機前是否有部署或資料遷移?
  • 是否最近有硬體維護事件或雲端公告?
  • 錯誤是否週期性,是否可重現?

當你的日誌訊號與監控趨勢在同一時間窗高度吻合,結論才算站得住。

7.3 修復:對症與防回歸

修復不是只做一個操作就完事。你應該把修復分成:

  • 立即止血:例如調整服務重啟策略、暫時降低負載、修正掛載選項、回滾變更。
  • 根因修正:例如調整資源配額、解決程式記憶體洩漏、修正磁碟問題或升級內核。
  • 防回歸:建立告警(針對 OOM、I/O error、journal failure 等關鍵字)、加壓測試、保存日誌與監控的聯動分析模板。

當你把這三段做完,你就不是「解了一次題」,而是把團隊能力變成可持續流程。

第八章:常見排查誤區與正確習慣

很多團隊不是能力不足,而是方法習慣不對。下面是最常見的誤區,避免後你會節省大量時間。

8.1 只看最後幾行

最後幾行常常是連鎖反應或重啟後的恢復行為。根因通常早在前面。你要先找「第一個嚴重事件」或「第一個與當機性質相符的錯誤類型」。

8.2 把「error 很多」當作原因

GCP帳號購買 日誌雜訊很常見。一堆 error 不代表那堆就是根因。真正需要你判斷的是:哪些錯誤屬於因果鏈上的必要步驟。用時間線和來源縮小範圍,才不會被噪音吞掉。

8.3 忽略檔案系統或資源限制的早期預兆

例如磁碟空間不足、inode 耗盡、檔案句柄限制等,都可能在當機前出現不顯眼的提示。若你只在當機時刻搜尋關鍵字,很容易錯過早期預兆。

8.4 只盯 /var/log/messages,不對照其他來源

/var/log/messages 是重要入口,但它不是唯一真相。你可以用它建立假設,再用其他工具補齊(例如核心層詳細輸出、容器與應用日誌、雲端事件)。當你把這些整合起來,結論會更像「工程事實」,而不是「猜測」。

第九章:建議的排查清單(你可以直接拿去用)

當你下一次要分析當機,這份清單可以當作節奏表。重點是順序:先時間,再來源,再類型,再驗證。

  • 確認當機/重啟時間:以監控與雲端事件對齊時區。
  • 截取當機前後範圍:至少前 30 分鐘、後 10 分鐘(依場景調整)。
  • 在 /var/log/messages 搜關鍵字:panic、watchdog、oom、I/O error、ext4 error、journal、timeout、link down、systemd failed、restart。
  • 找到最早的嚴重或特徵性事件:把它記在紙上或筆記中。
  • 畫出事件時間線:事件 A(最早錯)→ 事件 B(擴散)→ 當機/重啟。
  • 比對監控與變更:CPU、Memory、Disk latency、I/O wait、網路延遲;同時檢查是否有部署或配置變更。
  • 形成可驗證假設:例如「磁碟 I/O timeout 導致 ext4 recovery 後服務失效」或「OOM killer 殺死關鍵服務引發重啟風暴」。
  • 提出修復與防回歸:立即止血 + 根因修正 + 告警與流程化。

第十章:寫給維運同事的結論模板(讓你能說服自己也說服團隊)

GCP帳號購買 最後,工程現場最缺的往往不是技術,而是可溝通的結論。你可以用下面的模板,讓每次事故都留下可追蹤的知識。

事故摘要:(簡述當機時間、影響範圍、重啟是否發生)

觀察到的關鍵日誌:(列出 /var/log/messages 中最早的特徵訊息時間與來源模組)

GCP帳號購買 事件時間線:(用 3~6 個點描述因果鏈)

根因判斷:(給出類型與理由,至少包含:最早錯誤、與監控對照、擴散方式)

修復措施:(止血與根因修正分開寫)

防回歸:(告警條件、測試/驗證方法、變更審核項目)

當你每次都照這個節奏寫,團隊在下次事故時就不會從零開始猜。

結語:把日誌讀成故事,把故事變成行動

看懂 /var/log/messages 的真正意義,不是背出一堆關鍵字,而是學會用時間線把碎片訊息串成因果。谷歌雲的環境也好,任何 Linux 服務也好,當你能回答「誰先出錯、錯如何擴散、最後為何失效」,你就掌握了故障定位的核心能力。

下次你再遇到「系統當機、日誌一堆卻不確定從哪開始」的情況,請先別急著找答案。先做時間對齊,再找最早的特徵訊號,最後用監控與變更驗證假設。當你把排查變成流程,你得到的不只是一次解決,而是可複用的工程方法。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系