歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> RHEL7.0 日志系統

RHEL7.0 日志系統

日期:2017/2/28 13:54:56   编辑:Linux教程

此文章是我學習RHCE7.0時所記筆記,希望能夠對大家有所幫助

系統日志架構

系統日志

進程和操作系統內核需要能夠未發生的時間記日志。這些日志可用於系統審核和問題的故障排除。依照慣例,這些日志永久存儲在 /var/log 目錄中

RHEL7中的日志系統
紅帽企業Linux 中內建了一個基於系統日志協議的標准日志記錄系統。許多程序使用此系統記錄事件,並將它們整理到日志文件中。Red Hat Enterprise Linux 7 中的系統日志消息由兩個服務負責處理,他們是systemd-journald和rsyslog。

systemd-journald 守護進程提供一種改進的日志管理服務,可以收集來自內核,啟動過程的早期階段,標准輸出,系統日志,以及守護進程啟動和運行期間的錯誤的消息。它將這些消息寫到一個結構化的事件日志中,默認情況下不在重新啟動之間保留。這允許系統日志所錯過的系統日志消息和時間收集到一個中央數據庫中。系統消息可以由systemd-journald 轉發到 rsyslog 以做進一步處理。
rsyslog 服務隨後根據類型(或設備)和優先級排列系統日志消息,將他們寫入到 /var/log 目錄內的永久文件中。

/var/log 目錄保管由rsyslog維護的各種特定於系統和服務的日志文件。

系統日志文件概述
日志文件用途
/var/log/messages大多數系統日志消息記錄在此。例外是與身份驗證,電子郵件處理相關的定期運行作業的消息以及純粹與調試相關的信息。
/var/log/secure安全和身份驗證相關的消息和錯誤的日志文件。
/var/log/maillog與郵件服務器相關的日志文件。
/var/log/boot.log與系統啟動相關的消息記錄在此。

系統日志文件
許多程序使用syslog協議將時間記錄到系統。每一日志消息根據設備(消息的類型)和優先級(消息的嚴重性)分類。可用的設備在rsyslog.conf(5) man page 中予以概述。

八個優先級按照如下所述進行了標准化和評級
編碼優先級嚴重性
0 emerg 系統不可用。
1 alert 必須立即采取措施。
2 crit 嚴重狀況。
3 err 非常嚴重錯誤狀況。
4 warning 警告狀況。
5 notice 正常但重要的事件。
6 info 信息性事件。
7 debug 調試級別消息。

rsyslogd 服務使用日志消息的設備和優先級來確定如何進行處理。這通過/etc/rsyslog.conf文件,以及/etc/rsyslog.d中*.conf文件進行配置。程序和管理員可以將帶有.conf後綴的自定義文件放入/etc/rsyslog.d目錄,以更改rsyslogd配置而不被rsyslog更新所覆蓋。

/etc/rsyslog.conf中 #####RULES######部分包定義日志消息保存位置的相關指令。每行左側表示與指令匹配的日志消息的設備和嚴重性。rsyslog.conf 文件的設備和嚴重性字段中可能包含*字符作為通配符,代表所有設備和所有嚴重性級別。每行右側表示要將日志消息保存的文件。日志消息通常保存在/var/log目錄中的文件中。

日志文件由rsyslog服務維護,/var/log 目錄中包含各種特定於某些服務的日志文件。
例如 Apache Web 服務器或者Samba將自己的日志文件寫入到/var/log目錄中對應的子目錄中。

rsyslog 處理的消息可能會出現在多個不同日志文件中,為了避免這種情況,可以將嚴重性字段設為none,
表示定向到這一設備的所有消息都不添加到指定的日志文件中。

除了將日志文件消息記錄到文件中外,也可以將他們打印到所有已登錄用戶的終端中。在默認的rsyslog.conf文件中,對優先級為“emerg”的所有消息執行此操作。

日志文件輪轉
日志通過logrotate 實用工具“輪轉”,以防止他們將包含 /var/log/中的文件系統填滿。輪轉日志文件時,會使用名稱擴展對其進行重命名,名稱擴展指示輪轉日期:如果文件在2014年10月30日輪轉後,則原來的/var/log/messages 文件會變成 /var/log/messages-20141030。輪原文件之後,會創建新的日志文件,並通知對他執行寫操作的服務。

輪轉若干次之後(通常輪轉四次),丟棄原日志文件以釋放磁盤空間。cron作業每日運行一次logrotate程序,以查看是否有任何日志需要輪轉。大多數日志文件每周輪轉一次,但是logrotate輪轉文件的速度有時比較快,有時較慢,或在文件達到特定大小時進行輪轉。

關於logrotate的配置參見 logrotate(8) man page

分析系統日志條目
rsyslog所寫的系統日志文件在文件的開頭顯示最舊的消息,在文件的末尾顯示最新的消息。由rsyslog 管理的日志文件中所有的日志條目都以標准的格式記錄。下例深入介紹 /var/log/secure日志文件中的日志消息。

①Feb 11 20:11:48② localhost ③sshd[1438] ④Failed password for student from 172.25.0.10 port 59344

①記錄該日志條目的時間戳
②發送該日志消息的主機
③發送該日志消息的程序或進程
④發送的實際消息

使用tail 監控日志文件
監控事件的一個或多個日志文件,這對重現問題特別有幫助。tail -f /path/to/file 命令輸出指定文件的最後0行,並在新寫入到被監控文件中繼續輸出它們。

使用logger發送系統日志消息
logger命令可以發送消息到 rsyslog服務。默認情況下,他的嚴重性為 notice(user.notice)的消息發送給設備用戶,除非通過-p 選項指定另外。測試對rsyslog 配置的更改特別有用。

若要向rsyslogd 發送消息並記錄在 /var/log/boot.log 日志文件中,可以執行:
logger -p local7.notice LOGSTRING

查看systemd日志條目

通過journalctl 查找事件
systemd 日志將日志數據存儲在帶有索引的結構化二進制文件中。此數據包含與日志事件相關的額外信息。例如,對於系統日志時間,這可包含原始消息的設備和優先級。

在Red Hat Enterprise Linux 7 中,systemd 日志默認存儲在/run/log中其內容會在重啟後予以清除。此設置可以由系統管理員更改。


journalctl 命令從最舊的日志條目開始顯示完整的系統日志。


journalctl 命令以粗文本突出顯示優先級為 notice 或 warning的信息,以紅色文本突顯出級別為error或更高級的消息。


成功利用日志進行故障排除和審核的關鍵在於,將日志搜索限制為僅顯示相關輸出。

默認情況下,journalctl -n 顯示最後10個日志條目。他可以接受通過可選參數指定顯示最後多少個日志條目。若要顯示最後5個日志條目,可運行
journalctl -n 5

在對問題進行故障排除時候,根據日志條目的優先級過濾日志文件輸出非常有種 journalctl -p 可以接受已知優先級的名稱或編號作為參數,顯示所有指定級別及更高級別的條目。
journalctl -p err

與tail -f 命令相似,journalctl -f輸出日志的最後10行,並在新日志條目寫入到日志中繼續輸出他們
journalctl -f

查找具體時間的事件時,將輸出限制為特定的時間段非常有用,journalctl 命令有兩個選項,可以將輸出限制為特定的時間范圍,分別是 --since 和 --until 選項,兩個選項都接受格式為 YYYY-MM-DD hh:mm:ss 的時間參數。如果省略日期,則命令會假定日志為當天;如果省略時間部分,則假定為自00:00:00起的一整天,除了日期和時間字段外,這兩個選項還接受yesterday,today和tomorrow作為有效日期的參數。

輸出當天記錄的所有日志條目。
journalctl --since today

輸出2014年2月10日20:30:00到2014年2月13日12:00:00的日志條目
journalctl --since "2014-02-10 20:30:00" --until "2014-02-13 12:00:00"

除了日志的可見內容外,日志條目中還附帶了只在打開詳細輸出時才能看到的字段,所有顯示的額外字段都可以用於過濾日志查詢的輸出。這可用於減少查找日志中特定事件的復雜搜索的輸出。
journalctl -o verbose

其他用於搜索關於特定進程或事件的行的選項還有
_COMM 命令的名稱
_EXE 進程的可執行文件的路徑
_PID 進程的PID
_UID 運行該進程的用戶的UID
_SYSTEMD_UNIT 啟動該進程的 systemd 單元

可以組合成多個選項。例如查詢顯示與systemd 單元文件 sshd.service 啟動,並且PID為1182的進程相關的所有日志條目。
journalctl _SYSTEMD_UNIT=sshd.service _PID=1182

保存systemd日志

永久存儲系統日志
默認情況下,systemd日志保存在/run/log/journal中,這意味著系統重啟時它會被清除。該日志是Red Hat Enterprise Linux 7 中的一種新機制,而對於大多數安裝來說,自上一次啟動的詳細日志就以足夠。

如果存在 /var/log/journal 目錄,該日志會改為記錄在這個目錄中。這樣做的優點是啟動後就可以立即使用歷史數據。然而,即便是永久日志,並非所有數據都永久保留。該日志具有一個內置的日志輪轉機制,會在每個月出發。此外,在默認情況下,日志的大小不能超過文件系統的10%,也會能造成文件系統的可用空間低於15%。這些值可以再/etc/systemd/journald.conf中調節,日志文件大小的當前限制在 systemd-journald進程啟動時予以記錄,可通過下列命令進行查看,該命令顯示journalctl輸出的前兩行:
journalctl | head -2

可以作為root用戶創建/var/log/journal 目錄,使systemd 日志變為永久日志。
確保/var/log/journal目錄由root用戶和組systemd-journal 所有,且權限為2775
需要重啟系統或者以root用戶身份將特殊信號USR1大送到systemd-journald進程裡
killall -USER1 systemd-journal

由於systemd 日志現在已經在重新啟動之間永久保留,可以通過journal -b僅顯示系統自上一次啟動以來的日志消息,以減少輸出。
journalctl -b -1 #表示將輸出限制為上一次啟動

保持准確的時間
對於在多個系統間分析日志文件而言,正確的同步系統時間非常重要,網絡時間協議(NTP)是計算機用於通過互聯網提供並獲取正確時間信息的而一種標准方式。計算機可以通過互聯網上的公共NTP服務獲取正確的時間信息

timedatectl #命令簡要顯示當前的事件相關的系統設置,如系統的當前時間,時區和NTP同步設置。
timedatectl list-timezones #列出系統包含已知時區的數據庫
timedatectl set-timezone 時區 #設置時間
timedatectl set-time 9:00:00 #設置時間
timedatectl set-ntp true|false #打開或關閉NTP同步
chronyc sources -v #驗證NTP服務器

更多RedHat相關信息見RedHat 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=10

Copyright © Linux教程網 All Rights Reserved