記錄與檢視系統日誌:命令 journalctl
1. 為什麼需要處理日誌?
日誌(或稱 logs)就是你的個人「偵探」,記錄系統中每個重要操作。它們記錄核心、應用程序、服務和系統其他組件的行為。日誌是診斷問題和監控系統運行的極重要工具。
想像一下,如果你的伺服器突然不回應。與其像福爾摩斯一樣猜測發生了什麼,不如直接查看日誌,答案一目了然。例如:「服務 ssh
崩潰了」、「磁碟已滿」、「貓跑過鍵盤並停止了一個重要服務」。日誌會告訴你一切。
使用系統日誌可以幫助:
- 診斷問題。 如果出了問題,你可以在日誌中找到錯誤或警告。
- 跟踪服務狀態。 比如了解為什麼 PostgreSQL 資料庫停止了,或者最後一次更新 web 伺服器的時間。
- 收集分析數據。 監控系統性能和服務的指標。
- 提升安全性。 日誌可以顯示 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
換成別的詞,比如 WARNING
、failed
或 panic
。
3. journalctl
的特殊選項
只查看重新啟動後的記錄
想了解系統最近一次啟動後都發生了什麼嗎?好奇吧?只要執行:
journalctl -b
每次系統重新啟動都會記錄為一個獨立的「區塊」。如果你想查看倒數第二次啟動後的記錄(沒錯,有時候會很有用):
journalctl -b -1
按用戶或 PID 過濾
有時需要追蹤特定用戶或進程的行為。例如:
journalctl _UID=1000
把 1000
換成用戶 ID(可以使用命令 id
查詢 ID)。
如果需要按 PID(進程 ID)過濾:
journalctl _PID=1234
4. 實用範例
查找 SSH 服務的錯誤。
想知道為什麼 SSH 無法連接嗎?使用以下指令:
journalctl -u ssh | grep "ERROR"
分析過去 24 小時內的 CRON 日誌。
假如你在檢查為什麼每日腳本沒有執行:
journalctl -u cron --since "yesterday"
實時監控網頁伺服器。
網頁伺服器的負載很高?檢查日誌中的錯誤:
journalctl -u nginx -f
自行實踐練習
- 查找過去 24 小時內 SSH 服務的錯誤日誌。
- 使用
journalctl
,只輸出 CRON 的早晨日誌。確保指令使用正確的時間範圍。 - 設定實時監控
systemd
日誌,並啟動幾個系統服務以查看它們在日誌中的狀態。
日誌記錄並不只是一個查錯或問題診斷工具,它更像是你的秘密特工,幫助你監控整個操作系統。一旦掌握了 journalctl
指令,你就擁有了一個強大的工具,可以用於分析、優化和確保 Linux 系統在任何環境下穩定運行。
GO TO FULL VERSION