系統日誌的重要性,相信大家都深有體會,當發生故障後,第一時間就是查看相關報錯資訊和日誌資訊,以定位問題所在,還可以基於日誌,進行日誌的分析,從而擷取系統運行狀態的一些規律,本篇就介紹關於系統日誌的先關內容,具體分為:
1、rsyslog相關概念的介紹
2、自訂日誌儲存的通道(facility)和儲存位置,讓rsyslog作為服務端記錄rsyslog用戶端的日誌資訊
3、定義rsyslog的日誌儲存在mysql資料庫中
4、利用loganalyzer實現對儲存在mysql資料庫中的rsyslog日誌資訊,進行web圖形化分析管理
環境:
CentOS7系統,IP為10.1.32.72
LAMP組合採用:yum方式的rpm包安裝
httpd-2.4
php-fpm(也就是php基於fastcgi方式與httpd互動的實現)
mariadb
第一章 rsyslog相關概念的介紹
1、rsyslog是什麼
rsyslog是系統上用來進行日誌管理的工具,其C/S架構的程式,可以為當前系統記錄系統相關的日誌資訊,也支援為其他軟體或其他的系統記錄日誌資訊,其相關特性表現為:
多線程工作;
基於UDP、TCP、協議,還可以基於tls/ssl進行加密通訊,還可以基於RELP進行通訊;
儲存日誌資訊於MySQL、PostgreSQL(PGSQL)、Oracle等RDBMS;
強大的過濾器,實現過濾日誌資訊中任何部分的內容;
自訂的輸出格式;
2、rsyslog程式環境
程式包:
rsyslog 程式包
rsyslog-mysql 支援將日誌資訊記錄到mysql的程式包
設定檔:
/etc/rsyslog.conf、/etc/rsyslog.d/*.conf
主程式:
/usr/sbin/rsyslogd
模組組件:
/usr/lib64/rsyslog/
Unit file:
/usr/lib/systemd/system/rsyslog.service
3、rsyslog相關的術語
facility:收集日誌的通道設施,通道,可以理解為日誌通過那個虛擬設備發送進來
常見的facility有:
auth # 認證相關的
authpriv # 許可權,授權相關的
cron # 任務計劃相關的
daemon # 守護進程相關的
kern # 核心相關的
lpr # 列印相關的
mail # 郵件相關的
mark # 標記相關的
news # 新聞相關的
security # 安全相關的,與auth 類似
syslog # syslog自己的
user # 使用者相關的
uucp # unix to unix cp 相關的
local0 到 local7 # 使用者自訂使用
* # *表示所有的facility
priority:(log level)日誌的層級,一般有以下幾種層級(從低到高)
debug # 程式或系統的調試資訊
info # 一般資訊
notice # 不影響正常功能,需要注意的訊息
warning/warn # 可能影響系統功能,需要提醒使用者的重要事件
err/error # 錯誤資訊
crit # 比較嚴重的
alert # 必須馬上處理的
emerg/panic # 會導致系統停用
* # 表示所有的記錄層級
none # 跟* 相反,表示啥也沒有
target:(動作)日誌記錄的位置,常見的有:
檔案:
將指定的日誌資訊記錄到指定的檔案中
-檔案:
表示將日誌資訊記錄到指定的檔案中,-表示非同步寫入
使用者:
將日誌事件通知給指定的使用者,通常是將日誌資訊發送給登入到當前系統上的所有使用者的終端
Log Service器:
格式為@RSYSLOG_SERVER ,表示將日誌資訊發送給指定的Log Service器
管道:
格式為 |COMMAND 表示將日誌資訊管道送給指定的命令
4、記錄記錄定義的格式為:
facility.priority target
表示將哪個通道傳進來的日誌,哪個記錄層級(及其之上的記錄層級),記錄到哪個目標中
facility格式:
* 表示所有的facility
FACI1,FACI2,FACI1,… 列表中給定的所有facility
FACI1.PRI1;FACI2.PRI2;FACI3.PRI3;… 列表中給定的facility和對應的priority及其之上層級的記錄
priority格式:
* 所有層級
none 沒有層級,不記錄日誌
PRIORITY:此層級(含)及其以上的所有層級
=PRIORITY: 僅指定的層級
例如:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
表示所有通道的info層級以上的資訊,除了mail裝置,authprioriv裝置、cron裝置的日誌,都記錄到/var/www/messages檔案
authpriv.* /var/log/secure
表示authpriv裝置上所有記錄層級的日誌,都記錄到/var/log/secure檔案中
mail.* -/var/log/maillog
表示mail裝置所有記錄層級的日誌,都以非同步方式記錄到/var/log/mailog檔案中
auth.=info @10.0.0.1
# 表示將auth相關的,層級為只為info的日誌記錄到10.0.0.1主機上去
前提是10.0.0.1要能接收其他主機發來的日誌資訊
user.!=error /var/log/test.log
# 表示記錄user相關的,不包括error層級的資訊,記錄到/var/log/test.log檔案中
cron.info;mail.info /var/log/test.log
# 多個日誌來源可以用";" 隔開
cron,mail.info /var/log/test.log
# 與cron.info;mail.info 是一個意思
mail.*;mail.!=info /var/log/test.log
# 表示記錄mail相關的所有層級的資訊,但是不包括info層級的
第二章 自訂日誌儲存的通道(facility)和儲存位置,讓rsyslog作為服務端記錄rsyslog用戶端的日誌資訊
1、自訂儲存位置—以檔案為例
2、讓本機rsyslog作為服務端,接受來自其他rsyslog用戶端的日誌
在原生rsyslog中設定檔中定義其作為服務端工作需要的屬性
在其他rsyslog用戶端主機上配置,讓其把日誌發送給rsyslog服務端
在rsyslog服務端驗證是否有收到用戶端的日誌資訊
第三章 定義rsyslog的日誌儲存在mysql資料庫中
1、安裝mariadb資料庫,啟動服務
2、安裝rsyslog串連mysql的驅動模組:rsyslog-mysql
2、匯入rsyslog-mysql產生的sql指令碼,實現對資料庫的配置
3、在資料庫上授權對Syslog庫的系統管理使用者
4、配置rsyslog利用mysql記錄日誌
5、修改完設定檔,重啟rsyslog服務,查看資料庫中是否有相關日誌資訊
第四章 利用loganalyzer實現對儲存在mysql資料庫中的rsyslog日誌資訊,進行web圖形化分析管理
上述過程,我們已經實現了將rsyslog的日誌資訊儲存於mysql資料庫中,但是查看日誌時卻不方便,需要利用SQL語句來查詢
接下來我們來介紹下,利用loganalyzer實現對儲存在mysql資料庫中的日誌進行web化管理
1、部署LAMP組合(以php與httpd結合方式為fastcgi為例)
yum install -y httpd php-fpm php-mysql php-gd
2、對httpd進行簡單配置,然後啟動httpd服務,配置php-fpm設定檔,然後啟動php-fpm服務
測試訪問,驗證LAMP是否正常
4、下載loganalyzer軟體包,解壓,部署
5、登入網頁,進行安裝
重載httpd設定檔後重新整理網頁
拍錯過程:上圖中,定義的資料庫表名稱與實際資料庫(表名稱為'SystemEvents')不對,修改config.php檔案解決
忘記給php添加session目錄
解決方案:mkdir /var/lib/php/session;chown apache:apache /var/lib/php/session