Syslog常被稱爲系統日誌或系統記錄,是一種用來在互聯網協議(TCP/IP)的網上中傳遞記錄檔消息的標準。這個詞彙常用來指涉實際的syslog 協議,或者那些提交syslog消息的應用程序或數據庫。
syslog協議屬於一種主從式協議:syslog發送端會發送出一個小的文字消息(小於1024位組)到syslog接收端。接收端通常名爲“syslogd”、“syslog daemon”或syslog服務器。系統日誌消息可以被以UDP協議及╱或TCP協議來發送。這些數據是以明碼類型被髮送。不過由於SSL加密外套(例如Stunnel、sslio或sslwrap等)並非syslog協議本身的一部分,因此可以被用來透過SSL/TLS方式提供一層加密。
Rsyslog 是syslog 的升級版,一個快速處理收集系統日誌的程序,提供了高性能、安全功能和模塊化設計,將多種來源輸入輸出轉換結果到目的地。
Rsyslog的傳輸方式有三種:
-
UDP 傳輸協議
-
基於傳統UDP協議進行遠程日誌傳輸,也是傳統syslog使用的傳輸協議;
-
可靠性比較低,但性能損耗最少
-
在網絡情況比較差,或者接收服務器壓力比較高情況下,可能存在丟日誌情況。
-
TCP 傳輸協議
-
基於傳統TCP協議明文傳輸,需要回傳進行確認,可靠性比較高;
-
但在接收服務器宕機或者兩者之間網絡出問題的情況下,會出現丟日誌情況。
-
RELP 傳輸協議
-
RELP(Reliable Event Logging Protocol)是基於TCP封裝的可靠日誌消息傳輸協議;
-
是爲了解決TCP 與 UDP 協議的缺點而在應用層實現的傳輸協議,也是三者之中最可靠的。
-
對於線上服務器,爲了日誌安全起見,建議使用 RELP 協議進行傳輸。
- 查看系統中 Rsyslog 版本信息
Rsyslog 的主配置文件爲 /etc/rsyslog.conf
- Rsyslog 的配置主要有以下模塊:
- modules:模塊,配置加載的模塊,如:
ModLoad imrelp
配置加載RELP傳輸模塊 - global directives:全局配置,配置ryslog守護進程的全局屬性,比如主信息隊列大小(MainMessageQueueSize)
- rules:規則(選擇器+動作),每個規則由兩部分組成,selector部分和action部分,這兩部分由一個或多個空格或tab分隔,selector部分指定源和日誌等級,action部分指定對應的操作
-
常用的modules
- imudp,傳統方式的UDP傳輸,有損耗
- imtcp,基於TCP明文的傳輸,只在特定情況下丟失信息,並被廣泛使用
- imrelp,RELP傳輸,不會丟失信息
-
規則(rules)
規則的選擇器(selectors)由兩部分組成,設施和優先級,由點號.分隔。多個選擇器用;分隔,如:*.info;mail.none
- facility:設施,從功能或程序上對日誌收集進行分類
內建的日誌設施有:
auth(security), authpriv:認證授權和安全相關的消息
kern:來自Linux內核的消息
mail:郵件服務系統的各種組件
mark:防火牆標記
cron:週期任務計劃相關的信息
daemon:守護進程產生的信息
news:網絡消息子系統
lpr:打印相關的日誌信息
user:用戶進程相關的信息
local0 to local7:保留,本地使用
- priority:優先級,日誌級別(由低到高)
debug:包含詳細的開發情報的信息,通常只在調試一個程序時使用
info:情報信息,正常的系統消息,比如騷擾報告,帶寬數據等,不需要處理
notice: 不是錯誤情況,也不需要立即處理
warning: 警告信息,不是錯誤,比如系統磁盤使用了85%等
err:錯誤,不是非常緊急,在一定時間內修復即可
crit:重要情況,如硬盤錯誤,備用連接丟失
alert:應該被立即改正的問題,如系統數據庫被破壞,ISP連接丟失
emerg:緊急情況,需要立即通知技術人員
指定級別 |
功能 |
---|---|
* |
所有級別 |
none |
沒有級別 |
priority |
此級別及高於此級別的所有級別 |
=priority |
僅此級別 |
- 動作 (action)
action是規則描述的一部分,位於選擇器的後面,規則用於處理消息。總的來說,消息內容被寫到一種日誌文件上,但也可以執行其他動作,比如寫到數據庫表中或轉發到其他主機。
寫到mysql數據庫中
- 實驗環境
- LOG Server CentOS 7.5 192.168.1.2
- LOG Client CentOS 7.5 192.168.1.3
- 首先在 LOGServer 192.168.1.2 端安裝 Rsyslog、以及RELP協議支持:rsyslog-relp
- yum -y install rsyslog rsyslog-relp
-
編輯 /etc/rsyslog.conf 主配置文件
-
vim /etc/rsyslog.conf
-
在#### MODULES ####下面添加以下信息:
$ModLoad imrelp #開啓RELP傳輸協議
$InputRELPServerRun 514 #設定監聽端口 -
編輯 /etc/sysconfig/rsyslog 開啓傳輸端口監聽
-
vim /etc/sysconfig/rsyslog
-r指定監聽端口,-c2 使用兼容模式
-
SYSLOGD_OPTIONS="-r514 -c2"
-
確認無誤 啓動 Rsyslog 服務
-
systemctl start rsyslog
-
查看 514 端口是否被監聽
-
ss -alnt | grep 514
-
在服務器端用 tail -f /var/log/messages 追蹤日誌
-
tail -f /var/log/messages
- 接下來在 LOGClient 192.168.1.3 端安裝配置 Rsyslog
- yum -y install rsyslog rsyslog-relp
- 編輯 /etc/rsyslog.conf 添加以下信息:
$ModLoad omrelp #指定傳輸協議
*.* :omrelp:192.168.1.2:514 #設置那些LOG日誌被記錄以及LOG服務器IP和端口 - 重啓 Rsyslog 服務
- systemctl restart rsyslog
- 發送一條測試日誌
- logger -t kern -p err "This is a testlog"
- 然後回到 LOG Server 192.168.1.2 端查看是否接收到剛纔的測試 LOG
- tail -f /var/log/messages
- Mar 22 15:47:29 C75_192_168_1_3 kern: This is a testlog
Loganalyzer是一款syslog日誌和其他網絡時間數據的web前端,它提供了對日誌的簡單瀏覽、搜索、基本分析和一些圖表報告的功能。數據可以從數據庫或一般syslog文本文件中獲取,所有loganalyzer不需要改變現有的記錄架構。基於當前的日誌數據,它可以處理syslog日誌消息windows事件日誌記錄,支持故障排除,使用戶能快速查找日誌數據中看出問題的解決方案。
loganalyzer獲取客戶端日誌會有兩種保存模式,一種是直接讀取客戶端/var/log目錄下的日誌並保存到服務端該目錄下,一種是讀取後保存日誌服務器數據庫中,這裏測試的是mariadb數據庫
Loganalyzer基於php開發,需要搭建php運行環境
- 接下來在 LOGServer 192.168.1.2 端安裝配置 lamp 和 日誌管理工具:loganalyzer
- lamp 具體設置請參照拙作:https://blog.csdn.net/gaofei0428/article/details/104058580https://blog.csdn.net/gaofei0428/article/details/104224132
- yum -y install mariadb mariadb-server php php-fpm php-gd php-mysql httpd rsyslog rsyslog-mysql rsyslog-relp
-
導入所需要的數據庫和表:
-
mysql -uroot -p123456 < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
-
mysql-createDB.sql 是安裝 rsyslog-mysql 生成的,可以用命令查看
rpm –ql rsyslog-mysql
-
添加、授權用戶 rsyslog 使用 Syslog 庫
-
mysql -uroot -p123456 -e "GRANT ALL ON Syslog.* TO 'rsyslog'@'%' IDENTIFIED BY 'rsyspass';" #需要從網絡登陸,%或者 192.168.1.%,localhost只能本地登陸。
-
mysql -uroot -p123456 -e "flush privileges;" #立即刷新權限
-
編輯 /etc/rsyslog.conf 主配置文件
-
vim /etc/rsyslog.conf
-
在#### MODULES ####下面添加以下信息:
$ModLoad imrelp #開啓RELP傳輸協議
$InputRELPServerRun 514 #設定監聽端口$ModLoad ommysql #開啓 mysql 模塊
-
在#### RULES #### 下面添加
# rule, send to mysql
#*.* :ommysql:database-server,database-name,database-userid,database-password
*.* :ommysql:192.168.1.2,Syslog,rsyslog,rsyspass - 從 loganalyzer 官網下載
- wget https://download.adiscon.com/loganalyzer/loganalyzer-4.1.7.tar.gz
- tar xf loganalyzer-4.1.7.tar.gz
- cd loganalyzer-4.1.7
- cp -ar ./src/* /data/web/
- cp -ar ./contrib/*.sh /data/web/
- cd /data/web
- chmod +x ./*.sh
./configure.sh #生成 config.php 文件,屬性爲 666 - 確認無誤啓動服務
- systemctl start httpd
- systemctl start php-fpm
- systemctl restart rsyslog
- 打開瀏覽器輸入 http://192.168.1.2
- 點擊 here 開始配置
- Step 1 默認即可 點擊 Next
- Step 2 測試是否可以寫入 config.php 點擊 Next
- Step 3 默認 點擊 Next
- Step 7
Source Type MYSQL Native #選擇 MYSQL 記錄方式
Select View EventLog FieldsDatabase Type Options
Table type MonitorWare #默認
Database Host 192.168.1.2 #MariaDB Server IP
Database Name Syslog #選擇數據庫
Database Tablename SystemEvents #選擇表,注意大小寫!
Database User rsyslog #MariaDB授權用戶
Database Password rsyspass #用戶密碼
Enable Row Counting #默認 -
Step 8 Finish
-
chmod 644 /data/web/config.php
- 在 LOGClient 192.168.1.3 端,編輯 /etc/rsyslog.conf 修改以下信息:
- $Modload ommysql
*.* :ommysql:192.168.1.2,Syslog,rsyslog,rsyspass - logger -t kern -p err "This is a testlog"