syslog--unix like系統常用的log工具

gamebus發表於2021-09-09


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

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

但是當我們使用imsandroid(一個Android系統的Sip客戶端)進行測試時,結果顯示連線失敗。這個客戶端軟體嚴格遵守"不要列印任何讓使用者挫敗的錯誤"原則,這是非常正確的,但是對查詢錯誤而言,這讓人挫敗。

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

可是,問題來了。

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

 誰可以幫助你

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,也可以猜到它是否支援。下面列舉一些常見的facility及其含義:

服務類別

說明

auth (authpriv)

記錄與驗證有關的資訊

cron

記錄系統排程的資訊

daemon

記錄各個daemon產生的資訊

kern

記錄核心產生的資訊

lpr

記錄列印相關的資訊

mail

記錄郵件的有關的資訊

news

記錄新聞有關的資訊

syslog

記錄syslog本省產生的資訊

user, uucp, local0 ~ local7

記錄各種傳統的Unix系統本身有關的資訊

 

手動設定軟體使用日誌服務

以redis為例,其配置檔redis.conf預設沒有使用syslog日誌服務,找到以下的選項,然後將註釋去掉

# it can be one of:

# debug (a lot of information, useful for development/testing)

# verbose (many rarely useful info, but not a mess like the debug level)

# notice (moderately verbose, what you want in production probably)

# warning (only very important / critical messages are logged)

loglevel debug

# Specify the log file name. Also 'stdout' can be used to force

# Redis to log on the standard output. Note that if you use standard

# output for logging but daemonize, logs will be sent to /dev/null

logfile stdout

# To enable logging to the system logger, just set 'syslog-enabled' to yes,

# and optionally update the other syslog parameters to suit your needs.

syslog-enabled yes

# Specify the syslog identity.

syslog-ident redis

# Specify the syslog facility.  Must be USER or between LOCAL0-LOCAL7.

syslog-facility local0

 

預設日誌資訊會被列印到/var/log/syslog檔案中,如果希望將log列印到單獨的檔案中,需要在(ubuntu為/etc/rsyslog.d/50-default.conf,centos為/etc/rsyslog.conf)中配置的。比如

*.*;auth,authpriv.none,local0.none      -/var/log/syslog

local0.*                        -/var/log/redis.log

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

等級

等級名稱

說明

info

一般的說明資訊,一般提示使用者級別的操作資訊

notice

比info還需要被注意的資訊

warning

(warn)

警示資訊,可能出現了問題,但是不影響軟體的正常執行

err 

(error)

一些重大的錯誤,可能導致軟體不能正常使用

crit

嚴重的資訊

alert

比crit更為嚴重的資訊

emerg 

(panic)

罪嚴重的警告,意指系統可能當機。通常只有硬體出現錯誤,導致核心無法正常工作才會出現。

 最後,容易遺忘的是重啟syslogd服務,指令service rsyslog restart。然後啟動服務,檢視log即可tail -f -n 200 /var/log/redis.log。

教你看懂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級別。

系統預設包含使用syslog的服務

預設在/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檔記錄產生的各項資訊,這需要軟體在配置檔中進行相應的配置。 

©著作權歸作者所有:來自51CTO部落格作者jeremy_iter的原創作品,如需轉載,請註明出處,否則將追究法律責任

linuxsyslogredisjava開發


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2822159/,如需轉載,請註明出處,否則將追究法律責任。

相關文章