RHCE 系列(五):如何在 RHEL 7 中管理系統日誌(配置、輪換以及導入到資料庫)
RHCE 考試 - 第五部分:使用 Rsyslog 和 Logrotate 管理系統日誌
在 RHEL 7 中,rsyslogd 守護進程負責系統日誌,它從 /etc/rsyslog.conf(該文件指定所有系統日誌的默認路徑)和 /etc/rsyslog.d 中的所有文件(如果有的話)讀取配置信息。
Rsyslogd 配置
快速瀏覽一下 rsyslog.conf 會是一個好的開端。該文件分為 3 個主要部分:模塊(rsyslong 按照模塊化設計),全局指令(用於設置 rsyslogd 守護進程的全局屬性),以及規則。正如你可能猜想的,最後一個部分指示記錄或顯示什麼以及在哪裡保存(也稱為 選擇子 ),這也是這篇文章關注的重點。
rsyslog.conf 中典型的一行如下所示:
Rsyslogd 配置
在上面的圖片中,我們可以看到一個選擇子包括了一個或多個用分號分隔的 「設備:優先順序」 對,其中設備描述了消息類型(參考 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
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive