當您的伺服器效能出現任何問題時,首先應該檢查 Linux 日誌。在系統日誌中,您可以找到來自作業系統不同元件(例如核心或各種服務)的一些有用的診斷訊息,因此您很可能在那裡找到故障原因。
日誌中的每個訊息都是作業系統中某些事件的結果:來自使用者、授權、服務關閉或應用程式故障。這些事件根據其重要程度有不同的優先順序。 Linux中有以下類型的事件:
emerg- 失敗,最高優先權;alert- 緊急警告;crit- 關鍵事件;err- 一般錯誤;warn- 普通警告;notice- 通知;info- 訊息訊息;debug- 調試資訊;
目前,Linux 系統中主要的日誌擷取服務是rsyslog和systemd-journald。它們與大多數現代發行版軟體包集成,並且可以獨立運行。
系統日誌
此服務的日誌以普通文字檔案的形式儲存在「/var/log/ 」資料夾中。日誌訊息會根據事件類型被放入不同的檔案中。例如,「 /var/log/ auth.log 」包含有關使用者在系統中的授權訊息,「/var/log/kern.log」包含核心訊息。由於不同發行版軟體包的檔案名稱可能有所不同,因此讓我們查看一下設定檔「/etc/rsyslog.d/50-default.conf」來了解各個檔案的位置。
這些規則顯示了每種類型的日誌訊息對應的檔案。左側以「[來源].[優先權]」的格式顯示訊息類型,右側顯示日誌檔案名稱。在填寫訊息類型時,可以新增「*」字元。它表示空值或“無”,會將其從清單中刪除。讓我們仔細看看前兩條規則。
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
第一條規則表示,所有從授權機制收到的訊息都將被記錄到「/var/log/auth.log」檔案中。所有授權嘗試(無論成功與否)都會被記錄到此文件中。第二條規則表示,除與授權相關的訊息外,所有訊息都會被記錄到「/var/log/syslog 」檔案中。這兩個文件通常是最常用的。以下規則定義了核心日誌「 kern.*」和郵件服務日誌「mail.*」的儲存路徑。
可以使用任何文字編輯器開啟日誌文件,例如less、cat或tail。我們來開啟「/var/log/auth.log」檔案。
less /var/log/auth.log
文件的每一行都是從應用程式或服務接收的單獨的訊息。所有訊息無論其來源為何都具有一種格式並由 5 個部分組成。讓我們以螢幕截圖中突出顯示的訊息為例。
- 訊息時間戳記 - “12 月 06 日 18:33:XNUMX”
- 發送訊息的電腦的名稱 - “vds”
- 發送訊息的應用程式或服務的名稱 - “sshd”
- 進程 ID — [653]
- 訊息文字 - “已接受來自 188.19.42.165 埠 2849 ssh2 的 mihail 密碼”
這是成功連接 SSH 的範例。
失敗的登入嘗試如下所示:
此文件還記錄具有高級權限的命令
讓我們打開/var/log/syslog文件
螢幕截圖上突出顯示的消息是關於網路介面關閉的消息。
要從長文本文件中查找信息,請使用grep工具。您可以在「 /var/log/syslog 」檔案中找到從pptpd服務接收的所有訊息。
grep 'pptpd' /var/log/syslog
在診斷過程中,您可以使用tail工具來顯示文件的最後幾行。命令「tail -f /var/log/syslog」可讓您即時查看日誌記錄。
rsyslog服務非常靈活且功能強大。它既可用於本機系統日誌採集,也可用於企業級日誌採集。您可以在官方網站https://www.rsyslog.com/上找到完整的文件。
Linux 中的日誌輪換
日誌記錄持續進行,因此檔案大小不斷增長。輪換機制確保舊日誌自動歸檔,並建立新檔案。根據設定的規則,輪換可以按日、週、月或大小限制進行。建立新日誌後,舊日誌可以直接刪除或透過電子郵件發送。日誌輪替由logrotate工具執行。您可以在「 /etc/logrotate.conf 」檔案中找到主要設定。文件內容也會在「/etc/logrotate.d/」資料夾中處理。
新規則可以記錄到主設定檔。不過,最好在「/etc/logrotate.d/」目錄下建立一個單獨的檔案。預設情況下,該目錄下有一些檔案。
讓我們來看一下「/etc/logrotate.d/rsyslog 」文件,其中包含rsyslog服務日誌的輪替規則。
首先,規則應該包含日誌檔案的路徑,然後包含所有在括號中的指導方針。
- 旋轉7 - 要保留的文件數量 - 7
- 每天 - 每天建立一個新文件
- 壓縮 - 壓縮並存檔舊文件
從截圖中可以看到,「/var/log/」資料夾中有主日誌「syslog」和7個歸檔文件,這與設定檔中的規則相符。
您可以透過執行「 man logrotate」指令,在手冊中找到關於 logrotate 的更詳細描述。
收集 Linux 日誌 - journald
日誌採集服務systemd-journald是初始化系統systemd的一部份。 Linux 日誌檔案以特殊格式儲存在「/var/log/journal/」目錄下,可以使用journalctl工具開啟。記錄格式與rsyslog完全相同。
不帶任何參數的journalctl指令會顯示所有記錄,但對於較大的日誌檔案並不適用。讓我們來看看這個工具的一些選項。
journalctl -b- 顯示自上次啟動以來的所有記錄journalctl -S "2020-02-17 12:00" -U "2020-02-17 12:10"- 顯示特定時間內的記錄journalctl -u pptpd- 顯示特定服務的記錄journalctl -k- 顯示內核訊息journalctl -p err- 顯示特定優先順序的訊息,在這種情況下顯示更高優先順序的訊息(crit、alert、emerg)journalctl -f- 即時顯示訊息
為了獲得更大的靈活性,您可以組合使用這些選項。讓我們顯示pptpd服務的所有錯誤。
journalctl -u pptpd -p err
如果將可執行檔的路徑指定為屬性,則該公用程式將顯示該檔案所傳送的所有訊息。例如,讓我們顯示自 2020 年 2 月 18 日 04:15 以來文件「/usr/bin/sudo」發送的所有訊息。實際上,它將顯示所有以更高權限執行的命令。
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
若要了解日誌檔案佔用了多少磁碟空間,請執行下列命令
journalctl --disk-usage
為了將日誌檔案限制為 1Gb,請執行下列命令
journalctl --vacuum-size=1G
開啟二進位文件
現在我們來看看「/var/log/」資料夾中的一些特殊文件,所有登入嘗試都儲存在這些文件中。這些文件是二進位文件,只能用特定的程式開啟。
/var/log/wtmp檔案包含成功登入嘗試的資訊。請使用 last 工具打開它。
/var/log/btmp檔案包含所有登入失敗的嘗試。可以使用 lastb 命令以高級權限開啟它。參數-n定義了從文件末尾開始顯示的行數。
/var/log/lastlog檔案包含每個帳戶記錄的最後登入操作時間。可以使用lastlog 命令打開它。