Linux日誌管理:實例詳解syslog

 syslog已被許多日誌函數採納,它用在許多保護措施中,任何程序都可以通過syslog記錄事件。syslog可以記錄系統事件,可以寫到一個文件或設備中,或給用戶發送一個信息。它能記錄本地事件或通過網絡記錄另一個主機上的事件。

  1、syslog簡介

  syslog是一種工業標準的協議,可用來記錄設備的日誌。在UNIX系統,路由器、交換機等網絡設備中,系統日誌(System Log)記錄系統中任何時間發生的大小事件。管理者可以通過查看系統記錄,隨時掌握系統狀況。UNIX的系統日誌是通過syslogd這個進程記錄系統有關事件記錄,也可以記錄應用程序運作事件。通過適當的配置,我們還可以實現運行syslog協議的機器間通信,通過分析這些網絡行爲日誌,藉以追蹤掌握與設備和網絡有關的狀況。

  2、syslog配置文件

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

  通過使用syslog.conf文件,可以對生成的日誌的位置及其相關信息進行靈活的配置。該配置文件指明瞭syslogd守護程序記錄日誌的行爲,該程序在啓動時查詢配置文件。該文件由不同程序或消息分類的單個條目組成,每個佔一行。對每類消息提供一個選擇域和一個動作域。這些域由tab隔開:

  選擇域指明消息的類型和優先級;

  動作域指明syslogd接收到一個與選擇標準相匹配的消息時所執行的動作。

  syslog.conf行的基本語法是:

  消息類型.優先級 動作域

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

  表2 syslog消息類型

消息類型 消息來源
kern 內核
User 用戶程序
Damon 系統守護進程
Mail 電子郵件系統
Auth 與安全權限相關的命令
Lpr 打印機
News 新聞組信息
Uucp Uucp程序
Cron 記錄當前登錄的每個用戶信息
wtmp 一個用戶每次登錄進入和退出時間的永久記錄
Authpriv 授權信息

  表3 syslog常用優先級

優先級 描述
emerg 最高的緊急程度狀態
alert 緊急狀態
Cirt 重要信息
warning 警告
err 臨界狀態
notice 出現不尋常的事情
info 一般性消息
Debug 調試級信息
None 不記錄任何日誌信息

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

  syslog允許人們使用三種限定符對優先級進行修飾:星號(*)、等號(=)和歎號(!):

  星號(*)的含義是把本項服務生成的所有日誌消息都發送到操作動作指定的地點。就像它在規則表達式裏的作用一樣,星號代表“任何東西”。在前面給出的例子裏,“mail.*”將把所有優先級的消息都發送到操作動作指定的/var/log/mail文件裏。使用“*”限定符與使用“debug”優先級的效果完全一樣,後者也將把所有類型的消息發送到指定地點。

  等號(=)的含義是隻把本項服務生成的本優先級的日誌消息都發送到操作動作指定的地點。比如說,可以用“=”限定符只發送調試消息而不發送其他更緊急的消息(這將爲應用程序減輕很多負擔)。當你只需要發送特定優先級別的消息時,就要使用等號限定符。

  歎號(!)的含義是把本項服務生成的所有日誌消息都發送到操作動作指定的地點,但本優先級的消息不包括在內。

  所以,根據上面介紹的相關知識,我們給出如下例子作爲示範:

  (1)如果指明\"crit\",那所有標爲crit、alert和emerg的消息將被記錄。每行的行動域指明當選擇域選擇了一個給定消息後應該把他發送到哪兒。例如,如果想把所有郵件消息記錄到一個文件中,如下所示:

  #Log all the mail messages in one place

  mail.* /var/log/maillog(2)其他設備也有自己的日誌。UUCP和news設備能產生許多外部消息。它把這些消息存到自己的日誌(/var/log/spooler)中並把級別限爲\"err\"或更高。例如:

  # Save news errors of level crit and higher in a special file.

  uucp,news.crit /var/log/spooler(3)當一個緊急消息到來時,可能想讓所有的用戶都得到。也可能想讓自己的日誌接收並保存。

  #Everybody gets emergency messages, plus log them on anther machine

  *.emerg *

  *.emerg @linuxaid.com.cn(4)有時syslogd將產生大量的消息。例如內核(\"kern\"設備)可能很冗長,用戶很難看得清楚明瞭,那麼用戶可能想把內核消息記錄到/dev/console中。下面的例子表明內核日誌記錄被註釋掉了:

  #Log all kernel messages to the console

  #Logging much else clutters up the screen

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

  #Log anything(except mail)of level info or higher

  #Don\'t log private authentication messages!

  *.info:mail.none;autHPriv.none /var/log/messages

 

3、syslog進程

  syslogd守護程序是由/etc/rc.d/init.d/syslog腳本在運行級2下被調用的,缺省不使用選項。但有兩個選項-r和-h很有用:

  如果將要使用一個日誌服務器,必須調用syslogd -r。缺省情況下syslogd不接受來自遠程系統的信息。當指定-r選項,syslogd將會監聽從514端口上進來的UDP包。

  如果還希望日誌服務器能傳送日誌信息,可以使用-h標誌。缺省時,syslogd將忽略使其從一個遠程系統傳送日誌信息到另一個系統的syslogd。

  另外,如果需要重新啓動syslog守護進程(/etc/syslog.conf的修改只有在syslog守護進程重新啓動後纔會生效),並且只想重新啓動syslog守護進程而不是整個系統,在Red Hat Linux機器上,執行以下兩條命令之一即可:

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

  /etc/rc.d/init.d/syslogrestart



實驗示例(日誌服務器搭建):

 
運行環境:redhat
 
日誌服務器的地址:172.16.58.1
 
客戶機的地址: 172.16.88.1
 
注意:在搭建服務器之前請確保服務器的防火牆關閉,可以利用:service iptable stop
 
1.首先修改日誌服務器(172.16.58.1)的配置文件,讓其接收其他主機產生的日誌:
 
(1)用vim編輯 /etc/sysconfig/syslog文件
 
將SYSLOGD_OPTIONS="-m 0"修改爲 SYSLOGD_OPTIONS="-m 0 -r"
 
(2)重新啓動服務:service syslog restart
 
2.修改客戶機(172.16.88.1)上的配置文件
 
(1)vim /etc/syslog.conf將*.info;mail.none;authpriv.none;cron.none /var/log/messages
 
一行中的/var/log/messages修改爲: @172.16.58.1
 
(2)重新讀取一下配置文件:service syslog reload
 
這樣一個簡單的日誌服務器就搭建起來了,當172.16.88.1進行各種操作的時候在日誌服務器(172.16.58.1)的/var/log/messages文件中均有記錄,例如:當172.16.88.1進行關機或開機操作的時候,在文件/var/log/messages中均有記錄。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章