自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux日志管理高級進(jìn)階:實(shí)例詳解syslog

原創(chuàng)
運(yùn)維 系統(tǒng)運(yùn)維
syslog已被許多日志函數(shù)采納,它用在許多保護(hù)措施中,任何程序都可以通過syslog記錄事件。syslog可以記錄系統(tǒng)事件,可以寫到一個(gè)文件或設(shè)備中,或給用戶發(fā)送一個(gè)信息。它能記錄本地事件或通過網(wǎng)絡(luò)記錄另一個(gè)主機(jī)上的事件。本文將從配置文件講起,用實(shí)例詳細(xì)介紹syslog。

 【51CTO獨(dú)家特稿】 syslog已被許多日志函數(shù)采納,它用在許多保護(hù)措施中,任何程序都可以通過syslog記錄事件。syslog可以記錄系統(tǒng)事件,可以寫到一個(gè)文件或設(shè)備中,或給用戶發(fā)送一個(gè)信息。它能記錄本地事件或通過網(wǎng)絡(luò)記錄另一個(gè)主機(jī)上的事件。

1、syslog簡介

syslog是一種工業(yè)標(biāo)準(zhǔn)的協(xié)議,可用來記錄設(shè)備的日志。在UNIX系統(tǒng),路由器、交換機(jī)等網(wǎng)絡(luò)設(shè)備中,系統(tǒng)日志(System Log)記錄系統(tǒng)中任何時(shí)間發(fā)生的大小事件。管理者可以通過查看系統(tǒng)記錄,隨時(shí)掌握系統(tǒng)狀況。UNIX的系統(tǒng)日志是通過syslogd這個(gè)進(jìn)程記錄系統(tǒng)有關(guān)事件記錄,也可以記錄應(yīng)用程序運(yùn)作事件。通過適當(dāng)?shù)呐渲?,我們還可以實(shí)現(xiàn)運(yùn)行syslog協(xié)議的機(jī)器間通信,通過分析這些網(wǎng)絡(luò)行為日志,藉以追蹤掌握與設(shè)備和網(wǎng)絡(luò)有關(guān)的狀況。

2、syslog配置文件

syslog設(shè)備依據(jù)兩個(gè)重要的文件:/etc/syslogd守護(hù)進(jìn)程和/etc/syslog.conf配置文件。通常情況下,多數(shù)syslog信息被寫到/var/adm或/var/log目錄下的信息文件中(messages.*)。一個(gè)典型的syslog記錄包括生成程序的名字和一個(gè)文本信息。它還包括一個(gè)設(shè)備和一個(gè)優(yōu)先級范圍。

通過使用syslog.conf文件,可以對生成的日志的位置及其相關(guān)信息進(jìn)行靈活的配置。該配置文件指明了syslogd守護(hù)程序記錄日志的行為,該程序在啟動(dòng)時(shí)查詢配置文件。該文件由不同程序或消息分類的單個(gè)條目組成,每個(gè)占一行。對每類消息提供一個(gè)選擇域和一個(gè)動(dòng)作域。這些域由tab隔開:

  •  選擇域指明消息的類型和優(yōu)先級;
  •  動(dòng)作域指明syslogd接收到一個(gè)與選擇標(biāo)準(zhǔn)相匹配的消息時(shí)所執(zhí)行的動(dòng)作。

syslog.conf行的基本語法是:

消息類型.優(yōu)先級 動(dòng)作域

其中,每個(gè)選擇域是由消息類型和優(yōu)先級組成。當(dāng)指明一個(gè)優(yōu)先級時(shí),syslogd將記錄一個(gè)擁有相同或更高優(yōu)先級的消息。Linux中一些主要的消息類型如表2所示,表3列出了一些優(yōu)先級信息:

表2 syslog消息類型

消息類型 消息來源
kern 內(nèi)核
User 用戶程序
Damon 系統(tǒng)守護(hù)進(jìn)程
Mail 電子郵件系統(tǒng)
Auth 與安全權(quán)限相關(guān)的命令
Lpr 打印機(jī)
News 新聞組信息
Uucp Uucp程序
Cron 記錄當(dāng)前登錄的每個(gè)用戶信息
wtmp 一個(gè)用戶每次登錄進(jìn)入和退出時(shí)間的***記錄
Authpriv 授權(quán)信息

表3 syslog常用優(yōu)先級

優(yōu)先級 描述
emerg ***的緊急程度狀態(tài)
alert 緊急狀態(tài)
Cirt 重要信息
warning 警告
err 臨界狀態(tài)
notice 出現(xiàn)不尋常的事情
info 一般性消息
Debug 調(diào)試級信息
None 不記錄任何日志信息

不同的服務(wù)類型有不同的優(yōu)先級,數(shù)值較大的優(yōu)先級涵蓋數(shù)值較小的優(yōu)先級。如果某個(gè)選擇條件只給出了一個(gè)優(yōu)先級而沒有使用任何優(yōu)先級限定符,對應(yīng)于這個(gè)優(yōu)先級的消息以及所有更緊急的消息類型都將包括在內(nèi)。比如說,如果某個(gè)選擇條件里的優(yōu)先級是“warning”,它實(shí)際上將把“warning”、“err”、“crit”、“alert“和“emerg”都包括在內(nèi)。

syslog允許人們使用三種限定符對優(yōu)先級進(jìn)行修飾:星號(*)、等號(=)和嘆號(!):

  •  星號(*)的含義是把本項(xiàng)服務(wù)生成的所有日志消息都發(fā)送到操作動(dòng)作指定的地點(diǎn)。就像它在規(guī)則表達(dá)式里的作用一樣,星號代表“任何東西”。在前面給出的例子里,“mail.*”將把所有優(yōu)先級的消息都發(fā)送到操作動(dòng)作指定的/var/log/mail文件里。使用“*”限定符與使用“debug”優(yōu)先級的效果完全一樣,后者也將把所有類型的消息發(fā)送到指定地點(diǎn)。
  •  等號(=)的含義是只把本項(xiàng)服務(wù)生成的本優(yōu)先級的日志消息都發(fā)送到操作動(dòng)作指定的地點(diǎn)。比如說,可以用“=”限定符只發(fā)送調(diào)試消息而不發(fā)送其他更緊急的消息(這將為應(yīng)用程序減輕很多負(fù)擔(dān))。當(dāng)你只需要發(fā)送特定優(yōu)先級別的消息時(shí),就要使用等號限定符。
  • 嘆號(!)的含義是把本項(xiàng)服務(wù)生成的所有日志消息都發(fā)送到操作動(dòng)作指定的地點(diǎn),但本優(yōu)先級的消息不包括在內(nèi)。

所以,根據(jù)上面介紹的相關(guān)知識,我們給出如下例子作為示范:

(1)如果指明\"crit\",那所有標(biāo)為crit、alert和emerg的消息將被記錄。每行的行動(dòng)域指明當(dāng)選擇域選擇了一個(gè)給定消息后應(yīng)該把他發(fā)送到哪兒。例如,如果想把所有郵件消息記錄到一個(gè)文件中,如下所示:

#Log all the mail messages in one place
mail.* /var/log/maillog

(2)其他設(shè)備也有自己的日志。UUCP和news設(shè)備能產(chǎn)生許多外部消息。它把這些消息存到自己的日志(/var/log/spooler)中并把級別限為\"err\"或更高。例如:

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

(3)當(dāng)一個(gè)緊急消息到來時(shí),可能想讓所有的用戶都得到。也可能想讓自己的日志接收并保存。

#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn

(4)有時(shí)syslogd將產(chǎn)生大量的消息。例如內(nèi)核(\"kern\"設(shè)備)可能很冗長,用戶很難看得清楚明了,那么用戶可能想把內(nèi)核消息記錄到/dev/console中。下面的例子表明內(nèi)核日志記錄被注釋掉了:

#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console

(5)用戶可以在一行中指明所有的設(shè)備。下面的例子把info或更高級別的消息送到/var/log/messages,除了mail以外。級別\"none\"禁止一個(gè)設(shè)備:

#Log anything(except mail)of level info or higher
#Don\'t log private authentication messages!
*.info:mail.none;autHPriv.none /var/log/messages

#p#

3、syslog進(jìn)程

syslogd守護(hù)程序是由/etc/rc.d/init.d/syslog腳本在運(yùn)行級2下被調(diào)用的,缺省不使用選項(xiàng)。但有兩個(gè)選項(xiàng)-r和-h很有用:

  •  如果將要使用一個(gè)日志服務(wù)器,必須調(diào)用syslogd -r。缺省情況下syslogd不接受來自遠(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)的syslogd。

另外,如果需要重新啟動(dòng)syslog守護(hù)進(jìn)程(/etc/syslog.conf的修改只有在syslog守護(hù)進(jìn)程重新啟動(dòng)后才會(huì)生效),并且只想重新啟動(dòng)syslog守護(hù)進(jìn)程而不是整個(gè)系統(tǒng),在Red Hat Linux機(jī)器上,執(zhí)行以下兩條命令之一即可:

/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart

4、靈活運(yùn)用syslog調(diào)用接口

在實(shí)際的使用過程中,我們可以通過配置文件和查看相應(yīng)的日志文件來使用syslog。然而,在許多應(yīng)用場景下,我們往往需要通過程序產(chǎn)生輸出信息并進(jìn)行記錄,也就是說要把一些信息寫成日志文件,正常情況下運(yùn)行程序的人不用關(guān)心日志里的內(nèi)容,只有在出現(xiàn)問題的時(shí)候才會(huì)查看日志文件里的內(nèi)容以確定問題所在。因此,下面將詳細(xì)介紹如何通過syslog日志系統(tǒng)提供的API調(diào)用接口,來使用程序?qū)崿F(xiàn)對syslog的使用。

1.主要的函數(shù)

在Linux中,提供了四個(gè)有關(guān)syslog日志系統(tǒng)的系統(tǒng)調(diào)用,供用戶使用:

  •  openlog:打開日志設(shè)備,以供讀取和寫入,與文件系統(tǒng)調(diào)用的open類似;
  •  syslog:寫入日志,與文件系統(tǒng)調(diào)用的write類似;
  •  closelog:關(guān)閉日志設(shè)備,與文件系統(tǒng)調(diào)用的close類似;
  •  vsyslog:它和syslog功能一樣,負(fù)責(zé)寫入日志,只是參數(shù)格式不同。

(1)openlog函數(shù)

該函數(shù)的聲明如下:

void openlog(const char *ident, int option, int facility);

此函數(shù)用來打開一個(gè)到系統(tǒng)日志記錄程序的連接,打開之后就可以用syslog或vsyslog函數(shù)向系統(tǒng)日志里添加信息了。而closelog函數(shù)就是用來關(guān)閉此連接的。

openlog的***個(gè)參數(shù)ident是一個(gè)標(biāo)記,ident所表示的字符串將固定地加在每行日志的前面以標(biāo)識這個(gè)日志,通常就寫成當(dāng)前程序的名稱以作標(biāo)記。第二個(gè)參數(shù)option一般是下列選項(xiàng)值取“與”運(yùn)算(使用“|”表示,如“LOG_CONS | LOG_PID”)的結(jié)果:

  •  LOG_CONS:如果送到system logger時(shí)發(fā)生問題,直接寫入系統(tǒng)終端;
  •  LOG_NDELAY:立即開啟連接,通常連接是在***次寫入消息時(shí)才打開的;
  •  LOG_PERROR:將消息也同時(shí)送到stderr設(shè)備;
  •  LOG_PID:將進(jìn)程PID含入所有消息中。

第三個(gè)參數(shù)facility指明記錄日志的程序的類型,它主要具有如下幾類日志類型:

  •  LOG_AUTH :安全/授權(quán)消息
  •  LOG_AUTHPRIV:安全/授權(quán)消息
  •  LOG_CRON:時(shí)間守護(hù)進(jìn)程(cron和at)專用
  •  LOG_DAEMON:其它系統(tǒng)守護(hù)進(jìn)程
  •  LOG_KERN:核心消息
  •  LOG_LOCAL0到LOG_LOCAL7:系統(tǒng)保留
  •  LOG_LPR:printer子系統(tǒng)
  •  LOG_MAIL:mail子系統(tǒng)
  •  LOG_NEWS:USENET新聞子系統(tǒng)
  •  LOG_SYSLOG:syslogd進(jìn)程內(nèi)部所產(chǎn)生的消息
  •  LOG_USER(缺省):一般使用者缺省使用消息
  •  LOG_UUCP:UUCP子系統(tǒng)
  •  LOG_FTP:FTP子系統(tǒng)使用

(2)syslog函數(shù)

syslog函數(shù)的聲明如下:

void syslog(int priority, const char * message, ...);

***個(gè)參數(shù)是消息的緊急級別priority,第二個(gè)參數(shù)是消息及其格式,之后是格式對應(yīng)的參數(shù),如同C語言里面printf輸出函數(shù)一樣使用,具體的格式這里就不再詳述,它不是本書介紹的重點(diǎn)。

這里還需要詳細(xì)介紹一下***個(gè)參數(shù)priority,它是由severity level和facility組成的。Facility已經(jīng)在上面介紹了,下面介紹一下severity level,也就是消息的重要級別,它主要包括:

  •  LOG_EMERG:緊急狀況
  •  LOG_ALERT:高優(yōu)先級問題,比如說數(shù)據(jù)庫崩潰等,必須要立即采取反應(yīng)行動(dòng)
  •  LOG_CRIT:重要狀況發(fā)生,比如硬件故障
  •  LOG_ERR:錯(cuò)誤發(fā)生
  •  LOG_WARNING:警告發(fā)生
  •  LOG_NOTICE:一般狀況,需要引起注意
  •  LOG_INFO:信息狀況
  •  LOG_DEBUG:調(diào)試消息

在實(shí)際使用中,如果我們的程序要使用系統(tǒng)日志功能,只需要在程序啟動(dòng)時(shí)使用openlog函數(shù)來連接syslogd程序,后面隨時(shí)用syslog函數(shù)寫日志就行了。

(3)closelog函數(shù)

相對上述2個(gè)函數(shù)來說,該函數(shù)非常簡單,其聲明如下:

void closelog( void );

值得注意的是,雖然該函數(shù)的使用和調(diào)用情況非常簡單,但是是必不可少的,因?yàn)樵贚inux系統(tǒng)中,打開的日志也是資源,如果只使用openlog函數(shù)打開日志,而忘記使用closelog關(guān)閉日志的話,當(dāng)打開的日志數(shù)量累積到一定程度,便會(huì)造成內(nèi)存不足,從而引起系統(tǒng)問題。所以,提醒用戶在使用中特別注意。

2.一個(gè)實(shí)際的程序調(diào)用例子

下面給出一個(gè)使用上述幾個(gè)函數(shù)寫日志的例子,以供大家參考:

#include
#include
#include
int main(void)
{
int log_test;
/*打開日志*/
openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER);
/*寫日志*/
syslog(LOG_INFO, "PID information, pid=%d", getpid());
syslog(LOG_DEBUG,"debug message ");
/*關(guān)閉日志*/
closelog();
}

 【編輯推薦】

  1. CairoPlot讓Linux服務(wù)器的日志文件更直觀
  2. 日志系統(tǒng) 使Linux管理更輕松
  3. 在Linux系統(tǒng)中安裝系統(tǒng)日志服務(wù)器
  4. 明明白白你的Linux服務(wù)器——日志篇
  5. Linux日志管理五大命令詳解

 

責(zé)任編輯:黃丹 來源: 51CTO.com
相關(guān)推薦

2009-12-14 15:41:58

Linux高級電源管理

2010-09-30 10:06:35

2010-11-19 13:01:31

Oracle日志文件

2021-09-12 07:30:10

配置

2009-11-23 09:54:52

2010-06-22 10:28:04

linux at命令

2010-06-24 16:55:47

Linux chgrp

2012-08-17 09:38:55

日志管理syslogEvtSys

2018-02-07 09:25:50

Linux命令touch

2010-06-18 10:33:03

Linux Acces

2017-08-24 11:54:43

Linux日志定時(shí)輪循機(jī)制

2009-06-08 17:56:00

SpringJDBC事務(wù)

2018-03-09 09:15:16

Linuxsyslog-ng日志

2009-01-06 14:19:39

網(wǎng)絡(luò)管理員

2024-04-07 07:49:05

C#Switch模式匹配

2010-01-05 16:56:28

2013-01-14 16:00:29

Linux系統(tǒng)

2012-05-08 11:01:45

linux守護(hù)進(jìn)程

2013-01-15 15:18:46

Linux守護(hù)進(jìn)程

2010-06-22 13:23:18

Linux at命令詳
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號