| 導(dǎo)讀 | Syslog服務(wù)器可以用作一個網(wǎng)絡(luò)中的日志監(jiān)控中心,所有能夠通過網(wǎng)絡(luò)來發(fā)送日志的設(shè)施(包含了linux或Windows服務(wù)器,路由器,交換機(jī)以及其他主機(jī))都可以把日志發(fā)送給它。 通過設(shè)置一個syslog服務(wù)器,可以將不同設(shè)施/主機(jī)發(fā)送的日志,過濾和合并到一個獨(dú)立的位置,這樣使得你更容易地查看和獲取重要的日志消息。 |
Rsyslog 作為標(biāo)準(zhǔn)的syslog守護(hù)進(jìn)程,預(yù)裝在了大多數(shù)的Linux發(fā)行版中。在客戶端/服務(wù)器架構(gòu)的配置下,rsyslog同時扮演了兩種角色:1.作為一個syslog服務(wù)器,rsyslog可以收集來自其他設(shè)施的日志信息;2.作為一個syslog客戶端,rsyslog可以將其內(nèi)部的日志信息傳輸?shù)竭h(yuǎn)程的syslog服務(wù)器。
在此,我們演示了在linux上如何通過rsyslog來配置一個中心化syslog服務(wù)器。 在進(jìn)入詳解之前,先溫習(xí)一下syslog標(biāo)準(zhǔn)。
syslog標(biāo)準(zhǔn)基礎(chǔ)當(dāng)通過syslog機(jī)制來收集日志時,有3個必須要考慮到的重要事情:?設(shè)施層級: 監(jiān)聽何種類型的進(jìn)程?嚴(yán)重性 (優(yōu)先) 級別: 收集何種級別的日志消息?目標(biāo): 發(fā)送或記錄日志消息到何處
現(xiàn)在我們更加深入地了解一下配置是如何定義的。
設(shè)施層級定義了一種用來對內(nèi)部系統(tǒng)進(jìn)程進(jìn)行分類的方法,linux中的一些常見的設(shè)施包括:?auth: 身份驗證相關(guān)的消息(登錄時)?cron: 進(jìn)程或應(yīng)用調(diào)度相關(guān)的消息?daemon: 守護(hù)進(jìn)程相關(guān)的消息(內(nèi)部服務(wù)器)?kernel: 內(nèi)核相關(guān)的消息?mail: 內(nèi)部郵件服務(wù)器相關(guān)的消息?syslog: syslog 守護(hù)進(jìn)程本身相關(guān)的消息?lPR: 打印服務(wù)相關(guān)的消息?local0 - local7: 用戶自定義的消息 (local7 通常被Cisco 和 Windows 服務(wù)器 使用)
嚴(yán)重性(優(yōu)先)級別有固定的標(biāo)準(zhǔn)縮寫和指代的值,其中的數(shù)字7具有最高的級別,這些級別包含了:?emerg: Emergency(緊急)- 0?alert: Alerts (報警)- 1?crit: Critical (關(guān)鍵)- 2?err: Errors (錯誤)- 3?warn: Warnings (警告)- 4?notice: Notification (通知)- 5?info: Information (消息)- 6?debug: Debugging (調(diào)試)- 7
最后,目標(biāo)語句會讓一個syslog客戶端來執(zhí)行以下三個任務(wù)之一:1.保存日志消息到一個本地文件;2.通過TCP/UDP將消息路由到遠(yuǎn)程的syslog服務(wù)器中;3.將其發(fā)送到一個標(biāo)準(zhǔn)輸出中,例如控制臺。
在 rsyslog里, syslog的配置是基于以下模式進(jìn)行結(jié)構(gòu)化的。
1.[facility-level].[severity-level] [destination]在Linux中配置Rsyslog在我們理解syslog之后,現(xiàn)在可以通過rsyslog來將一個Linux服務(wù)器配置為一個中心syslog服務(wù)器了,另外我們也將看到如何在一個Windows的系統(tǒng)上配置一個syslog客戶端來發(fā)送內(nèi)部日志到該syslog服務(wù)器中。
第1步: 初始化系統(tǒng)需求要將linux主機(jī)設(shè)置為一個中央日志服務(wù)器, 我們需要創(chuàng)建一個分離的 /var 分區(qū),并分配足夠大的磁盤空間或者創(chuàng)建一個特殊的LVM卷組。這樣就會使得syslog服務(wù)器能夠承擔(dān)在日積月累收集日志所帶來的潛在增長。
第2步: 讓rsyslog 后臺進(jìn)程生效rsyslog守護(hù)進(jìn)程來自于當(dāng)前的linux發(fā)布版本的預(yù)裝模塊,但是默認(rèn)并沒有啟動。為了能夠讓rsyslog守護(hù)進(jìn)程能夠接受外部的消息,需要編輯其配置文件/etc/rsyslog.conf.
打開文件進(jìn)行編輯,查找到下面的兩行所在的位置,通過刪除其行首的#字符來取消注釋。
1.$ModLoad imudp2.$UDPServerRun 514這會使得rsysolog守護(hù)進(jìn)程能夠在UDP端口514上接受日志消息了---UDP是一種比TCP速度快,但是并不具有TCP一樣的數(shù)據(jù)流的可靠性。所以如果你需要使用可靠的傳送機(jī)制,就可以通過取消以下行的注釋。
1.$ModLoad imtcp2.$InputTCPServerRun 514需要注意的是,TCP和UDP可以被同時生效來監(jiān)聽TCP/UDP 連接。
第3步:創(chuàng)建日志接收模板接下來的這步,需要我們來為遠(yuǎn)程消息創(chuàng)建模板,并告知rsyslog守護(hù)進(jìn)程如何記錄從其他客戶端機(jī)器所接受到的消息。
使用文本編輯器來打開 /etc/rsyslog.conf,然后在GLOBAL DIRECTIVE塊前追加以下的模板。
1.$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *2.*.* ?RemoteLogs3.& ~在此對該模板進(jìn)行簡單解釋,$template RemoteLogs(這里“RemoteLogs” 字符串可以為任何其他的描述性的名稱)指令使rsyslog后臺進(jìn)程將日志消息寫到/var/log下的單獨(dú)的本地日志文件中,其中日志文件的名稱是基于遠(yuǎn)程日志發(fā)送機(jī)器的主機(jī)名以及生成該日志的應(yīng)用程序名進(jìn)行定義的。其中第二行暗示了我們將RemoteLogs模板應(yīng)用到所有接收到的日志上。
符號"& ~"表示了一個重定向規(guī)則,被用來告知rsyslog守護(hù)進(jìn)程停止對日志消息的進(jìn)一步處理,并且不要在本地寫入。如果沒有使用該重定向規(guī)則,那么所有的遠(yuǎn)程消息都會在寫入上述描述的日志文件之外同時被寫入到本地日志文件,這就意味著日志消息實際上被寫了兩次。使用該規(guī)則的另外一個結(jié)果就是syslog服務(wù)器本身的日志消息只會被以該機(jī)器主機(jī)名命名的專有文件中。
如果你想要的話,也可以使用下面的模式對特定的設(shè)備或嚴(yán)重性級別使用新的模板直接來記錄日志消息。
1.[facility-level].[severity-level] ?RemoteLogs例如:
將全部優(yōu)先級別的所有內(nèi)部用戶驗證消息指定為RemoteLogs模板:
1.authpriv.* ?RemoteLogs將所有系統(tǒng)進(jìn)程中除開mail、用戶驗證和cron消息之外的進(jìn)程產(chǎn)生的消息級別的日志指定為RemoteLogs模板:
1.*.info,mail.none,authpriv.none,cron.none ?RemoteLogs如果我們想要將所有從遠(yuǎn)程客戶端接受到的消息寫入到一個以它們的ip地址命名的單個文件中,可以使用以下的模板。在此我們?yōu)樵撃0遒x予了“IpTemplate”名稱。
1.$template IpTemplate,"/var/log/%FROMHOST-IP%.log" 2.*.* ?IpTemplate 3.& ~在我們啟用rsyslog守護(hù)進(jìn)程并編輯好配置文件之后,需要重啟該守護(hù)進(jìn)程。
在 Debian,Ubuntu 或 CentOS/RHEL 6中:
1.$ sudo service rsyslog restart在 Fedora 或 CentOS/RHEL 7中:
1.$ sudo systemctl restart rsyslog我們可以通過netstat命令來驗證rsyslog守護(hù)進(jìn)程是否正常工作。
1. $ sudo netstat -tulpn | grep rsyslog在UDP監(jiān)聽端口下工作的rsyslog守護(hù)進(jìn)程會有類似下面的輸出。
1.udp 0 0 0.0.0.0:514 0.0.0.0:* 551/rsyslogd 2.udp6 0 0 :::514 :::* 551/rsyslogd如果rsyslog守護(hù)進(jìn)程被設(shè)置在TCP連接端口,那么應(yīng)該有類似下面所示的輸出。
1.tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1891/rsyslogd 2.tcp6 0 0 :::514 :::* LISTEN 1891/rsyslogd發(fā)送Windows日志到一個遠(yuǎn)程的rsyslog服務(wù)器要將一個Windows客戶端的日志消息轉(zhuǎn)發(fā)到我們的rsyslog服務(wù)器,需要一個安裝 Windows syslog 代理。當(dāng)然,有許多的syslog代理可以在windows上運(yùn)行,在此我們可以使用一個自由軟件程序 Datagram SyslogAgent.
在下載安裝該syslog代理后,需要將其配置為作為服務(wù)運(yùn)行。指定使用何種協(xié)議來發(fā)送數(shù)據(jù),以及遠(yuǎn)程rsyslog服務(wù)器的IP地址和端口,最后指定應(yīng)該傳輸?shù)氖录罩绢愋停缦滤尽?/p>
在我們完成所有的這些配置之后,我們就可以啟動該服務(wù)并且在中央rsyslog服務(wù)器中使用命令行工具tail -f來查看日志文件了。
總結(jié)通過創(chuàng)建一個可以收集本地和遠(yuǎn)程主機(jī)的中央rsyslog服務(wù)器,我們可以更好地了解在這些系統(tǒng)內(nèi)部究竟發(fā)生著什么,而且可以更加容易地調(diào)試它們的問題,是否在它們之間有任何延遲或崩潰存在。
本文原創(chuàng)地址:http://www.linuxprobe.com/linux-sys-log.html
免費(fèi)提供最新Linux技術(shù)教程書籍,為開源技術(shù)愛好者努力做得更多更好:http://www.linuxprobe.com/thread
新聞熱點
疑難解答
圖片精選