2021-05-12 14:32:11
RHCE 系列(五):如何在 RHEL 7 中管理系統紀錄檔(設定、輪換以及匯入到資料庫)
為了確保你的 RHEL 7 系統安全,你需要通過檢視紀錄檔檔案來監控系統中發生的所有活動。這樣,你就可以檢測到任何不正常或有潛在破壞的活動並進行系統故障排除或者其它恰當的操作。
RHCE 考試 - 第五部分:使用 Rsyslog 和 Logrotate 管理系統紀錄檔
在 RHEL 7 中,rsyslogd 守護行程負責系統紀錄檔,它從 /etc/rsyslog.conf(該檔案指定所有系統紀錄檔的預設路徑)和 /etc/rsyslog.d 中的所有檔案(如果有的話)讀取設定資訊。
Rsyslogd 設定
快速瀏覽一下 rsyslog.conf 會是一個好的開端。該檔案分為 3 個主要部分:模組(rsyslong 按照模組化設計),全域性指令(用於設定 rsyslogd 守護行程的全域性屬性),以及規則。正如你可能猜想的,最後一個部分指示記錄或顯示什麼以及在哪裡儲存(也稱為選擇子(selector)),這也是這篇文章關注的重點。
rsyslog.conf 中典型的一行如下所示:
Rsyslogd 設定
在上面的圖片中,我們可以看到一個選擇子包括了一個或多個用分號分隔的“裝置:優先順序”(Facility:Priority)對,其中裝置描述了訊息型別(參考 RFC 3164 4.1.1 章節,檢視 rsyslog 可用的完整裝置列表),優先順序指示它的嚴重性,這可能是以下幾種之一:
- debug
- info
- notice
- warning
- err
- crit
- alert
- emerg
儘管 none 並不是一個優先順序,不過它意味著指定裝置沒有任何優先順序。
注意:給定一個優先順序表示該優先順序以及之上的訊息都應該記錄到紀錄檔中。因此,上面例子中的行指示 rsyslogd 守護行程記錄所有優先順序為 info 以及以上(不管是什麼裝置)的除了屬於 mail、authpriv、以及 cron 服務(不考慮來自這些裝置的訊息)的訊息到 /var/log/messages。
你也可以使用逗號將多個裝置分為一組,對同組中的裝置使用相同的優先順序。例如下面這行:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
也可以這樣寫:
*.info;mail,authpriv,cron.none /var/log/messages
換句話說,mail、authpriv 以及 cron 被分為一組,並使用關鍵字 none。
建立自定義紀錄檔檔案
要把所有的守護行程訊息記錄到 /var/log/tecmint.log,我們需要在 rsyslog.conf 或者 /etc/rsyslog.d 目錄中的單獨檔案(這樣易於管理)新增下面一行:
daemon.*/var/log/tecmint.log
然後重新啟動守護行程(注意服務名稱不以 d 結尾):
#systemctl restart rsyslog
在隨便重新啟動兩個守護行程之前和之後檢視下自定義紀錄檔的內容:
建立自定義紀錄檔檔案
作為一個自學練習,我建議你重點關注裝置和優先順序,新增額外的訊息到已有的紀錄檔檔案或者像上面那樣建立一個新的紀錄檔檔案。
使用 Logrotate 輪換紀錄檔
為了防止紀錄檔檔案無限制增長,logrotate 工具用於輪換、壓縮、移除或者通過電子郵件傳送紀錄檔,從而減輕管理會產生大量紀錄檔檔案系統的困難。(譯者注:紀錄檔輪換(rotate)是系統管理中歸檔每天產生的紀錄檔檔案的自動化過程)
Logrotate 作為一個 cron 任務(/etc/cron.daily/logrotate)每天執行,並從 /etc/logrotate.conf 和 /etc/logrotate.d 中的檔案(如果有的話)讀取設定資訊。
對於 rsyslog,即使你可以在主檔案中為指定服務包含設定,為每個服務建立單獨的組態檔能幫助你更好地組織設定。
讓我們來看一個典型的 logrotate.conf:
Logrotate 設定
在上面的例子中,logrotate 會為 /var/log/wtmp 進行以下操作:嘗試每個月輪換一次,但至少檔案要大於 1MB,然後用 0664 許可權、使用者 root、組 utmp 建立一個新的紀錄檔檔案。下一步只儲存一個歸檔紀錄檔,正如輪換指令指定的:
每月 Logrotate 紀錄檔
讓我們再來看看 /etc/logrotate.d/httpd 中的另一個例子:
輪換 Apache 紀錄檔檔案
你可以在 logrotate 的 man 手冊(man logrotate 和 man logrotate.conf)中閱讀更多有關它的設定。為了方便你的閱讀,本文還提供了兩篇文章的 PDF 格式。
作為一個系統工程師,很可能由你決定多久按照什麼格式儲存一次紀錄檔,這取決於你是否有一個單獨的分割區/邏輯卷給 /var
。否則,你真的要考慮刪除舊紀錄檔以節省儲存空間。另一方面,根據你公司和客戶內部的政策,為了以後的安全稽核,你可能必須要保留多個紀錄檔。
儲存紀錄檔到資料庫
當然檢查紀錄檔可能是一個很繁瑣的工作(即使有類似 grep 工具和正規表示式的幫助)。因為這個原因,rsyslog 允許我們把它們匯出到資料庫(OTB 支援的關聯式資料庫管理系統包括 MySQL、MariaDB、PostgreSQL 和 Oracle 等)。
指南的這部分假設你已經在要管理紀錄檔的 RHEL 7 上安裝了 MariaDB 伺服器和用戶端:
#yum update &&yum install mariadb mariadb-server mariadb-client rsyslog-mysql
#systemctl enable mariadb &&systemctl start mariadb
然後使用 mysql_secure_installation
工具為 root 使用者設定密碼以及其它安全考量:
保證 MySQL 資料庫安全
注意:如果你不想用 MariaDB root 使用者插入紀錄檔訊息到資料庫,你也可以設定用另一個使用者賬戶。如何實現的介紹已經超出了本文的範圍,但在 MariaDB 知識 中有詳細解析。為了簡單在這篇指南中我們會使用 root 賬戶。
下一步,從 GitHub 下載 createDB.sql 指令碼並匯入到你的資料庫伺服器:
# mysql -u root -p < createDB.sql
儲存伺服器紀錄檔到資料庫
最後,新增下面的行到 /etc/rsyslog.conf:
$ModLoad ommysql
$ActionOmmysqlServerPort 3306
*.*:ommysql:localhost,Syslog,root,YourPasswordHere
重新啟動 rsyslog 和資料庫伺服器:
#systemctl restart rsyslog
#systemctl restart mariadb
使用 SQL 語法查詢紀錄檔
現在執行一些會改變紀錄檔的操作(例如停止和啟動服務),然後登入到你的資料庫伺服器並使用標準的 SQL 命令顯示和查詢紀錄檔:
USE Syslog;
SELECT ReceivedAt,Message FROM SystemEvents;
在資料庫中查詢紀錄檔
總結
在這篇文章中我們介紹了如何設定系統紀錄檔,如果輪換紀錄檔以及為了簡化查詢如何重定向訊息到資料庫。我們希望這些技巧能對你準備 RHCE 考試 和日常工作有所幫助。
正如往常,非常歡迎你的反饋。用下面的表單和我們聯絡吧。
via: http://www.tecmint.com/manage-linux-system-logs-using-rsyslogd-and-logrotate/
作者:Gabriel Cánepa 譯者:ictlyh 校對:wxy
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-11/124867.htm
相關文章