歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux操作系統中的日志系統

Linux操作系統中的日志系統

日期:2017/2/28 14:02:45   编辑:Linux教程

日志系統將我們系統運行的每一個狀況信息都使用文字記錄下來,這些信息有助我們觀察系統運行過程中正常狀態和系統運行錯誤時快速定位錯誤位置的途徑等;下面主要概述一下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

Copyright © Linux教程網 All Rights Reserved