標籤:
從目前的情況來看,Syslog(系統日誌)這一曆史悠久的日誌系統仍舊佔據著最主流的地位。由於與類 UNIX平台之間的淵源,Syslog是在實際應用環境中最容易獲得的日誌系統。 同時,還有很多的基於Syslog的擴充產品存在,這其中也包括大量基於UNIX平台構建核心的網路硬體裝置,這些裝置往往都內建了Syslog功能支援,例如Cisco路由器就是如此。
一、 配置syslog守護進程
syslog是Linux系統預設的日誌守護進程。預設的syslog設定檔是/etc/syslog.conf檔案。syslog守護進程是可配置的,它允許人們為每一種類型的系統資訊精確地指定一個存放地點。現在,我們先看看syslog.conf檔案的配置行格式(這個檔案裡的每一個配置行都是同樣的格式),然後再看一個完整的syslog設定檔。syslog配置行的格式如下所示:
mail.*/var/log/mail
這一行由兩個部分組成。第一個部分是一個或多個“選擇條件”;上例中的選擇條件是“mail”。選擇條件後面跟一些空白字元,然後是一個“操作動作”;上例中的操作動作是:/var/log/mail
1選擇條件
選擇條件本身分為兩個欄位,之間用一個小數點(.)分隔。前一欄位是一項服務,後一欄位是一個優先順序。選擇條件其實是對訊息類型的一種分類,這種分類便於人們把不同類型的訊息發送到不同的地方。在同一個syslog配置行上允許出現一個以上的選擇條件,但必須用分號(;)把它們分隔開。上面給出的例子裡只有一個選擇條件“mail”。大家可以在我們後面給出的那個完整的syslog設定檔樣本裡看到同時有多個選擇條件的配置行。表1列出了絕大多數 Linux作業系統變體都可以識別的選擇條件。
2 優先順序
優先順序是選擇條件的第二個欄位,它代表訊息的緊急程度。對一個應用程式來說,它發出的哪些訊息屬於哪一種優先順序是由當初編寫它的程式員決定的,應用程式的使用者只能接受這樣的安排——除非打算重新編譯系統應用程式。表2按嚴重程度由低到高的順序列出了所有可能的優先順序。
不同的服務類型有不同的優先順序,數值較大的優先順序涵蓋數值較小的優先順序。如果某個選擇條件只給出了一個優先順序而沒有使用任何優先順序限定符,對應於這個優先順序的訊息以及所有更緊急的訊息類型都將包括在內。比如說,如果某個選擇條件裡的優先順序是“warning”,它實際上將把“warning”、 “err”、“crit”、“alert”和“emerg”都包括在內。
3優先順序限定符
syslog允許人們使用三種限定符對優先順序進行修飾:星號(*)、等號(=)和歎號(!)。熟悉規則運算式的讀者應該對這三種限定符不會感到陌生。星號(*)的含義是“把本項服務產生的所有日誌訊息都發送到操作動作指定的地點”。就像它在規則運算式裡的作用一樣,星號代表“任何東西”。在前面給出的例子裡,“mail.*”將把所有優先順序的訊息都發送到操作動作指定的/var/log/mail檔案裡。使用“*”限定符與使用“debug”優先順序的效果完全一樣,後者也將把所有類型的訊息發送到指定地點。
等號(=)的含義是“只把本項服務產生的本優先順序的日誌訊息都發送到操作動作指定的地點”。比如說,可以用“=”限定符只發送調試訊息而不發送其他更緊急的訊息(這將為應用程式減輕很多負擔)。當你只需要發送特定優先順序別的訊息時,就要使用等號限定符。
就像它在編程時的用法一樣,等號意味著等於且僅等於。歎號(!)的含義是“把本項服務產生的所有日誌訊息都發送到操作動作指定的地點,但本優先順序的訊息不包括在內”。比如說,這條syslog配置行將把除info優先順序以外的所有訊息發送到/var/log/mail檔案裡:
mail.*;mail.!info/var/log/mail
在這個例子裡,“mail.*”將發送所有的訊息,但“mail.!info”卻把info優先順序的訊息排除在外。就像它在編程時的用法一樣,歎號意味著“非”。
4 操作動作
日誌資訊可以分別記錄到多個檔案裡,還可以發送到具名管道、其他程式甚至另一台機器。syslog設定檔並不複雜,既容易閱讀又容易操作使用。這個檔案裡的注釋都非常有用,應該好好讀讀它們。
二、 建立一個中央Log Service器
1建立中央Log Service器前的準備工作
配置良好的網路服務(DNS和NTP)有助於提高日誌記錄工作的精確性。在預設情況下,當有其他機器向自己發送日誌訊息時,中央Log Service器將嘗試解析該機器的FQDN(fullyqualifieddomainname,完整網域名稱)。(你可以在配置中央伺服器時用“-x”選項禁止它這樣做。)如果 syslog守護進程無法解析出那個地址,它將繼續嘗試,這種毫無必要的額外負擔將大幅降低日誌記錄工作的效率。類似地,如果你的各個系統在時間上不同步,中央Log Service器給某個事件打上的時間戳記就可能會與發送該事件的那台機器打上的時間戳記不一致,這種差異會在你對事件進行排序分析時帶來很大的困擾;對網路時間進行同步有助於保證日誌訊息的時間準確性。如果想消除這種時間不同步帶來的麻煩,先編輯/etc/ntp.conf檔案,使其指向一個中央時間源,再安排ntpd守護進程隨系統開機啟動就可以了。
2配置一個中央Log Service器
只須稍加配置,就可以用syslog實現一個中央Log Service器。任何一台運行syslog守護進程的伺服器都可以被配置成接受來自另一台機器的訊息,但這個選項在預設情況下是禁用的。在後面的討論裡,如無特別說明,有關步驟將適用於包括SUSE和RedHat在內的大多數Linux發行版本。我們先來看看如何啟用一個syslog伺服器接受外來的日誌訊息:
1. 編輯/etc/sysconfig/syslog檔案。
在“SYSLOGD_OPTIONS”行上加“-r”選項以允許接受外來日誌訊息。如果因為關於其他機器的DNS記錄項不夠齊全或其他原因不想讓中央Log Service器解析其他機器的FQDN,還可以加上 “-x”選項。此外,你或許還想把預設的時間戳記標記訊息(--MARK--)出現頻率改成比較有實際意義的數值,比如240,表示每隔240分鐘(每天6 次)在記錄檔裡增加一行時間戳記訊息。記錄檔裡的“--MARK--”訊息可以讓你知道中央Log Service器上的syslog守護進程沒有停工偷懶。按照上面這些解釋寫出來的配置行應該是如下所示的樣子:
SYSLOGD_OPTIONS="-r-x-m240"
2.重新啟動syslog守護進程。修改只有在syslog守護進程重新啟動後才會生效。如果你只想重新啟動syslog守護進程而不是整個系統,在RedHat機器上,執行以下兩條命令之一:
/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart
3.如果這台機器上運行著iptables防火牆或TCPWrappers,請確保它們允許514號連接埠上的串連通過。syslog守護進程要用到514號連接埠。
4為中央Log Service器配置各客戶機器
讓客戶機把日誌訊息發往一個中央Log Service器並不困難。編輯客戶機上的/etc/syslog.conf檔案,在有關配置行的操作動作部分用一個“@”字元指向中央Log Service器,如下所示:
authpriv.*@192.168.1.40
另一種辦法是在DNS裡定義一個名為“loghost”的機器,然後對客戶機的syslog設定檔做如下修改(這個辦法的好處是:當你把中央Log Service器換成另一台機器時,不用再修改每一個客戶機上的syslog設定檔):
authpriv.*@loghost
接下來,重新啟動客戶機上的syslog守護進程讓修改生效。讓客戶機在往中央Log Service器發送日誌訊息的同時繼續在本地進行日誌工作仍有必要,起碼在調試客戶機的時候不必到中央Log Service器查日誌,在中央Log Service器出問題的時候還可以協助調試。
總結:日誌系統承擔著整個資訊基礎設施中感覺器官的作用,一個完善的、工作良好的體系需要在正確的地點部署日誌採集工具。後邊筆者會介紹syslog的增強版本syslog-ng。
Linux syslogLog Service器架設攻略