2021-05-12 14:32:11
RHEL7.0 紀錄檔系統
此文章是我學習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伺服器
相關文章