日志相當於日記,記錄每天發生的大事,而對於計算機來說,操作系統中會產生很多信息,這些信息即是我們觀察系統運行當中正常狀況的一種途徑,同時也為我們提供了當系統發生故障的時候定位問題所在的必要信息, 實際上任何操作系統都提供了強大的日志系統用於記錄各子系統運行當中所產生的各種信息。對於在線上運行的服務器而言應該合理的處理及管理。下面就來了解一下在linux系統中用來管理日志的兩種日志服務器:syslog、syslog-ng。
一、深入syslog
1、 syslog簡介
在紅帽5上使用的是syslog,syslog是一個服務專門提供負責記錄日志功能的系統日志,其配置文件是/etc/syslog.conf;
syslog包含兩個進程:syslogd,klogd;
syslogd進程專門負責記錄非內核產生的日志信息;
klogd進程是專門負責記錄內核產生的日志信息;
這兩個進程共用一個配置文件:/etc/syslog.conf;
為什麼會把syslog分為兩個進程呢?由於klogd記錄的日志詳細程度與syslogd有著巨大不同,這兩個進程所產生的日志格式太大,因此把這兩個各自為獨立的日志進程;
在init.d程序中最後才會啟動終端,在這些終端啟動之前信息記錄在物理終端(/dev/console),通過我們的虛擬終端可以查看到這些信息, kernel在初始化之前會探測各種硬件,比如cpu類型、主板類型都會顯示出來,如果想要看看硬件類型、二級緩存、三級緩存都存放在什麼地方,當系統啟動完成之後就會由klogd進程記錄控制並把這些內容記錄在/var/log/dmesg中,可以使用下面兩個命令查看/var/log/dmesg中的內容;
#dmesg (裡面記錄的是啟動init.d程序之前的內容)
#cat /var/log/dmesg
上面是由klogd記錄並把信息放到/var/log/dmesg中,一旦控制權由內核轉交給/sbin/init後所產生的日志就會由syslogd記錄,記錄的信息存放到下面三個常用的文件中;
/var/log/messages:屬於系統標准錯誤日志信息,大多數子系統產生的錯誤信息都放在這個文件中。同時還會記錄非內核產生引導信息,隨著日積月累這個文件會變的越來越大,為了避免文件系統變得過大導致系統讀取日志不穩定,在系統中設置了日志信息滾動(也被稱為日志切割) 即logrotate程序,配置文件為/etc/logrotate.conf;
/var/log/maillog:存放由郵件系統產生的日志信息;
/var/log/secure:存放與安全有關的日志信息,裡面記錄了用戶正確或錯誤登錄系統的詳細的私密信息,只有管理員才能查看;
2、 分析syslog配置文件定義格式
-------------------------------------------------------- 配置文件定義格式為: facility.priority action facility,可以理解為日志的來源或設備目前常用的facility有以下幾種: auth # 認證相關的 authpriv # 權限,授權相關的 cron # 任務計劃相關的 daemon # 守護進程相關的 比如:httpd 工作在後台的 kern # 內核相關的 lpr # 打印相關的 mail # 郵件相關的 mark # 標記相關的 news # 新聞相關的 security # 安全相關的,與auth 類似 syslog # syslog自己的 user # 用戶相關的 uucp # unix to unix cp 相關的 local0 到 local7 # 用戶自定義使用 * # *表示所有的facility 因此syslog支持的facility就是上面幾個,這幾個幾乎包含了所有子系統的日志來源 ------------------------------------------------------- --------------------------------------------------------- priority(log level)日志的級別,一般有以下幾種級別(從低到高) debug # 程序或系統的調試信息【級別越低,記錄的日志越詳細,同時會導致硬盤工作超負荷】 info # 一般信息 notice # 不影響正常功能,需要注意的消息 warning/warn # 可能影響系統功能,需要提醒用戶的重要事件 err/error # 錯誤信息 crit # 比較嚴重的 【相當於發出藍色警報】 alert # 必須馬上處理的 【相當於發出橙色警報】 emerg/panic # 會導致系統不可用的 【相當於發出紅色警報】 * # 表示所有的日志級別 none # 跟* 相反,表示什麼也不記錄 -------------------------------------------------------- ------------------------------------------------------ action(動作)日志記錄的位置 系統上的絕對路徑 # 普通文件 如: /var/log/xxx | # 管道 通過管道送給其他的命令處理 終端 # 終端 如:/dev/console @HOST # 遠程主機 如: @10.0.0.1 用戶 # 系統用戶 如: root * # 登錄到系統上的所有用戶,一般emerg級別的日志是這樣定義的 -------------------------------------------------------- --------------------------------------------------------- 定義格式例子: mail.info /var/log/mail.log # 表示將mail相關的,級別為info及info以上的級別記錄到/var/log/mail.log文件中 # info以上級別的信息記錄到/var/log/mail.log文件中 auth.=info @172.16.0.1 # 表示將auth相關的,只把info的信息記錄到172.16.0.1主機上 # 前提是172.16.0.1要能接收其他主機發來的日志信息 user.!=error # 表示記錄與用戶相關的,除了error級別的之外的日志信息 user.!error # 表示記錄與用戶相關的,比error級別低的日志信息 *.info # 表示記錄所有的日志信息的info和info以上級別的日志信息 mail.* # 表示記錄郵件相關的所有級別的日志信息 *.* # 表示記錄所有的日志信息的所有級別的日志信息 cron.info;mail.info # 表示記錄cron和mail相關的info級別的日志信息,多個日志來源可以用";" 隔開 cron,mail.info # 與cron.info;mail.info 是一個意思 mail.*;mail.!=info # 表示記錄mail相關的所有級別的信息,但是不包括info級別的 ---------------------------------------------------------
3、 分析/etc/logrotate.conf配置文件
--------------------------------------------------------- # see "man logrotate" for details # rotate log files weekly weekly ---定義每周更新一次日志文件 # keep 4 weeks worth of backlogs rotate 4 ---定義保留4個版本,超出這個版本數就會被清除 ---比如:messages messages.1 messages.2 messages.3 messages.4 # create new (empty) log files after rotating old ones create ---滾動完成之後,生成新的一個空的日志文件 # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d ---日志文件同時還依賴於這個文件,在/etc/logrotate.d中每個文件定義一個子系統的日志滾動機制 # no packages own wtmp -- we'll rotate them here /var/log/wtmp { ---指定一個日志文件 monthly --按月滾動,如果全局定義了滾動時間,這個日志文件也定義了滾動時間,就以這個日志文件為主,如果全局定義了滾動時間,日志文件沒定義滾動時間,就以全局為主 minsize 1M ---最小為1M create 0664 root utmp ---創建一個新的文件,權限為0664,屬主為root,日志文件名為utmp rotate 1 ---保留1個歷史版本 } /var/log/btmp { missingok monthly minsize 1M create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here. ---------------------------------------------------------
4、 分析/etc/syslog.conf配置文件
------------------------------------------------------- # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages ---除了mail,authpriv,cron之外所有facility產生的info以及info以上的級別都放在/var/llog/messages # The authpriv file has restricted access. authpriv.* /var/log/secure ---跟用戶授權相關的所有級別都記錄在/var/log/secure文件中 # Log all the mail messages in one place. mail.* -/var/log/maillog ---跟郵件相關的所有級別都記錄在/var/log/maillog文件中,此處的“-”表示異步寫入,不會同時寫入到磁盤上去 # Log cron stuff cron.* /var/log/cron ---跟cron相關的所有級別都記錄在/var/log/cron文件中 # Everybody gets emergency messages *.emerg * ---表示記錄所有的日志信息的emerg以上的級別通知在線的每一個用戶趕緊保存文件,電腦要掛了(相當於向每一個用戶發出紅色警報) # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler ---表示與uucp和news相關的crit和crit以上級別記錄在/var/log/spooler文件中 # Save boot messages also to boot.log local7.* /var/log/boot.log ---用戶自定義的跟引導相關的所有級別都記錄在/var/log/boot.log文件中 同時我們也可以在/etc/syslog.conf中定義,定義後不會立即生效 service syslog restart【使用restart時,會影響其他日志系統正在向syslog發送信息,一般不建議重啟】 service syslog reload【使用reload時,不用讓服務重啟就能讀取配置文件並同時生效,相當於1信號】 ---------------------------------------------------------
如果想讓自己的主機作為日志服務器,只需要在/etc/sysconfig/syslog配置文件中SYSLOGD.OPTIONS一項有-r選項並重啟服務即可;在另外一台主機上,通過修 改/etc/syslog.conf配置文件中mail.*後的日志位置為你所定義的日志服務器ip地址上,就可以實現遠程日志,這個操作很簡單,大家可以去嘗試一下。
二、syslog-ng
syslog-ng(syslog next generation)顧名思義是syslog的升級版,也可稱為syslog的下一代;syslog-ng有兩個版本:一個是開源的(免費的),另一個是收費的。在紅帽6上使用的是syslog-ng日志系統;由於我們平時只是在紅帽5上進行日志系統操作,我把重點放在了syslog日志系統的分析上,對於syslog-ng就不做詳細分析了。請大家見諒!
本文出自 “奮斗的小鳥” 博客,請務必保留此出處http://luowenjing.blog.51cto.com/6627118/1167839