UNIX 系統(tǒng)有一個非常靈活和強(qiáng)大的日志系統(tǒng),它讓你能夠記錄幾乎任何你能想象的東西,然后你可以操作日志來獲取你需要的信息。
許多版本的 UNIX 提供了一個名為 syslog 的通用日志工具,有信息需要記錄的單獨(dú)程序要將信息發(fā)送到 syslog。
Unix syslog 是一個主機(jī)可配置的,統(tǒng)一的系統(tǒng)日志工具。該系統(tǒng)采用集中式的系統(tǒng)日志進(jìn)程,其運(yùn)行程序 /etc/syslogd 或者 /etc/syslog。
系統(tǒng)記錄器的操作是相當(dāng)簡單的。程序發(fā)送日志條目到 syslogd,其將會在配置文件 /etc/syslogd.conf 或 /etc/syslog 中查找,當(dāng)找到一個匹配后,將日志消息寫入到期望的日志文件中。
現(xiàn)有你應(yīng)該了解的四種基本日志術(shù)語:
| 術(shù)語 | 描述 |
|---|---|
| Facility | 此標(biāo)識符用來描述提交的日志信息的應(yīng)用程序或進(jìn)程。例如郵件,內(nèi)核和 FTP。 |
| Priority | 一個顯示消息重要性的指示器。syslog 作為準(zhǔn)則定義了消息的級別,從調(diào)試信息到關(guān)鍵事件。 |
| Selector | 一個或更多的 facility 和 level 的結(jié)合體 。當(dāng)一個輸入事件匹配一個 selector 時,一個 action 會被執(zhí)行。 |
| Action | 傳入的消息匹配 selector 時會發(fā)生的事情。Action 可以將消息寫入日志文件,將消息回傳到控制臺或其他設(shè)備,將消息寫入到一個登錄用戶,或?qū)⑾l(fā)送到另一個日志服務(wù)器。 |
下面是 selector 可用的 facility。不是所有的 facility 都存在于所有版本的 UNIX。
| Facility | 描述 |
|---|---|
| auth | 需要用戶名和密碼的相關(guān)活動(getty,su,login) |
| authpriv | 類似于 auth 的認(rèn)證,但是記錄的文件只能被授權(quán)的用戶讀取。 |
| console | 用于捕獲信息,這些信息一般會傳向系統(tǒng)控制臺。 |
| cron | 與 cron 系統(tǒng)有關(guān)的計(jì)劃任務(wù)信息。 |
| daemon | 所捕獲的所有系統(tǒng)守護(hù)進(jìn)程信息。 |
| ftp | ftp 守護(hù)進(jìn)程相關(guān)的信息。 |
| kern | 內(nèi)核信息。 |
| local0.local7 | 用戶自定義使用的本地信息。 |
| lpr | 與打印服務(wù)系統(tǒng)有關(guān)的信息。 |
| 與郵件系統(tǒng)相關(guān)的信息。 | |
| mark | 用于生產(chǎn)日志文件中時間戳的偽事件。 |
| news | 與網(wǎng)絡(luò)新聞傳輸協(xié)議( nntp )有關(guān)的信息。 |
| ntp | 與網(wǎng)絡(luò)時間協(xié)議有關(guān)的信息。 |
| user | 普通用戶進(jìn)程產(chǎn)生的信息。 |
| uucp | UUCP 子系統(tǒng)生成的信息。 |
syslog 的優(yōu)先級( Priority )如下表:
| Priority | 描述 |
|---|---|
| emerg | 緊急情況,如即將發(fā)生的系統(tǒng)崩潰,通常會廣播到所有用戶。 |
| alert | 需要立即修改的情況,如系統(tǒng)數(shù)據(jù)庫的損壞。 |
| crit | 關(guān)鍵的情況,如一個硬件的錯誤。 |
| err | 普通錯誤。 |
| warning | 警告 |
| notice | 不是一個錯誤的情況,但是可能需要用特定方式的處理一下。 |
| info | 報(bào)告性的消息。 |
| debug | 用于調(diào)試程序的消息。 |
| none | 沒有重要級別,通常用于指定非日志的消息。 |
facility 和 level 的組合能夠讓你辨別記錄了什么和這些日志信息去哪兒了。
每個程序盡職盡責(zé)地向系統(tǒng)記錄器發(fā)送消息,記錄器基于 selector 定義的 level 決定跟蹤什么和舍棄什么信息。
當(dāng)你指定了一個 level,系統(tǒng)會記錄這一 level 及更高 level 的一切信息。
文件 /etc/syslog.conf 用于配置記錄消息的位置。一個典型的 syslog.conf 文件看起來應(yīng)該像這樣:
*.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
文件中的每一行包含兩部分:
下面是上述配置的注意事項(xiàng):
action 部分指定了下面五個 action 中的其中一個:
/var/log/lpr.log 或者 /dev/console。UNIX 提供了 logger 命令,這是處理系統(tǒng)日志記錄的一個非常有用的命令。logger 命令發(fā)送日志消息到 syslogd 守護(hù)進(jìn)程,從而驅(qū)使系統(tǒng)記錄日志。
這意味著我們可以隨時用命令行檢查 syslogd 守護(hù)進(jìn)程及其配置。logger 命令提供了一種在命令行上添加一行條目到系統(tǒng)日志文件中的方法。
該命令的格式是:
logger [-i] [-f file] [-p priority] [-t tag] [message]...
下面是具體的參數(shù)細(xì)節(jié):
| 選項(xiàng) | 描述 |
|---|---|
| -f filename | 使用文件 filename 的內(nèi)容作為消息來記錄。 |
| -i | 日志的每一行都記錄進(jìn)程的 id。 |
| -p priority | 指定輸入消息的優(yōu)先級 priority(指定的 selector),優(yōu)先級 priority 可以是數(shù)字或者指定為 facility.level 對的格式。默認(rèn)參數(shù)是 user.notice。 |
| -t tag | 用指定 tag 標(biāo)記記錄到日志中的每一行。 |
| message | 字符串參數(shù),它的內(nèi)容以特定順序連接在一起,由空格分開。 |
日志文件有快速增長的特點(diǎn),并消耗大量的磁盤空間。大多數(shù) UNIX 發(fā)行版系統(tǒng)使用了工具(如 newsyslog 或 logrotate)啟用日志輪換功能。
這些工具由 cron 守護(hù)進(jìn)程在一個頻繁的時間間隔里調(diào)用。你可以在 newsyslog 或 logrotate 的手冊頁中獲取更多的細(xì)節(jié)內(nèi)容。
所有的系統(tǒng)應(yīng)用程序創(chuàng)建自己的日志文件在 /var/log 和它的子目錄里。下面這里有幾個重要的應(yīng)用,其相應(yīng)的日志目錄:
| 應(yīng)用 | 目錄 |
|---|---|
| httpd | /var/log/httpd |
| samba | /var/log/samba |
| cron | /var/log/ |
| /var/log/ | |
| mysql | /var/log/ |