Syslog已被許多日誌函數採納,它用在許多保護措施中——任何程序都可以通過syslog紀錄事件。Syslog可以紀錄系統事件,可以寫到一個文件或設備中,或給用戶發送一個信息。它能紀錄本地事件或通過網絡紀錄另一個主機上的事件。Syslog設備依據兩個重要的文件:/etc/syslogd(守護進程)和/etc/syslog.conf配置文件,習慣上,多數syslog信息被寫到/var/adm或/var/log目錄下的信息文件中(messages.*)。一個典型的syslog紀錄包括生成程序的名字和一個文本信息。它還包括一個設備和一個優先級範圍(但不在日之中出現)。linux中常見的日誌系統有syslog和syslog-ng(新版的日誌系統,有開源版和商業版的)
syslog服務:
syslogd: 系統,非內核產生的信息
klogd:內核,專門負責記錄內核產生的日誌信息
kernel --> 物理終端(/dev/console) --> /var/log/dmesg
# dmesg
# cat /var/log/dmesg
用dmesg查看日誌和cat查看日誌的格式大體相同,都能達到同樣的目的
週期性日誌滾動(日誌切割)腳本/etc/cron.daily/logrodate
messages messages.1 messages.2 messages.3
/sbin/init
/var/log/messages: 系統標準錯誤日誌信息;非內核產生引導信息;各子系統產生的信息;
/var/log/maillog: 郵件系統產生的日誌信息;
/var/log/secure:
一、 配置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操作系統變體都可以識別的選擇條件。
配置文件定義格式爲: facility.priority action
facility,可以理解爲日誌的來源或設備目前常用的facility有以下幾種:
auth # 認證相關的
authpriv # 權限,授權相關的
cron # 任務計劃相關的
daemon # 守護進程相關的
kern # 內核相關的
lpr # 打印相關的
mail # 郵件相關的
mark # 標記相關的
news # 新聞相關的
security # 安全相關的,與auth 類似
syslog # syslog自己的
user # 用戶相關的
uucp # unix to unix cp 相關的
local0 到 local7 # 用戶自定義使用
* # *表示所有的facility
2 優先級
優先級是選擇條件的第二個字段,它代表消息的緊急程度。對一個應用程序來說,它發出的哪些消息屬於哪一種優先級是由當初編寫它的程序員決定的,應用程序的使用者只能接受這樣的安排——除非打算重新編譯系統應用程序。表2按嚴重程度由低到高的順序列出了所有可能的優先級。
不同的服務類型有不同的優先級,數值較大的優先級涵蓋數值較小的優先級。如果某個選擇條件只給出了一個優先級而沒有使用任何優先級限定符,對應於這個優先級的消息以及所有更緊急的消息類型都將包括在內。比如說,如果某個選擇條件裏的優先級是“warning”,它實際上將把“warning”、“err”、“crit”、“alert”和“emerg”都包括在內。
priority(log level)日誌的級別,一般有以下幾種級別(從低到高)
debug # 程序或系統的調試信息
info # 一般信息
notice # 不影響正常功能,需要注意的消息
warning/warn # 可能影響系統功能,需要提醒用戶的重要事件
err/error # 錯誤信息
crit # 比較嚴重的
alert # 必須馬上處理的
emerg/panic # 會導致系統不可用的
* # 表示所有的日誌級別
none # 跟* 相反,表示啥也沒有
3優先級限定符
syslog允許人們使用三種限定符對優先級進行修飾:星號(*)、等號(=)和歎號(!)。熟悉規則表達式的讀者應該對這三種限定符不會感到陌生。星號(*)的含義是“把本項服務生成的所有日誌消息都發送到操作動作指定的地點”。就像它在規則表達式裏的作用一樣,星號代表“任何東西”。在前面給出的例子裏,“mail.*”將把所有優先級的消息都發送到操作動作指定的/var/log/mail文件裏。使用“*”限定符與使用“debug”優先級的效果完全一樣,後者也將把所有類型的消息發送到指定地點。
等號(=)的含義是“只把本項服務生成的本優先級的日誌消息都發送到操作動作指定的地點”。比如說,可以用“=”限定符只發送調試消息而不發送其他更緊急的消息(這將爲應用程序減輕很多負擔)。當你只需要發送特定優先級別的消息時,就要使用等號限定符。
就像它在編程時的用法一樣,等號意味着等於且僅等於。歎號(!)的含義是“把本項服務生成的所有日誌消息都發送到操作動作指定的地點,但本優先級的消息不包括在內”。比如說,這條syslog配置行將把除info優先級以外的所有消息發送到/var/log/mail文件裏:
mail.*;mail.!info/var/log/mail
在這個例子裏,“mail.*”將發送所有的消息,但“mail.!info”卻把info優先級的消息排除在外。就像它在編程時的用法一樣,歎號意味着“非”。
4 操作動作
日誌信息可以分別記錄到多個文件裏,還可以發送到命名管道、其他程序甚至另一臺機器。syslog配置文件並不複雜,既容易閱讀又容易操作使用。這個文件裏的註釋都非常有用,應該好好讀讀它們
action(動作)日誌記錄的位置
系統上的絕對路徑 # 普通文件 如: /var/log/xxx
| # 管道 通過管道送給其他的命令處理
終端 # 終端 如:/dev/console
@HOST # 遠程主機 如: @10.0.0.1
用戶 # 系統用戶 如: root
* # 登錄到系統上的所有用戶,一般emerg級別的日誌是這樣定義的
定義格式例子:
mail.info /var/log/mail.log # 表示將mail相關的,級別爲info及
# info以上級別的信息記錄到/var/log/mail.log文件中
auth.=info @10.0.0.1 # 表示將auth相關的,基本爲info的信息記錄到10.0.0.1主機上去
# 前提是10.0.0.1要能接收其他主機發來的日誌信息
user.!=error # 表示記錄user相關的,不包括error級別的信息
user.!error # 與user.error相反
*.info # 表示記錄所有的日誌信息的info級別
mail.* # 表示記錄mail相關的所有級別的信息
*.* # 你懂的.
cron.info;mail.info # 多個日誌來源可以用";" 隔開
cron,mail.info # 與cron.info;mail.info 是一個意思
mail.*;mail.!=info # 表示記錄mail相關的所有級別的信息,但是不包括info級別的