syslog已被許多日誌函數採納,它用在許多保護措施中,任何程序都可以通過syslog記錄事件。syslog可以記錄系統事件,可以寫到一個文件或設備中,或給用戶發送一個信息。它能記錄本地事件或通過網絡記錄另一個主機上的事件。
1、syslog簡介
syslog是一種工業標準的協議,可用來記錄設備的日誌。在UNIX系統,路由器、交換機等網絡設備中,系統日誌(System Log)記錄系統中任何時間發生的大小事件。管理者可以通過查看系統記錄,隨時掌握系統狀況。UNIX的系統日誌是通過syslogd這個進程記錄系統有關事件記錄,也可以記錄應用程序運作事件。通過適當的配置,我們還可以實現運行syslog協議的機器間通信,通過分析這些網絡行爲日誌,藉以追蹤掌握與設備和網絡有關的狀況。
2、syslog配置文件
syslog設備依據兩個重要的文件:/etc/syslogd守護進程和/etc/syslog.conf配置文件。通常情況下,多數syslog信息被寫到/var/adm或/var/log目錄下的信息文件中(messages.*)。一個典型的syslog記錄包括生成程序的名字和一個文本信息。它還包括一個設備和一個優先級範圍。
通過使用syslog.conf文件,可以對生成的日誌的位置及其相關信息進行靈活的配置。該配置文件指明瞭syslogd守護程序記錄日誌的行爲,該程序在啓動時查詢配置文件。該文件由不同程序或消息分類的單個條目組成,每個佔一行。對每類消息提供一個選擇域和一個動作域。這些域由tab隔開:
選擇域指明消息的類型和優先級;
動作域指明syslogd接收到一個與選擇標準相匹配的消息時所執行的動作。
syslog.conf行的基本語法是:
消息類型.優先級 動作域
其中,每個選擇域是由消息類型和優先級組成。當指明一個優先級時,syslogd將記錄一個擁有相同或更高優先級的消息。Linux中一些主要的消息類型如表2所示,表3列出了一些優先級信息:
表2 syslog消息類型
消息類型 | 消息來源 |
kern | 內核 |
User | 用戶程序 |
Damon | 系統守護進程 |
電子郵件系統 | |
Auth | 與安全權限相關的命令 |
Lpr | 打印機 |
News | 新聞組信息 |
Uucp | Uucp程序 |
Cron | 記錄當前登錄的每個用戶信息 |
wtmp | 一個用戶每次登錄進入和退出時間的永久記錄 |
Authpriv | 授權信息 |
表3 syslog常用優先級
優先級 | 描述 |
emerg | 最高的緊急程度狀態 |
alert | 緊急狀態 |
Cirt | 重要信息 |
warning | 警告 |
err | 臨界狀態 |
notice | 出現不尋常的事情 |
info | 一般性消息 |
Debug | 調試級信息 |
None | 不記錄任何日誌信息 |
不同的服務類型有不同的優先級,數值較大的優先級涵蓋數值較小的優先級。如果某個選擇條件只給出了一個優先級而沒有使用任何優先級限定符,對應於這個優先級的消息以及所有更緊急的消息類型都將包括在內。比如說,如果某個選擇條件裏的優先級是“warning”,它實際上將把“warning”、“err”、“crit”、“alert“和“emerg”都包括在內。
syslog允許人們使用三種限定符對優先級進行修飾:星號(*)、等號(=)和歎號(!):
星號(*)的含義是把本項服務生成的所有日誌消息都發送到操作動作指定的地點。就像它在規則表達式裏的作用一樣,星號代表“任何東西”。在前面給出的例子裏,“mail.*”將把所有優先級的消息都發送到操作動作指定的/var/log/mail文件裏。使用“*”限定符與使用“debug”優先級的效果完全一樣,後者也將把所有類型的消息發送到指定地點。
等號(=)的含義是隻把本項服務生成的本優先級的日誌消息都發送到操作動作指定的地點。比如說,可以用“=”限定符只發送調試消息而不發送其他更緊急的消息(這將爲應用程序減輕很多負擔)。當你只需要發送特定優先級別的消息時,就要使用等號限定符。
歎號(!)的含義是把本項服務生成的所有日誌消息都發送到操作動作指定的地點,但本優先級的消息不包括在內。
所以,根據上面介紹的相關知識,我們給出如下例子作爲示範:
(1)如果指明\"crit\",那所有標爲crit、alert和emerg的消息將被記錄。每行的行動域指明當選擇域選擇了一個給定消息後應該把他發送到哪兒。例如,如果想把所有郵件消息記錄到一個文件中,如下所示:
#Log all the mail messages in one place
mail.* /var/log/maillog(2)其他設備也有自己的日誌。UUCP和news設備能產生許多外部消息。它把這些消息存到自己的日誌(/var/log/spooler)中並把級別限爲\"err\"或更高。例如:
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler(3)當一個緊急消息到來時,可能想讓所有的用戶都得到。也可能想讓自己的日誌接收並保存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn(4)有時syslogd將產生大量的消息。例如內核(\"kern\"設備)可能很冗長,用戶很難看得清楚明瞭,那麼用戶可能想把內核消息記錄到/dev/console中。下面的例子表明內核日誌記錄被註釋掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console(5)用戶可以在一行中指明所有的設備。下面的例子把info或更高級別的消息送到/var/log/messages,除了mail以外。級別\"none\"禁止一個設備:
#Log anything(except mail)of level info or higher
#Don\'t log private authentication messages!
*.info:mail.none;autHPriv.none /var/log/messages
3、syslog進程
syslogd守護程序是由/etc/rc.d/init.d/syslog腳本在運行級2下被調用的,缺省不使用選項。但有兩個選項-r和-h很有用:
如果將要使用一個日誌服務器,必須調用syslogd -r。缺省情況下syslogd不接受來自遠程系統的信息。當指定-r選項,syslogd將會監聽從514端口上進來的UDP包。
如果還希望日誌服務器能傳送日誌信息,可以使用-h標誌。缺省時,syslogd將忽略使其從一個遠程系統傳送日誌信息到另一個系統的syslogd。
另外,如果需要重新啓動syslog守護進程(/etc/syslog.conf的修改只有在syslog守護進程重新啓動後纔會生效),並且只想重新啓動syslog守護進程而不是整個系統,在Red Hat Linux機器上,執行以下兩條命令之一即可:
/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart
實驗示例(日誌服務器搭建):