溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何實(shí)現(xiàn)linux下syslog的使用

發(fā)布時(shí)間:2022-01-21 11:06:01 來源:億速云 閱讀:169 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章的內(nèi)容主要圍繞如何實(shí)現(xiàn)linux下syslog的使用進(jìn)行講述,文章內(nèi)容清晰易懂,條理清晰,非常適合新手學(xué)習(xí),值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

syslog 系統(tǒng)日志應(yīng)用
 1) 概述
      syslog是Linux系統(tǒng)默認(rèn)的日志守護(hù)進(jìn)程。默認(rèn)的syslog配置文件是/etc/syslog.conf文件。程序,守護(hù)進(jìn)程和內(nèi)核提供了訪問系統(tǒng)的日志信息。因此,任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成該信息。

      幾乎所有的網(wǎng)絡(luò)設(shè)備都可以通過syslog協(xié)議,將日志信息以用戶數(shù)據(jù)報(bào)協(xié)議(UDP)方式傳送到遠(yuǎn)端服務(wù)器,遠(yuǎn)端接收日志服務(wù)器必須通過syslogd監(jiān)聽UDP 端口514,并根據(jù) syslog.conf配置文件中的配置處理本機(jī),接收訪問系統(tǒng)的日志信息,把指定的事件寫入特定文件中,供后臺(tái)數(shù)據(jù)庫管理和響應(yīng)之用。意味著可以讓任何事件都登錄到一臺(tái)或多臺(tái)服務(wù)器上,以備后臺(tái)數(shù)據(jù)庫用off-line(離線) 方法分析遠(yuǎn)端設(shè)備的事件。
      通常,syslog 接受來自系統(tǒng)的各種功能的信息,每個(gè)信息都包括重要級(jí)。/etc/syslog.conf 文件通知 syslogd 如何根據(jù)設(shè)備和信息重要級(jí)別來報(bào)告信息。

 2) etc/syslog.conf
      /etc/syslog.conf 文件使用下面的格式:
      facility.level    action
      facility.level為選擇條件本身分為兩個(gè)字段,之間用一個(gè)小數(shù)點(diǎn)(.)分隔。action和facility.level之間使用TAB隔開。前一字段是一項(xiàng)服務(wù),后一字段是一個(gè)優(yōu)先級(jí)。選擇條件其實(shí)是對(duì)消息類型的一種分類,這種分類便于人們把不同類型的消息發(fā)送到不同的地方。在同一個(gè)syslog配置行上允許出現(xiàn)一個(gè)以上的選擇條件,但必須用分號(hào)(;)把它們分隔開。action字段所表示的活動(dòng)具有許多靈活性,特別是,可以使用名稱管道的作用是可以使 syslogd 生成后處理信息。
      要素分析:
facility 指定 syslog 功能,主要包括以下這些:
kern     內(nèi)核信息,首先通過 klogd 傳遞;
user     用戶進(jìn)程;
mail     郵件;
daemon   后臺(tái)進(jìn)程;
authpriv 授權(quán)信息;
syslog   系統(tǒng)日志;
lpr      打印信息;
news     新聞組信息;
uucp     由uucp生成的信息
cron     計(jì)劃和任務(wù)信息。
mark     syslog 內(nèi)部功能用于生成時(shí)間戳
local0—-local7   與自定義程序使用,例如使用 local5 做為 ssh 功能
*        通配符代表除了 mark 以外的所有功能

      level 指定syslog優(yōu)先級(jí):
      syslog 級(jí)別如下:(按嚴(yán)重程度由高到低的順序列出了所有可能的優(yōu)先級(jí)。)
emerg 或 panic   該系統(tǒng)不可用(最緊急消息)
alert            需要立即被修改的條件(緊急消息)
crit             阻止某些工具或子系統(tǒng)功能實(shí)現(xiàn)的錯(cuò)誤條件(重要消息)
err              阻止工具或某些子系統(tǒng)部分功能實(shí)現(xiàn)的錯(cuò)誤條件(出錯(cuò)消息)
warning          預(yù)警信息(警告消息)
notice           具有重要性的普通條件(普通但重要的消息)
info             提供信息的消息(通知性消息)
debug            不包含函數(shù)條件或問題的其他信息(調(diào)試級(jí)-信息量最多)
none             沒有重要級(jí),通常用于排錯(cuò)(不記錄任何日志消息)
*                所有級(jí)別,除了none

action:

1. /var/log/lastlog : 記錄每個(gè)使用者最近簽入系統(tǒng)的時(shí)間, 因此當(dāng)使用者簽入時(shí), 就會(huì)顯示其上次簽入的時(shí)間, 您應(yīng)該注意一下這個(gè)時(shí)間, 若不是您上次簽入的時(shí)間, 表示您的帳號(hào)可能被人盜用了. 此檔可用 /usr/bin/lastlog 指令讀取.

2. /var/run/utmp : 記錄每個(gè)使用者簽入系統(tǒng)的時(shí)間, who, users, finger 等指令會(huì)查這個(gè)檔案.

3. /var/log/wtmp : 記錄每個(gè)使用者簽入及簽出的時(shí)間, last 這個(gè)指令會(huì)查這個(gè)檔案. 這個(gè)檔案也記錄 shutdown 及 reboot 的動(dòng)作.

4. /var/log/secure : 登錄系統(tǒng)的信息

5. /var/log/maillog : 記錄 sendmail 及 pop 等相關(guān)訊息.

6. /var/log/cron : 記錄 crontab 的相關(guān)訊息 ,定時(shí)器的信息

7. /var/log/dmesg : /bin/dmesg 會(huì)將這個(gè)檔案顯示出來, 它是開機(jī)時(shí)的畫面訊息.

8. /var/log/xferlog : 記錄那些位址來 ftp 拿取那些檔案.

9. /var/log/messages : 系統(tǒng)大部份的訊息皆記錄在此, 包括 login, check password , failed login, ftp, su 等.
Application 中定義level:
   0: LOG_EMERG,緊急情況
   1: LOG_ALERT,高優(yōu)先級(jí)故障,例如數(shù)據(jù)庫崩潰
   2: LOG_CRIT,嚴(yán)重錯(cuò)誤,例如硬件故障
   3: LOG_ERR,錯(cuò)誤
   4: LOG_WARNING,警告
   5: LOG_NOTICE,需要注意的特殊情況
   6: LOG_INFO,一般信息
   7: LOG_DEBUG,調(diào)試信息
kernel中定義level(使用printk函數(shù)設(shè)定level):
   0: KERN_EMERG, 系統(tǒng)無法使用
   1: KERN_ALERT, 必須立即執(zhí)行
   2: KERN_CRIT, 緊急狀態(tài)
   3: KERN_ERR, 錯(cuò)誤狀態(tài)
   4: KERN_WARNING, 警告狀態(tài)
   5: KERN_NOTICE, 正常狀態(tài)且十分重要
   6: KERN_INFO, 報(bào)告
   7: KERN_DEBUG, debug-level訊息

例子:

//其中*是通配符,代表任何設(shè)備;none表示不對(duì)任何級(jí)別的信息進(jìn)行記錄。

*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages

//將authpriv的任何級(jí)別的信息記錄到/var/log/secure文件中,這主要是一些和認(rèn)、權(quán)限使用相關(guān)的信息。

authpriv.* /var/log/secure

//將mail設(shè)備中的任何級(jí)別的信息記錄到/var/log/maillog文件中,這主要是和電子郵件相關(guān)的信息。

mail.* -/var/log/maillog

//將cron設(shè)備中的任何級(jí)別的信息記錄到/var/log/cron文件中,這主要是和系統(tǒng)中定期執(zhí)行的任務(wù)相關(guān)的信息。

cron.* /var/log/cron

//將任何設(shè)備的emerg級(jí)別的信息發(fā)送給所有正在系統(tǒng)上的用戶。

*.emerg *

//將uucp和news設(shè)備的crit級(jí)別的信息記錄到/var/log/spooler文件中。

uucp,news.crit /var/log/spooler

//將和系統(tǒng)啟動(dòng)相關(guān)的信息記錄到/var/log/boot.log文件中。

local7.* /var/log/boot.log

“mail.*”將發(fā)送所有的消息,“mail.!info”把info優(yōu)先級(jí)的消息排除在外。
mail.*;mail.!info /var/log/mail  
下面的規(guī)則指定Facility為mail,Severity為err以上級(jí)別的日志寫入/var/log/mail.err文件,而err以下級(jí)別的日志則被忽略:
mail.err                        /var/log/mail.err
facility和level可以使用通配符,也可以指定多個(gè),用逗號(hào)隔開:
auth,authpriv.*                 /var/log/auth.log
Facility和level的組合可以有多個(gè),用分號(hào)隔開,文件前面加一個(gè)減號(hào)表示日志不立即寫入文件,而是在緩沖中積攢到一定的條件再寫,這樣 可以提高性能,但是當(dāng)機(jī)可能會(huì)丟失數(shù)據(jù):
*.*;auth,authpriv.none          -/var/log/syslog

可以把syslog消息通過UDP發(fā)送到syslog服務(wù)器的514端口:
*.err    @192.168.0.1
發(fā)生錯(cuò)誤時(shí),在控制臺(tái)打屏:
*.err    /dev/console

      linux日志管理:
      內(nèi)核信息 -> klogd -> syslogd -> /var/log/messages等文件
      其他信息 -> syslogd -> /var/log/messages等文件
      syslog配置文件 -> /etc/syslog.conf

 3) 調(diào)用 syslogd 守護(hù)程序
      syslog 守護(hù)程序是由 /etc/rc.d/init.d/syslog 腳本在運(yùn)行級(jí)2下被調(diào)用的,缺省不使用選項(xiàng)。但有兩個(gè)選項(xiàng) -r 和 -h 很有用。
      如果將要使用一個(gè)日志服務(wù)器,必須調(diào)用 syslogd -r。缺省情況下 syslog 不接受來自遠(yuǎn)程系統(tǒng)的信息。當(dāng)指定 -r 選項(xiàng),syslogd 將會(huì)監(jiān)聽從 514 端口上進(jìn)來的 UDP 包。
      如果還希望日志服務(wù)器能傳送日志信息,可以使用 -h 標(biāo)志。缺省時(shí),syslogd 將忽略使其從一個(gè)遠(yuǎn)程系統(tǒng)傳送日志信息到另一個(gè)系統(tǒng)的/etc/syslog.conf 輸入項(xiàng)。

 4) klogd 守護(hù)進(jìn)程
      klogd 守護(hù)進(jìn)程獲得并記錄 Linux 內(nèi)核信息。通常,syslogd 會(huì)記錄 klogd 傳來的所有信息,然而,如果調(diào)用帶有 -f filename 變量的 klogd 時(shí),klogd 就在 filename 中記錄所有信息,而不是傳給syslogd。當(dāng)指定另外一個(gè)文件進(jìn)行日志記錄時(shí),klogd 就向該文件中寫入所有級(jí)別或優(yōu)先權(quán)。Klogd 中沒有和 /etc/syslog.conf 類似的配置文件。使用 klogd 而避免使用 syslogd 的好處在于可以查找大量錯(cuò)誤。如果有人入侵了內(nèi)核,使用 klogd 可以修改錯(cuò)誤。

 5) 配置一個(gè)中央日志服務(wù)器 
1.  編輯/etc/sysconfig/syslog文件。
      在“SYSLOGD_OPTIONS”行上加“-r”選項(xiàng)以允許接受外來日志消息。如果因?yàn)殛P(guān)于其他機(jī)器的DNS記錄項(xiàng)不夠齊全或其他原因不想讓中央日志服務(wù)器解析其他機(jī)器的FQDN,還可以加上“-x”選項(xiàng)。此外,你或許還想把默認(rèn)的時(shí)間戳標(biāo)記消息(–MARK–)出現(xiàn)頻率改成比較有實(shí)際意義的數(shù)值,比如240,表示每隔240分鐘(每天6次)在日志文件里增加一行時(shí)間戳消息。日志文件里的“–MARK–”消息可以讓你知道中央日志服務(wù)器上的 syslog守護(hù)進(jìn)程沒有停工偷懶。按照上面這些解釋寫出來的配置行應(yīng)該是如下所示的樣子:
    SYSLOGD_OPTIONS="-r-x-m240"
2.  重新啟動(dòng)syslog守護(hù)進(jìn)程。

      修改只有在syslog守護(hù)進(jìn)程重新啟動(dòng)后才會(huì)生效。如果你只想重新啟動(dòng)syslog守護(hù)進(jìn)程而不是整個(gè)系統(tǒng),執(zhí)行以下兩條命令之一:
/etc/rc.d/init.d/syslog stop;   /etc/rc.d/init.d/syslog start
/etc/rc.d/init.d/syslog restart 
3.  如果這臺(tái)機(jī)器上運(yùn)行著iptables防火墻或TCPWrappers,請(qǐng)確保它們?cè)试S514號(hào)端口上的連接通過。syslog守護(hù)進(jìn)程要用到514號(hào)端口。 
4.  為中央日志服務(wù)器配置各客戶機(jī)器
      讓客戶機(jī)把日志消息發(fā)往一個(gè)中央日志服務(wù)器并不困難。編輯客戶機(jī)上的/etc/syslog.conf文件,在有關(guān)配置行的操作動(dòng)作部分用一個(gè)“@”字符指向中央日志服務(wù)器,如下所示:

      另一種辦法是在DNS里定義一個(gè)名為“l(fā)oghost”的機(jī)器,然后對(duì)客戶機(jī)的syslog配置文件做如下修改(這個(gè)辦法的好處是:當(dāng)你把中央日志服務(wù)器換成另一臺(tái)機(jī)器時(shí),不用再修改每一個(gè)客戶機(jī)上的syslog配置文件)

      接下來,重新啟動(dòng)客戶機(jī)上的syslog守護(hù)進(jìn)程讓修改生效。讓客戶機(jī)在往中央日志服務(wù)器發(fā)送日志消息的同時(shí)繼續(xù)在本地進(jìn)行日志工作仍有必要,起碼在調(diào)試客戶機(jī)的時(shí)候不必到中央日志服務(wù)器查日志,在中央日志服務(wù)器出問題的時(shí)候還可以幫助調(diào)試。

 6)與系統(tǒng)日志相關(guān)的函數(shù):
openlog, syslog, closelog是一套系統(tǒng)日志寫入接口。
程序的用法示例代碼如下:syslog.c

[c-sharp] view plaincopyprint?

  1. //syslog.c  

  2. #include    

  3. int main(int argc, char **argv)  

  4. {  

  5.     openlog("MyMsgMARK", LOG_CONS | LOG_PID, 0);  

  6.     syslog(LOG_EMERG,  

  7.            "This is a syslog test message generated by program '%s'/n",  

  8.            argv[0]);  

  9.     closelog();  

  10.     return 0;  

  11. }  


編譯運(yùn)行:

[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'

同時(shí),你也可以在/var/log/messages中看到信息如下:

Feb 24 13:24:34 localhost MyMsgMARK[16467]: This is a syslog test message generated by program './syslog'

函數(shù)說明:
openlog函數(shù)原型如下:
void openlog(const char *ident, int option, int facility);
    此函數(shù)用來打開一個(gè)到系統(tǒng)日志記錄程序的連接,打開之后就可以用syslog或vsyslog函數(shù)向系統(tǒng)日志里添加信息了。
    參數(shù)說明:
    ident:是一個(gè)標(biāo)記,ident所表示的字符串將固定地加在每行日志的前面以標(biāo)識(shí)這個(gè)日志,通常就寫成當(dāng)前程序的名稱以作標(biāo)記。
    option:是下列值取與運(yùn)算的結(jié)果:LOG_CONS, LOG_NDELAY, LOG_NOWAIT, LOG_ODELAY,

LOG_PERROR, LOG_PID,各值意義請(qǐng)參考man openlog手冊(cè):
       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函數(shù)原型如下:
void  closelog(void )
    此函數(shù)就是用來關(guān)閉openlog打開的連接的。
syslog函數(shù)原型如下:    
void  syslog(int priority, const char *format, …);      
    此函數(shù)用于把日志消息發(fā)給系統(tǒng)程序syslogd去記錄。
    參數(shù)說明:
    priority:是消息的緊急級(jí)別;
    format:是消息的格式,之后是格式對(duì)應(yīng)的參數(shù)。就是printf函數(shù)一樣使用。
應(yīng)用:
    如果我們的程序要使用系統(tǒng)日志功能,只需要在程序啟動(dòng)時(shí)使用openlog函數(shù)來連接syslogd程序,后面隨時(shí)用syslog函數(shù)寫日志就行了。
    另外,作為syslog的替代程序的新一代工具是syslog-ng,syslog-ng具有很強(qiáng)的網(wǎng)絡(luò)功能,可以方便地把多臺(tái)機(jī)器上的日志保存到一臺(tái)中心日志服務(wù)器上。

感謝你的閱讀,相信你對(duì)“如何實(shí)現(xiàn)linux下syslog的使用”這一問題有一定的了解,快去動(dòng)手實(shí)踐吧,如果想了解更多相關(guān)知識(shí)點(diǎn),可以關(guān)注億速云網(wǎng)站!小編會(huì)繼續(xù)為大家?guī)砀玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI