syslog:類Unix系統常用的log服務

jobbole發表於2012-11-06

  當前的一個專案需要音視訊的技術,而公司剛好沒有類似的產品。幸好開源社群如此的強大,稍微谷歌一下,就找到了強大的Kamailio整合Asstersik的解決方案。

  接下來的事情非常順利,安裝ubuntu作業系統、下載原始碼、編譯、安裝軟體,一步步安裝官方文件進行中。並且過程中沒有提示任何錯誤,這讓我們很興奮。

  最後我們使用imsandroid(一個Android系統的Sip客戶端)進行測試,結果卻顯示連線失敗。這個客戶端軟體嚴格遵守”不要列印任何讓使用者挫敗的錯誤”原則,這是非常正確的,但是對開發人員來說,這並不是個好訊息。

  我們只能從伺服器端開始查錯,首先檢視服務端的kamailio是否正常啟動,執行命令 pa –ef | grep kamailio。結果顯示我們sip服務沒有啟動。接下來我們需要的則是更多的關於軟體執行的資訊,包括啟動資訊、錯誤資訊、以及任何軟體開發人員想告訴我們的資訊。

  可是,問題來了。

  如果你經常在windows下開發,並且沒有太多的Linux開發經驗,你會試圖在軟體的安裝目錄下查詢包含log關鍵字的文字,結果是not found。

  查錯需要的資訊

  ●系統列印的資訊:比如遠端連結失敗、賬密驗證失敗等資訊,或者是軟體依賴的底層服務啟動失敗的資訊以及本地服務啟動的執行資訊。
  ●網路服務的錯誤資訊:遠端服務不存在、連結超時、或者需要代理等等資訊。
  ●事件記錄簿:這裡可以很快找到關於服務執行的某個事件資訊,失敗以及失敗原因等等。

  誰可以幫助你

  linux提供一個syslogd服務可以提供你log檔案,幫助你獲得以上的資訊,syslogd記錄的同時還會幫助你分類這些資訊。比如在/var/log目錄下,你可以找到以上的資訊:

/var/log/cron:
 記錄系統排程啟動的資訊。
 /var/log/dmesg:
 記錄系統開機時產生的各種資訊。
 /var/log/lastlog:
 記錄使用者登入系統的資訊。
 /var/log/maillog 或 /var/log/mail/*:
 記錄郵件相關的資訊,主要有sendmain與devecot產生的資訊,前者是SMTP協議的提供者,而後者是POP3協議的提供者。
 /var/log/messages:
 記錄系統發生的錯誤資訊,對於差錯非常重要。
 /var/log/secure:
 記錄軟體驗證的資訊。包含ssh、telnet以及login程式等程式的驗證資訊,基本上,涉及驗證的軟體都會在這個檔案中記錄。
 /var/log/wtmp, /var/log/faillog:
 這兩個檔案記錄正確登入系統的賬號與錯誤登入的賬號資訊。
 /var/log/httpd/*, /var/log/news/*, /var/log/samba/*:
 不同的服務可能使用自己的log檔記錄產生的各項資訊,這需要軟體在配置檔中進行相應的配置。

  你可能不知道,你的系統已經在使用syslogd服務了

  這是文章的目的之一,syslog是unix like系統記錄log的規範,非常多的系統都預設支援它。redhat、ubuntu centos等等。你可以在你係統中執行ps –ef | grep syslogd來確認。

  正因為它是如此廣泛地被支援,所以很可能你的軟體就剛好是使用它來記錄log的。

  軟體是否使用syslog,還是自定義log呢?

  為了確認軟體使用何種方式記錄log,可以檢視官方文件提到的該軟體的log配置,比如Asterisk的logger.conf配置檔案,其中就有一段

;debug => debug
 ;security => security
 console => notice,warning,error
 ;console => notice,warning,error,debug
 messages => notice,warning,error
 ;full => notice,warning,error,debug,verbose,dtmf,fax
 ;syslog keyword : This special keyword logs to syslog facility ;
 ;syslog.local0 => notice,warning,error ;

  上面的syslog facility告訴你,軟體支援syslog(這裡facility意為服務類別)。即使它不說,如果你熟知syslog的facility,也可以猜到它是否支援。syslog有以下級別的服務類別:

服務類別 說明
auth (authpriv) 記錄與驗證有關的資訊
cron 記錄系統排程的資訊
daemon 記錄各個daemon產生的資訊
kern 記錄核心產生的資訊
lpr 記錄列印相關的資訊
mail 記錄郵件的有關的資訊
news 記錄新聞有關的資訊
syslog 記錄syslog本省產生的資訊
user, uucp, local0 ~ local7 記錄各種傳統的Unix系統本身有關的資訊

  呼叫每個服務產生的對應log檔案,它是在/etc/syslog.conf中配置的(ubuntu是/etc/rsyslog.d/50-default.conf)中配置的,這裡不詳細介紹。

  還應該注意的是,每個服務還有相應的log級別,這和java 的log4j工具很類似。

等級 等級名稱 說明
1 info 一般的說明資訊,一般提示使用者級別的操作資訊
2 notice 比info還需要被注意的資訊
3 warning
(warn)
警示資訊,可能出現了問題,但是不影響軟體的正常執行
4 err
(error)
一些重大的錯誤,可能導致軟體不能正常使用
5 crit 嚴重的資訊
6 alert 比crit更為嚴重的資訊
7 emerg
(panic)
罪嚴重的警告,意指系統可能當機。通常只有硬體出現錯誤,導致核心無法正常工作才會出現。

  教你看懂syslog檔案

  每條資訊均會記錄以下的重要資訊:

  ●事件發生的日期和時間。

  ●啟動事件的主機名稱。

  ●啟動事件的服務名稱(比如httpd、samba等)或函式名稱(oam_unix)。

  ●資訊的實際內容

  如果你想要更多的資訊,或者比較少的、特別關注的資訊,你可修改syslog的配置檔來實現,這個在以後的章節會介紹。例子為系統/var/log/secure的擷取:

[root@www ~]# cat /var/log/secure
 1 Mar 14 15:38:00 www atd[18701]: pam_unix(atd:session): session opened for user root by (uid=0)
 2 Mar 14 15:38:00 www atd[18701]: pam_unix(atd:session): session closed for user root
 3 Mar 16 16:01:51 www su: pam_unix(su-l:auth): authentication failure; logn ame=vbird uid=500 euid=0 tty=pts/1 ruser=vbird rhost= user=root
 4 Mar 16 16:01:55 www su: pam_unix(su-l:session): session opened for user root by vbird(uid=500)
 5 Mar 16 16:02:22 www su: pam_unix(su-l:session): session closed for user root
 |--日期/時間------|-H-|--------服務或函式---------|--訊息說明------>

  結論

  syslog的應用是如此的廣泛,許多的軟體採用它來記錄log,所以我們很有必要理解並掌握它。不僅要認識syslog提供的服務,以及如何去發現、甚至配置服務對應的log文件路徑,還要知道如何在軟體中定義服務的log級別。

  來源:http://blog.jobbole.com/29633/

相關文章