首頁 > 軟體

Linux作業系統中的紀錄檔系統

2020-06-16 18:02:41

紀錄檔系統將我們系統執行的每一個狀況資訊都使用文字記錄下來,這些資訊有助我們觀察系統執行過程中正常狀態和系統執行錯誤時快速定位錯誤位置的途徑等;下面主要概述一下Linux作業系統中的紀錄檔功能。

每個作業系統中都有自己的強大的紀錄檔功能,windows有,而linux同樣也有;linux作業系統中的紀錄檔功能主要通過服務syslog來實現(RedHat6.0以後使用的是syslog-ng),而syslog服務下有兩個進程syslogd和klogd,這兩個進程一個用來記錄系統紀錄檔資訊,一個用來記錄核心紀錄檔資訊;但是作業系統在執行中會產生非常多的紀錄檔資訊,如果我們將這些資訊都記錄下來的話,那我們的磁碟I/O一定很繁忙,這對系統的效能有很大的影響,這就有違了我們的初衷,所以我們根據產生紀錄檔的來源和紀錄檔資訊的重要性,將系統執行中所產生的紀錄檔進行分類;syslogd和klogd兩個進程所記錄的紀錄檔資訊和詳細程度又各有不同:

Klogd:記錄了系統初始化時所產生並顯示在物理終端上的資訊,並儲存在”/var/log/dmesg”檔案中,我們可以使用“cat /var/log/dmesg”進行檢視,也可以使用專門的命令“dmesg”進行檢視

Syslogd:在系統初始化完成,將系統控制權轉交給init,此時產生的紀錄檔資訊都有syslogd記錄,並存放在“/var/log/messages”檔案中,主要儲存的資訊有“系統標準錯誤紀錄檔資訊,非核心產生的引導資訊,各個服務程式的子系統產生的資訊等等”;在監控系統執行時一般使用“# tail -f /var/log/messages”來監控新生成的紀錄檔資訊

但是系統執行中所產生的資訊非常多,即使只記錄這些資訊,也有很大量;此時如果我們仍然將所有紀錄檔資訊都儲存在一個messages檔案中,那麼管理起來就非常困難了;那這怎麼辦呢?我們引進了另外一種技術“紀錄檔卷動”

紀錄檔卷動:當紀錄檔messages檔案大小或時間到一定程度之後,將這個檔案定義為messages.1,並重新建立一個新的messages檔案,此時messages.1不再記錄新的內容,只是存放以前的內容,如果新的messages檔案再次達到這個標準之後,現在這個messages檔案重新命名為messages.1,原有的messages.1命名為messages.2,這樣依次類推;但是這樣一直捲動下去,很久以前的紀錄檔資訊對我們現在管理已經沒有很大用處了,所以我們可以定義只保留捲動多少次的紀錄檔檔案;所以紀錄檔資訊我們應該經常捲動,且一般定義多個標準

紀錄檔的捲動就是將這個紀錄檔檔案進行切割,在redhat上有一個專門的命令可以完成這個動作:logrotate;系統上有一個專門的系統任務計劃來完成紀錄檔切割“/etc/cron.daily”下有一個指令碼叫做logrotate,這個命令的組態檔在“etc/logrotate.conf”下(定義了系統的紀錄檔卷動機制)

內容格式是:

weekly    #全域性定義每週捲動一次

rotate 4    #只保留四個捲動版本

include /etc/logrotate.d    #上面幾行是紀錄檔系統全域性屬性,下面是各個小系統的具體屬性,執行時以區域性屬性為準;區域性紀錄檔屬性可定義多個

/var/log/wtmp {    #定義這個子系統自己的紀錄檔卷動機制,紀錄檔存放檔案

monthly    #多長時間捲動一個

minsize 1M    #紀錄檔檔案最小1M

create 0664 root utmp    #建立一個檔案,許可權是0664,屬主是root,檔名是utmp

rotate 1    #只保留一個捲動版本

}

紀錄檔卷動的指令碼檔案:# vim /etc/cron.daily/logrotate

如果不自己定義,則按照全域性定義的紀錄檔卷動屬性,也可以在“/etc/logrotate.d/cups”檔案下定義:

一些其他子系統產生的紀錄檔資訊儲存位置:

/var/maillog    #郵件系統產生的紀錄檔資訊

/var/log/secure  #每個使用者在登入時所產生的安全資訊(什麼時間誰以哪個使用者來自哪個主機嘗試登入,嘗試了幾次,這個檔案經常檢視)

syslog的組態檔在:/etc/syslog.conf

這個組態檔格式是:每一行都定義一個子系統產生的哪些級別的紀錄檔記錄到什麼位置

facility.priority  action

Facility:紀錄檔來源

auth        #認證子系統產生的

authpriv      #許可權授權子系統產生的

cron        #任務計劃子系統產生的

daemon      #守護行程子系統產生的

kern        #核心子系統產生的,定義klogd的記錄內容

lpr          #列印子系統產生的

mail        #郵件子系統產生的

mark        #標記子系統產生的

news        #新聞子系統產生的

security      #安全子系統產生的,與auth來源類似

syslog      #定義syslog自己的要記錄的

user        #使用者子系統所產生的的

uucp        #Unix to unix cp子系統所產生的

local0-->local7  #使用者自定義使用

*            #所有來源

Priority(log level)紀錄檔級別:(級別越低記錄的越詳細)

debug          #程式或系統的偵錯資訊(記錄非常詳細,一般只在系統無法啟動,排除錯誤時使用)

info          #一般資訊

notice        #不影響系統正常功能,但需要注意的資訊

warning/warn  #可能影響系統功能,需要提醒使用者注意的重要事件;這種資訊可能會引起部分功能的執行

err/error      #錯誤資訊,已經影響系統部分功能;藍色警報

crit          #比較嚴重的資訊;橙色警報

alert          #必須馬上處理的資訊;紅色警報

emerg/panic    #導致系統不可用的資訊;一般這一刻出現,下一刻系統就會down掉

*              #所有紀錄檔級別,類似debug

none          #和*相反,表示哪個級別都沒有

Action(動作)指定紀錄檔記錄的位置:

系統上的絕對路徑    #普通檔案,如/var/log/***

|                  #通過管道送給其他命令處理

終端          #顯示在哪個終端(物理終端,虛擬終端,偽終端等等)

@HOST                #遠端主機;產生的紀錄檔資訊,自己不記錄,而傳送給其他主機記錄,一般用於紀錄檔伺服器,可以增強當前伺服器的安全;預設情況下只為自己記錄紀錄檔資訊

【如果要使得我們的伺服器稱為紀錄檔伺服器,只需在“/etc/sysconfig/syslog”檔案中的"SYSLOGD_OPTIONS="-r -m 0""這一行中新增一個“-r”選項,重新啟動服務即可開啟紀錄檔伺服器功能】

使用者                #產生的紀錄檔資訊都傳送給某個使用者,如root

*                  #登入到系統上的所有使用者,一般emerg級別的紀錄檔是這樣定義的

syslog紀錄檔服務屬性定義範例:

mail.info  /var/log/maillog  #將mail相關的級別為info及info以上級別的資訊記錄到/var/log/maillog檔案中

auth.=info  @10.0.0.1  #將auth相關的info級別的資訊記錄到10.0.0.1主機上,前提是10.0.0.1主機能夠接收到其他主機發來的紀錄檔資訊(此時只記錄info級別)

user.!=error        #記錄與user相關的,但不記錄error級別的資訊,只記錄其他所有級別

user.!error          #與user.error相反,此時只記錄比error級別低的紀錄檔資訊

*.info              #記錄所有可能產生紀錄檔子系統的info級別及其以上級別的紀錄檔資訊

mail.*              #記錄與mail所產生的所有級別的紀錄檔資訊

*.*                  #記錄所有紀錄檔資訊

cron.info;mail.info  #記錄cron相關的info及以上級別的紀錄檔資訊和mail相關的info和以上級別的紀錄檔資訊,多個紀錄檔來源之間以“;”分號隔開

cron,mail.info      #和上邊是一個意思,如果兩個紀錄檔來源的記錄級別相同,可以縮寫,來源之間以“,”逗號隔開

mail.*;mail.!=info  #記錄與mail相關的所有級別的紀錄檔資訊,但不包括info級別的所有資訊

Syslog的預設組態檔定義解釋:

# cat /etc/syslog.conf

*.info;mail.none;authpriv.none;cron.none  /var/log/messages  #所有可能產生紀錄檔資訊的子系統的info級別及以上級別的紀錄檔資訊,都儲存在messages檔案中,但是不包括mail,authpriv,cron子系統的

authpriv.*  /var/log/secure  #所有使用者授權的紀錄檔資訊都記錄到secure檔案中

mail.*  -/var/log/maillog  #所有郵件子系統產生的紀錄檔資訊都非同步儲存在maillog檔案中,“-”表示非同步寫入,其他紀錄檔資訊都要同步寫入

cron.*  /var/log/cron  #所有任務計劃的紀錄檔資訊都記錄到cron檔案中

*.emerg  *  #無論系統上哪個程式產生emerg級別的資訊,都立即通知給系統上的所有使用者,馬上就要down機了

uucp,new.crit  /var/log/spooler  #來自uucp和new子系統的crit級別的資訊都儲存在spooler檔案中

local7.*  /var/log/boot.log  #自己定義的紀錄檔記錄,此處系統預設定義的是系統引導資訊,儲存在boot.log檔案中;但此處並沒有定義誰向這個檔案中填寫,所以這個檔案是空檔案,我們需要在其他檔案中定義這個紀錄檔資訊要傳送到local7中,才會寫到boot.log檔案中,一般意義不??

這個檔案儲存之後紀錄檔系統組態檔並不會立即生效,此時如果我們使用“service syslog restart”命令來重新啟動紀錄檔服務,可能會使得其他一些正在記錄紀錄檔資訊的子系統不能完整的記錄,所以我們一般使用“service syslog reload”來重讀組態檔,並生效,相當與傳送1號信號。

在 Linux 上設定一個 syslog 伺服器  http://www.linuxidc.com/Linux/2015-03/114802.htm

syslog使用介紹  http://www.linuxidc.com/Linux/2014-12/110892.htm

在chroot環境下將MySQL紀錄檔輸出到syslog  http://www.linuxidc.com/Linux/2014-09/106130.htm

syslog分類設定  http://www.linuxidc.com/Linux/2013-12/93854.htm

Linux系統入門學習:Linux中的syslog  http://www.linuxidc.com/Linux/2015-04/115851.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-04/116005.htm


IT145.com E-mail:sddin#qq.com