您好,登錄后才能下訂單哦!
這篇文章的內容主要圍繞如何實現linux下syslog的使用進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!
syslog 系統日志應用
1) 概述
syslog是Linux系統默認的日志守護進程。默認的syslog配置文件是/etc/syslog.conf文件。程序,守護進程和內核提供了訪問系統的日志信息。因此,任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成該信息。
幾乎所有的網絡設備都可以通過syslog協議,將日志信息以用戶數據報協議(UDP)方式傳送到遠端服務器,遠端接收日志服務器必須通過syslogd監聽UDP 端口514,并根據 syslog.conf配置文件中的配置處理本機,接收訪問系統的日志信息,把指定的事件寫入特定文件中,供后臺數據庫管理和響應之用。意味著可以讓任何事件都登錄到一臺或多臺服務器上,以備后臺數據庫用off-line(離線) 方法分析遠端設備的事件。
通常,syslog 接受來自系統的各種功能的信息,每個信息都包括重要級。/etc/syslog.conf 文件通知 syslogd 如何根據設備和信息重要級別來報告信息。
2) etc/syslog.conf
/etc/syslog.conf 文件使用下面的格式:
facility.level action
facility.level為選擇條件本身分為兩個字段,之間用一個小數點(.)分隔。action和facility.level之間使用TAB隔開。前一字段是一項服務,后一字段是一個優先級。選擇條件其實是對消息類型的一種分類,這種分類便于人們把不同類型的消息發送到不同的地方。在同一個syslog配置行上允許出現一個以上的選擇條件,但必須用分號(;)把它們分隔開。action字段所表示的活動具有許多靈活性,特別是,可以使用名稱管道的作用是可以使 syslogd 生成后處理信息。
要素分析:
facility 指定 syslog 功能,主要包括以下這些:
kern 內核信息,首先通過 klogd 傳遞;
user 用戶進程;
mail 郵件;
daemon 后臺進程;
authpriv 授權信息;
syslog 系統日志;
lpr 打印信息;
news 新聞組信息;
uucp 由uucp生成的信息
cron 計劃和任務信息。
mark syslog 內部功能用于生成時間戳
local0—-local7 與自定義程序使用,例如使用 local5 做為 ssh 功能
* 通配符代表除了 mark 以外的所有功能
level 指定syslog優先級:
syslog 級別如下:(按嚴重程度由高到低的順序列出了所有可能的優先級。)
emerg 或 panic 該系統不可用(最緊急消息)
alert 需要立即被修改的條件(緊急消息)
crit 阻止某些工具或子系統功能實現的錯誤條件(重要消息)
err 阻止工具或某些子系統部分功能實現的錯誤條件(出錯消息)
warning 預警信息(警告消息)
notice 具有重要性的普通條件(普通但重要的消息)
info 提供信息的消息(通知性消息)
debug 不包含函數條件或問題的其他信息(調試級-信息量最多)
none 沒有重要級,通常用于排錯(不記錄任何日志消息)
* 所有級別,除了none
action:
1. /var/log/lastlog : 記錄每個使用者最近簽入系統的時間, 因此當使用者簽入時, 就會顯示其上次簽入的時間, 您應該注意一下這個時間, 若不是您上次簽入的時間, 表示您的帳號可能被人盜用了. 此檔可用 /usr/bin/lastlog 指令讀取.
2. /var/run/utmp : 記錄每個使用者簽入系統的時間, who, users, finger 等指令會查這個檔案.
3. /var/log/wtmp : 記錄每個使用者簽入及簽出的時間, last 這個指令會查這個檔案. 這個檔案也記錄 shutdown 及 reboot 的動作.
4. /var/log/secure : 登錄系統的信息
5. /var/log/maillog : 記錄 sendmail 及 pop 等相關訊息.
6. /var/log/cron : 記錄 crontab 的相關訊息 ,定時器的信息
7. /var/log/dmesg : /bin/dmesg 會將這個檔案顯示出來, 它是開機時的畫面訊息.
8. /var/log/xferlog : 記錄那些位址來 ftp 拿取那些檔案.
9. /var/log/messages : 系統大部份的訊息皆記錄在此, 包括 login, check password , failed login, ftp, su 等.
Application 中定義level:
0: LOG_EMERG,緊急情況
1: LOG_ALERT,高優先級故障,例如數據庫崩潰
2: LOG_CRIT,嚴重錯誤,例如硬件故障
3: LOG_ERR,錯誤
4: LOG_WARNING,警告
5: LOG_NOTICE,需要注意的特殊情況
6: LOG_INFO,一般信息
7: LOG_DEBUG,調試信息
kernel中定義level(使用printk函數設定level):
0: KERN_EMERG, 系統無法使用
1: KERN_ALERT, 必須立即執行
2: KERN_CRIT, 緊急狀態
3: KERN_ERR, 錯誤狀態
4: KERN_WARNING, 警告狀態
5: KERN_NOTICE, 正常狀態且十分重要
6: KERN_INFO, 報告
7: KERN_DEBUG, debug-level訊息
例子:
//其中*是通配符,代表任何設備;none表示不對任何級別的信息進行記錄。
*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages
//將authpriv的任何級別的信息記錄到/var/log/secure文件中,這主要是一些和認、權限使用相關的信息。
authpriv.* /var/log/secure
//將mail設備中的任何級別的信息記錄到/var/log/maillog文件中,這主要是和電子郵件相關的信息。
mail.* -/var/log/maillog
//將cron設備中的任何級別的信息記錄到/var/log/cron文件中,這主要是和系統中定期執行的任務相關的信息。
cron.* /var/log/cron
//將任何設備的emerg級別的信息發送給所有正在系統上的用戶。
*.emerg *
//將uucp和news設備的crit級別的信息記錄到/var/log/spooler文件中。
uucp,news.crit /var/log/spooler
//將和系統啟動相關的信息記錄到/var/log/boot.log文件中。
local7.* /var/log/boot.log
“mail.*”將發送所有的消息,“mail.!info”把info優先級的消息排除在外。
mail.*;mail.!info /var/log/mail
下面的規則指定Facility為mail,Severity為err以上級別的日志寫入/var/log/mail.err文件,而err以下級別的日志則被忽略:
mail.err /var/log/mail.err
facility和level可以使用通配符,也可以指定多個,用逗號隔開:
auth,authpriv.* /var/log/auth.log
Facility和level的組合可以有多個,用分號隔開,文件前面加一個減號表示日志不立即寫入文件,而是在緩沖中積攢到一定的條件再寫,這樣 可以提高性能,但是當機可能會丟失數據:
*.*;auth,authpriv.none -/var/log/syslog
可以把syslog消息通過UDP發送到syslog服務器的514端口:
*.err @192.168.0.1
發生錯誤時,在控制臺打屏:
*.err /dev/console
linux日志管理:
內核信息 -> klogd -> syslogd -> /var/log/messages等文件
其他信息 -> syslogd -> /var/log/messages等文件
syslog配置文件 -> /etc/syslog.conf
3) 調用 syslogd 守護程序
syslog 守護程序是由 /etc/rc.d/init.d/syslog 腳本在運行級2下被調用的,缺省不使用選項。但有兩個選項 -r 和 -h 很有用。
如果將要使用一個日志服務器,必須調用 syslogd -r。缺省情況下 syslog 不接受來自遠程系統的信息。當指定 -r 選項,syslogd 將會監聽從 514 端口上進來的 UDP 包。
如果還希望日志服務器能傳送日志信息,可以使用 -h 標志。缺省時,syslogd 將忽略使其從一個遠程系統傳送日志信息到另一個系統的/etc/syslog.conf 輸入項。
4) klogd 守護進程
klogd 守護進程獲得并記錄 Linux 內核信息。通常,syslogd 會記錄 klogd 傳來的所有信息,然而,如果調用帶有 -f filename 變量的 klogd 時,klogd 就在 filename 中記錄所有信息,而不是傳給syslogd。當指定另外一個文件進行日志記錄時,klogd 就向該文件中寫入所有級別或優先權。Klogd 中沒有和 /etc/syslog.conf 類似的配置文件。使用 klogd 而避免使用 syslogd 的好處在于可以查找大量錯誤。如果有人入侵了內核,使用 klogd 可以修改錯誤。
5) 配置一個中央日志服務器
1. 編輯/etc/sysconfig/syslog文件。
在“SYSLOGD_OPTIONS”行上加“-r”選項以允許接受外來日志消息。如果因為關于其他機器的DNS記錄項不夠齊全或其他原因不想讓中央日志服務器解析其他機器的FQDN,還可以加上“-x”選項。此外,你或許還想把默認的時間戳標記消息(–MARK–)出現頻率改成比較有實際意義的數值,比如240,表示每隔240分鐘(每天6次)在日志文件里增加一行時間戳消息。日志文件里的“–MARK–”消息可以讓你知道中央日志服務器上的 syslog守護進程沒有停工偷懶。按照上面這些解釋寫出來的配置行應該是如下所示的樣子:
SYSLOGD_OPTIONS="-r-x-m240"
2. 重新啟動syslog守護進程。
修改只有在syslog守護進程重新啟動后才會生效。如果你只想重新啟動syslog守護進程而不是整個系統,執行以下兩條命令之一:
/etc/rc.d/init.d/syslog stop; /etc/rc.d/init.d/syslog start
/etc/rc.d/init.d/syslog restart
3. 如果這臺機器上運行著iptables防火墻或TCPWrappers,請確保它們允許514號端口上的連接通過。syslog守護進程要用到514號端口。
4. 為中央日志服務器配置各客戶機器
讓客戶機把日志消息發往一個中央日志服務器并不困難。編輯客戶機上的/etc/syslog.conf文件,在有關配置行的操作動作部分用一個“@”字符指向中央日志服務器,如下所示:
另一種辦法是在DNS里定義一個名為“loghost”的機器,然后對客戶機的syslog配置文件做如下修改(這個辦法的好處是:當你把中央日志服務器換成另一臺機器時,不用再修改每一個客戶機上的syslog配置文件)
接下來,重新啟動客戶機上的syslog守護進程讓修改生效。讓客戶機在往中央日志服務器發送日志消息的同時繼續在本地進行日志工作仍有必要,起碼在調試客戶機的時候不必到中央日志服務器查日志,在中央日志服務器出問題的時候還可以幫助調試。
6)與系統日志相關的函數:
openlog, syslog, closelog是一套系統日志寫入接口。
程序的用法示例代碼如下:syslog.c
[c-sharp] view plaincopyprint?
//syslog.c
#include
int main(int argc, char **argv)
{
openlog("MyMsgMARK", LOG_CONS | LOG_PID, 0);
syslog(LOG_EMERG,
"This is a syslog test message generated by program '%s'/n",
argv[0]);
closelog();
return 0;
}
編譯運行:
[root@localhost liuxltest]# gcc -o syslog syslog.c
[root@localhost liuxltest]# ./syslog
[root@localhost liuxltest]#
Message from syslogd@ at Tue Feb 24 13:24:34 2009 …
localhost MyMsgMARK[16467]: This is a syslog test message generated by program './syslog'
同時,你也可以在/var/log/messages中看到信息如下:
Feb 24 13:24:34 localhost MyMsgMARK[16467]: This is a syslog test message generated by program './syslog'
函數說明:
openlog函數原型如下:
void openlog(const char *ident, int option, int facility);
此函數用來打開一個到系統日志記錄程序的連接,打開之后就可以用syslog或vsyslog函數向系統日志里添加信息了。
參數說明:
ident:是一個標記,ident所表示的字符串將固定地加在每行日志的前面以標識這個日志,通常就寫成當前程序的名稱以作標記。
option:是下列值取與運算的結果:LOG_CONS, LOG_NDELAY, LOG_NOWAIT, LOG_ODELAY,
LOG_PERROR, LOG_PID,各值意義請參考man openlog手冊:
LOG_CONS
Write directly to system console if there is an error while sending to system logger.
LOG_NDELAY
Open the connection immediately (normally, the connection is opened when the first message is logged).
LOG_PERROR
(Not in SUSv3.) Print to stderr as well.
LOG_PID
Include PID with each message.
facility:指明記錄日志的程序的類型。
closelog函數原型如下:
void closelog(void )
此函數就是用來關閉openlog打開的連接的。
syslog函數原型如下:
void syslog(int priority, const char *format, …);
此函數用于把日志消息發給系統程序syslogd去記錄。
參數說明:
priority:是消息的緊急級別;
format:是消息的格式,之后是格式對應的參數。就是printf函數一樣使用。
應用:
如果我們的程序要使用系統日志功能,只需要在程序啟動時使用openlog函數來連接syslogd程序,后面隨時用syslog函數寫日志就行了。
另外,作為syslog的替代程序的新一代工具是syslog-ng,syslog-ng具有很強的網絡功能,可以方便地把多臺機器上的日志保存到一臺中心日志服務器上。
感謝你的閱讀,相信你對“如何實現linux下syslog的使用”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。