日志文件內容的一般格式
一般來說,系統產生的信息經過syslogd記錄下來的數據中,每條信息均記錄下面的幾個重要數據:
- 事件發生的日期與時間;
- 發生此事的主機名;
- 啟動此事件的服務名稱(如 samba, xinetd等)或函數名稱(如 libpam);
- 該信息的實際數據內容;
當然,這些信息的詳細度是可以修改的,下面是/var/log/secure所記錄的信息:
1 Dec 27 01:04:51 localhost sshd[5677]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root" 2 Dec 27 01:04:52 localhost sshd[5679]: Failed password for root from 122.225.103.103 port 4059 ssh2 3 Dec 27 01:04:52 localhost sshd[5679]: fatal: Read from socket failed: Connection reset by peer [preauth] 4 Dec 27 01:04:54 localhost sshd[5677]: Failed password for root from 122.225.103.103 port 3787 ssh2 5 Dec 27 01:04:54 localhost sshd[5677]: fatal: Write failed: Connection reset by peer [preauth] 6 Dec 27 14:12:39 localhost polkitd[877]: Loading rules from directory /etc/polkit-1/rules.d 7 Dec 27 14:12:39 localhost polkitd[877]: Loading rules from directory /usr/share/polkit-1/rules.d 8 Dec 27 14:12:39 localhost polkitd[877]: Finished loading, compiling and executing 5 rules 9 Dec 27 14:12:39 localhost polkitd[877]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
|---日期/時間---|-------服務與函數-------|------------------------信息說明-----------------
對第一條進行解析:12月27日的1點04分51秒在本地主機的sshd(PID為5677)傳來的消息,這個消息有pam_succeed模塊提出,信息內容為requirement "uid >=1000" not met by user "root"。
syslogd的配置文件:/etc/syslog.conf
/etc/syslog.conf這個文件規定了什么服務的什么等級信息以及需要被記錄在什么文件或設備,語法為:
1 服務名稱[.=!]信息等級 信息記錄的文件或設備或主機 2 3 #下面以mail這個服務產生的info等級為例: 4 5 mail.info /var/log/maillog_info 6 7 #這行說明:mail服務產生的大於等於info等級的信息都記錄到/var/maillog_info文件中。
服務名稱
syslogd本身有設置一些服務,主要有下面這些(可使用man 3 syslog查詢到相關的信息)。
服務類型 | 說明 |
auth(authpriv) | 主要與認證有關的機制,例如:login,ssh,su等需要帳號/密碼 |
cron | 就是例行性工作調度cron/at等生成信息日志的地方 |
daemon | 與各個daemon有關的信息 |
kern | 就是內核(kernel)產生信息的地方 |
lpr | 即是打印相關的信息 |
只要與郵件收發有關的信息記錄都屬於這個 | |
news | 與新聞組服務器有關的東西 |
syslog | 就是syslogd這個程序本身生成的信息 |
user,uucp,local0~lcocal7 | 與Unix like機器本身有關的一些信息 |
以上都是syslog自行定制的服務名稱,軟件可通過調用上述的服務名稱來記錄它們產生的信息。如:sendmail與postfix及dovecot都是與郵件有關的軟件,這些軟件在設計日志記錄時都會主動調用syslogd內的mail服務名稱(LOG_MAIL),所以上述軟件所產生的信息被syslogd記錄在maillog文件中。
信息等級
同一個服務所產生的信息也是有差別的,有啟動時僅通知系統而已的一般信息(information),有出現還不至於影響到正常運行的警告信息(warn),還有系統硬件發生嚴重錯誤時所產生的重大問題信息(error等);syslog將信息分為7個主要等級。
等級 | 等級名稱 | 說明 |
1 | info | 僅是一些基本的信息說明 |
2 | notice | 除了info外還需要注意的一些信息內容 |
3 | warning(warn) | 警示的信息,可能有問題,但還不至於影響到某個daemon運行的信息;基本上,info,notice,warn這三個信息都是在告知一些基本信息而已,應該還不至於造成一些系統運行困擾 |
4 | err(error) | 一些重大的錯誤信息,例如配置文件的某些設置值造成該服務無法啟動的信息說明,通常通過err的錯誤告知,應該可以了解到該服務無法啟動的問題 |
5 | crit | 比err還要嚴重的錯誤信息,這個crit是臨界點(critical)的縮寫,這個錯誤已經很嚴重了 |
6 | aiert | 警告,已經很有問題,比crit還要嚴重 |
7 | emerg(panic) | “疼痛”等級,指系統幾乎要死機的狀態,很嚴重的錯誤信息。通常是硬件出問題導致整個內核無法順利運行就會出現這樣的信息 |
除了這些等級外還有兩個特殊的等級,debug(錯誤檢測等級)和none(不需等錄等級)。當我們要做一些錯誤檢測或忽略掉某些服務的信息時,可用這兩個等級。
等級信息前[.=!]所代表的意思是:
“.” 代表比后面還要高的等級(含該等級)都被記錄下來。
“=” 代表所需要的等級,就是后面接的等級。
“!” 代表不等於,即除了該等級外的其他等級都要記錄。
信息記錄的文件名或設備或主機
這個告訴syslogd將信息記錄到什么地方,通常是記錄文件,但也可以輸出到設備,例如打印機之類的。也可以記錄到不同的主機上。下面是一些常見的放置處:
- 文件的絕對路徑:通常就是放在/var/log里
- 打印機或其他:例如/dev/lp0這個打印機設備。
- 用戶名稱:顯示給用戶。
- 遠程主機:例如@www.vbird.tsai,當然,需要對方主機的支持。
- *:代表目前在線的所有人,類似wall這個命令。
日志文件的安全性設置
可以通過chattr設置a這個屬性來增加日志文件的隱藏屬性,讓日志文件只能增加不能被刪除。不過在進行日志文件輪替時將無法移動該日志文件的文件名,需要通過使用logrotate的配置文件來解決。
1 [root@www ~]# chattr +a /var/log/messages 2 3 #將messages文件添加隱藏屬性 4 5 [root@www ~]# chattr -a /var/log/messages 6 7 #刪除隱藏屬性
附:
日志文件無法記錄信息:
導致日志文件無法記錄信息的原因有很多,其中有一個就是在打開日志文件時對文件進行了編輯,如用vim打開日志文件后在離開時使用了“:wq”,這就會導致日志文件無法繼續記錄信息。因為syslog的日志文件只要“被編輯過”就無法繼續記錄,這才導致無法記錄。只要重新啟動syslog即可。