Unix/Linux - 系統日誌



在本章中,我們將詳細討論 Unix 中的系統日誌。

Unix 系統擁有一個非常靈活和強大的日誌系統,它允許您記錄幾乎任何可以想象的事情,然後操縱日誌以檢索所需的資訊。

許多版本的 Unix 提供了一個稱為 **syslog** 的通用日誌記錄功能。需要記錄資訊的各個程式將資訊傳送到 syslog。

Unix *syslog* 是一個可由主機配置的統一系統日誌記錄功能。系統使用一個集中的系統日誌記錄程序,該程序執行程式 ** /etc/syslogd ** 或 ** /etc/syslog **。

系統記錄器的操作非常簡單。程式將其日誌條目傳送到 *syslogd*,後者會查閱配置檔案 ** /etc/syslogd.conf ** 或 ** /etc/syslog **,並在找到匹配項時將日誌訊息寫入所需的日誌檔案。

有四個基本的 syslog 術語您應該瞭解:

序號 術語及描述
1

設施

用於描述提交日誌訊息的應用程式或程序的識別符號。例如,郵件、核心和 ftp。

2

優先順序

訊息重要性的指示符。syslog 中定義了級別作為指南,從除錯資訊到關鍵事件。

3

選擇器

一個或多個設施和級別的組合。當傳入事件與選擇器匹配時,將執行操作。

4

操作

對匹配選擇器的傳入訊息執行的操作 - 操作可以將訊息寫入日誌檔案,將訊息回顯到控制檯或其他裝置,將訊息寫入登入的使用者,或將訊息傳送到另一個 syslog 伺服器。

Syslog 設施

現在我們將瞭解 syslog 設施。以下是選擇器可用的設施。並非所有版本的 Unix 都提供所有設施。

設施 描述
1

auth

與請求名稱和密碼相關的活動(getty、su、login)

2

authpriv

與 auth 相同,但記錄到只有選定使用者才能讀取的檔案中

3

console

用於捕獲通常定向到系統控制檯的訊息

4

cron

來自 cron 系統排程程式的訊息

5

daemon

系統守護程序通用

6

ftp

與 ftp 守護程序相關的訊息

7

kern

核心訊息

8

local0.local7

每個站點定義的本地設施

9

lpr

來自行列印系統的訊息

10

mail

與郵件系統相關的訊息

11

mark

用於在日誌檔案中生成時間戳的偽事件

12

news

與網路新聞協議 (nntp) 相關的訊息

13

ntp

與網路時間協議相關的訊息

14

user

常規使用者程序

15

uucp

UUCP 子系統

Syslog 優先順序

syslog 優先順序在以下表格中進行了總結:

序號 優先順序及描述
1

emerg

緊急情況,例如即將發生的系統崩潰,通常廣播給所有使用者

2

alert

應立即糾正的情況,例如損壞的系統資料庫

3

crit

嚴重情況,例如硬體錯誤

4

err

普通錯誤

5

Warning

Warning

6

notice

不是錯誤但可能應以特殊方式處理的情況

7

info

資訊訊息

8

debug

除錯程式時使用的訊息

9

none

用於指定不記錄訊息的偽級別

設施和級別的組合使您能夠明辨記錄的內容以及資訊去向。

當每個程式都盡職地將其訊息傳送到系統記錄器時,記錄器會根據選擇器中定義的級別決定跟蹤哪些內容以及丟棄哪些內容。

當您指定級別時,系統將跟蹤該級別及更高級別的一切。

/etc/syslog.conf 檔案

** /etc/syslog.conf ** 檔案控制日誌訊息的儲存位置。典型的 ** syslog.conf ** 檔案可能如下所示:

*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice           /var/log/messages
lpr.info                     /var/log/lpr.log
mail.*                       /var/log/mail.log
ftp.*                        /var/log/ftp.log
auth.*                       @prep.ai.mit.edu
auth.*                       root,amrood
netinfo.err                  /var/log/netinfo.log
install.*                    /var/log/install.log
*.emerg                      *
*.alert                      |program_name
mark.*                       /dev/console

檔案的每一行包含兩個部分:

  • **訊息選擇器**,指定要記錄哪種訊息。例如,核心的所有錯誤訊息或所有除錯訊息。

  • **操作欄位**,說明應如何處理該訊息。例如,將其放入檔案或將訊息傳送到使用者的終端。

以下是上述配置的要點:

  • 訊息選擇器包含兩部分:**設施**和**優先順序**。例如,*kern.debug* 選擇核心(設施)生成的所有除錯訊息(優先順序)。

  • 訊息選擇器 *kern.debug* 選擇所有優先順序高於除錯的優先順序。

  • 設施或優先順序位置的星號表示“全部”。例如,** *.debug ** 表示所有除錯訊息,而 ** kern.* ** 表示核心生成的所有訊息。

  • 您還可以使用逗號指定多個設施。可以使用分號將兩個或多個選擇器組合在一起。

日誌記錄操作

操作欄位指定以下五種操作之一:

  • 將日誌訊息記錄到檔案或裝置。例如,** /var/log/lpr.log ** 或 ** /dev/console **。

  • 將訊息傳送給使用者。您可以透過逗號分隔多個使用者名稱;例如,root、amrood。

  • 將訊息傳送給所有使用者。在這種情況下,操作欄位由星號組成;例如,*。

  • 將訊息透過管道傳遞到程式。在這種情況下,程式在 Unix 管道符號(|)後指定。

  • 將訊息傳送到另一臺主機上的 syslog。在這種情況下,操作欄位由主機名組成,前面帶有 at 符號;例如,@tutorialspoint.com。

logger 命令

Unix 提供了 **logger** 命令,這是一個處理系統日誌記錄的極其有用的命令。**logger** 命令將日誌訊息傳送到 syslogd 守護程序,從而引發系統日誌記錄。

這意味著我們可以隨時從命令列檢查 **syslogd** 守護程序及其配置。logger 命令提供了一種方法,可以從命令列向系統日誌檔案新增單行條目。

命令格式如下:

logger [-i] [-f file] [-p priority] [-t tag] [message]...

以下是引數的詳細資訊:

序號 選項及描述
1

-f filename

使用檔案 filename 的內容作為要記錄的訊息。

2

-i

為每一行記錄 logger 程序的程序 ID。

3

-p priority

以指定的優先順序(指定的選取器條目)輸入訊息;可以以數字或設施.優先順序對的形式指定訊息優先順序。預設優先順序為 user.notice。

4

-t tag

使用指定的標籤標記新增到日誌中的每一行。

5

message

其內容按指定順序連線在一起的字串引數,並以空格分隔。

您可以使用 手冊頁幫助 檢查此命令的完整語法。

日誌輪換

日誌檔案有快速增長的趨勢,並消耗大量磁碟空間。為了啟用日誌輪換,大多數發行版使用 ** *newsyslog* ** 或 ** *logrotate* ** 等工具。

應使用 **cron 守護程序** 在頻繁的時間間隔內呼叫這些工具。有關更多詳細資訊,請檢視 *newsyslog* 或 *logrotate* 的手冊頁。

重要的日誌位置

所有系統應用程式都在 ** * /var/log * ** 及其子目錄中建立其日誌檔案。以下是一些重要的應用程式及其對應的日誌目錄:

應用程式 目錄
httpd /var/log/httpd
samba /var/log/samba
cron /var/log/
mail /var/log/
mysql /var/log/
廣告