CodeGym /Adesua ahorow /Docker SELF /記錄與檢視系統日誌:命令 `journalctl`

記錄與檢視系統日誌:命令 `journalctl`

Docker SELF
等級 3 , 課堂 1
開放

記錄與檢視系統日誌:命令 journalctl

1. 為什麼需要處理日誌?

日誌(或稱 logs)就是你的個人「偵探」,記錄系統中每個重要操作。它們記錄核心、應用程序、服務和系統其他組件的行為。日誌是診斷問題和監控系統運行的極重要工具。

想像一下,如果你的伺服器突然不回應。與其像福爾摩斯一樣猜測發生了什麼,不如直接查看日誌,答案一目了然。例如:「服務 ssh 崩潰了」、「磁碟已滿」、「貓跑過鍵盤並停止了一個重要服務」。日誌會告訴你一切。

使用系統日誌可以幫助:

  1. 診斷問題。 如果出了問題,你可以在日誌中找到錯誤或警告。
  2. 跟踪服務狀態。 比如了解為什麼 PostgreSQL 資料庫停止了,或者最後一次更新 web 伺服器的時間。
  3. 收集分析數據。 監控系統性能和服務的指標。
  4. 提升安全性。 日誌可以顯示 SSH 入侵嘗試或未授權訪問。

2. 介紹 journalctl

journalctl 是一個強大的命令,可以用來看和過濾 Linux 的系統日誌。它和 systemd-journald 一起協作 — 這是一個用來收集和儲存日誌的系統,由 systemd 管理。

使用 journalctl 的基本操作

首先,我們來看看怎麼用這個工具。打開 terminal,輸入:

journalctl

這個命令會讓你看到 所有 系統日誌,並會按照時間排序。如果你期望只看到幾行,那可能要失望了,通常日誌會佔好幾個螢幕。不用怕,接下來我們會學習怎麼過濾它。

如果你想退出日誌檢視,只需要按 q(覺得和 less 很像嗎?journalctl 的操作也是這樣)。


依據時間篩選日誌

現在我們要魔法般地縮小日誌範圍到更方便的區間。

查看最近一小時的日誌

journalctl --since "1 hour ago"

查看某一天的日誌

journalctl --since "2023-10-31"

指定時間範圍

想看早上 8 點到 9 點的事件?沒問題:

journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"

時間範圍篩選特別好用,比如當你知道問題是從某個時間點開始的。舉例:你不需要讀整本書就知道誰是兇手 — 你只需要看最後幾頁。


檢視特定服務的日誌

與其研究整個系統,你可以專注於一項服務。例如,你想看 web 服務器 nginx 的日誌:

journalctl -u nginx

如果你只想看最近一小時的日誌(因為所有人都喜歡最新的資訊):

journalctl -u nginx --since "1 hour ago"

快速範例列表:

  • -u ssh: SSH 服務的日誌。
  • -u cron: 定時任務 CRON 的日誌。
  • -u mysql: MySQL 資料庫的日誌。

實時日誌閱讀

當你正在解決問題的時候,觀察日誌的實時更新就像在看足球比賽一樣。為此,可以用這個命令:

journalctl -f

參數 -f 的功能與 tail -f 很像,會顯示日誌的實時更新內容。

例如,試著執行這個命令並同時重新啟動某項服務:

sudo systemctl restart ssh

你會看到變化 — 重新啟動的記錄會出現在日誌中。


在日誌中尋找錯誤

有時候日誌可能會很長,手動找有用的資訊就像在稻草堆裡找針一樣。所以我們可以用關鍵字來搜尋。

簡單使用:

journalctl | grep "ERROR"

這個範例只會顯示包含 ERROR 的行。你可以把 ERROR 換成別的詞,比如 WARNINGfailedpanic


3. journalctl 的特殊選項

只查看重新啟動後的記錄

想了解系統最近一次啟動後都發生了什麼嗎?好奇吧?只要執行:

journalctl -b

每次系統重新啟動都會記錄為一個獨立的「區塊」。如果你想查看倒數第二次啟動後的記錄(沒錯,有時候會很有用):

journalctl -b -1

按用戶或 PID 過濾

有時需要追蹤特定用戶或進程的行為。例如:

journalctl _UID=1000

1000 換成用戶 ID(可以使用命令 id 查詢 ID)。

如果需要按 PID(進程 ID)過濾:

journalctl _PID=1234

4. 實用範例

  1. 查找 SSH 服務的錯誤。

    想知道為什麼 SSH 無法連接嗎?使用以下指令:

    journalctl -u ssh | grep "ERROR"
    
  2. 分析過去 24 小時內的 CRON 日誌。

    假如你在檢查為什麼每日腳本沒有執行:

    journalctl -u cron --since "yesterday"
    
  3. 實時監控網頁伺服器。

    網頁伺服器的負載很高?檢查日誌中的錯誤:

    journalctl -u nginx -f
    

自行實踐練習

  1. 查找過去 24 小時內 SSH 服務的錯誤日誌。
  2. 使用 journalctl,只輸出 CRON 的早晨日誌。確保指令使用正確的時間範圍。
  3. 設定實時監控 systemd 日誌,並啟動幾個系統服務以查看它們在日誌中的狀態。

日誌記錄並不只是一個查錯或問題診斷工具,它更像是你的秘密特工,幫助你監控整個操作系統。一旦掌握了 journalctl 指令,你就擁有了一個強大的工具,可以用於分析、優化和確保 Linux 系統在任何環境下穩定運行。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION