日誌服務器搭建之多服務器日誌轉發與格式化處理

日誌服務器搭建是靠linux的rsyslog功能作日誌轉發和日誌收集的

rsyslog是由一臺Linux服務器作日誌服務器,收集其他服務器即rsyslog客戶端轉發過來的日誌,所以rsyslog既可以作爲日誌服務器,也可以作爲日誌客戶端去使用

rsyslog配置介紹

rsyslog配置包括/etc/rsyslog.conf文件和/etc/rsyslog.d文件夾下的自定義配置文件(自定義配置文件會在rsyslog.conf全局配置中被加載)

rsyslog.conf配置文件包括模塊配置、全局配置、規則三部分

日誌服務器配置

日誌服務器的rsyslog配置文件包括以下幾個部分:

模塊配置

一般來說,只需要配置作爲日誌服務器通過UDP協議還是TCP協議接收其他服務器的日誌文件即可
模塊配置
通過UDP傳輸內容較快,但是可能會出現丟失;而TCP協議傳輸則較爲安全

全局配置

全局設置
圖中模板,logfile爲任意命名,後面的%%內的內容則是rsyslog變量

附rsyslog變量:
data items在rsyslog中叫做properties,一般用在templates(就是%%之間的變量)或者條件判斷中。主要有三種Properties:

Message Properties:
msg 匹配message中的msg部分
rawmsg 從socket收到的信息,一般用來debug
rawmsg-after-pri 和rawmsg類似,但是syslog PRI被移除了
hostname message的主機名
source HOSTNAME的別名
fromhost message來源的主機名,一般是用在relay chain中
fromhost-ip 同fromhost,不過獲取的是ip
syslogtag message的tag
programname 是tag的靜態部分,例如tag是named[123456],則programname是named
pri message的PRI,undecoded格式

System Properties:
$bom The UTF-8 encoded Unicode byte-order mask (BOM)
$myhostname The name of the current host as it knows itself

Time-Related System Properties:
$now 當前日期,格式YYYY-MM-DD,now是指當前message被處理的時間
$year 當前年份(4-digit)
$month 當前月份(2-digit)
$day 當前日期(2-digit)
$hour 當前小時(24 hour) time (2-digit)
$hhour From minute 0 to 29, this is always 0 while from 30 to 59 it is always 1.
$minute 當前分鐘(2-digit)

規則(選擇器+動作)

每個規則行由兩部分組成,selector部分和action部分,這兩部分由一個或多個空格或tab分隔,selector部分指定源和日誌等級,action部分指定對應的操作。

選擇器 SELECTORS
selector也由兩部分組成,設施和優先級,由點號.分隔。第一部分爲消息源或稱爲日誌設施,第二部分爲日誌級別。

日誌設施有
auth(security), authpriv: 授權和安全相關的消息
kern: 來自Linux內核的消息
mail: 由mail子系統產生的消息
cron: cron守護進程相關的信息
daemon: 守護進程產生的信息
news: 網絡消息子系統
lpr: 打印相關的日誌信息
user: 用戶進程相關的信息
local0 to local7: 保留,本地使用

日誌級別有(升序):
debug:包含詳細的開發情報的信息,通常只在調試一個程序時使用。
info:情報信息,正常的系統消息,比如騷擾報告,帶寬數據等,不需要處理。
notice: 不是錯誤情況,也不需要立即處理。
warning: 警告信息,不是錯誤,比如系統磁盤使用了85%等。
err:錯誤,不是非常緊急,在一定時間內修復即可。
crit:重要情況,如硬盤錯誤,備用連接丟失。
alert:應該被立即改正的問題,如系統數據庫被破壞,ISP連接丟失。
emerg:緊急情況,需要立即通知技術人員。
none:沒有記錄等級

特別留意一下在訊息等級之前還有 .[=!] 的連接符號喔!他代表的意思是這樣的:
. :代表『比後面還要嚴重的等級(含該等級)都被記錄下來』的意思,例如: mail.info 代表只要是 mail 的諮詢,而且該資訊等級嚴重於info (含 info 本身)時,就會被記錄下來的意思。
.=:代表所需要的等級就是後面接的等級而已, 其他的不要!
.!:有點反向選擇的感覺,代表忽略大於等於這個等級的訊息! 亦即是低於這個等級的纔會被記錄的意思!

動作 ACTION
action是規則描述的一部分,規則用於處理消息。總的來說,消息內容被寫到一種日誌文件上,但也可以執行其他動作,比如寫到數據庫表中或轉發到其他主機。
動作設置

備註:
1、日誌文件前面的減號表示的意思是異步寫文件,比如:
mail.!info -/var/log/mail.info
2、而.emerg :omusrmsg:代表所有服務emerg級別的日誌都會告知所有在線人員
3、. ?模板名錶示所有日誌都遵循logfile模板格式

日誌客戶端配置

日誌客戶端也是使用rsyslog功能,且配置文件和日誌服務器一樣,但一般只會在全局配置中配置以下內容
客戶端配置
. @IP表示將所有系統信息和定義local0-local7的自定義信息通過UDP傳輸到某IP
. @@IP則表示通過TCP傳輸
而轉發內容和規則也可以寫到/etc/rsyslog.d/下的一個單獨文件

符號"& ~"表示了一個重定向規則,被用來告知rsyslog守護進程停止對日誌消息的進一步處理,並且不要在本地寫入。只需要寫入指定文件或服務器中即可,如果沒有使用該重定向規則,那麼所有的遠程消息都會在寫入上述描述的日誌文件之外同時被寫入到本地日誌文件,這就意味着日誌消息實際上被寫了多次。如:
. @IP
& ~

備註:
local0-local7的自定義服務需要在對應服務的配置文件中配置,否則轉發過去的日誌只有系統日誌

重啓rsyslog

所有對於rsyslog的更新都需要重啓rsyslog,包括對rsyslog.conf更改後的:wq操作,否則rsyslog無法繼續使用
centos7系統:
systemctl restart rsyslog.service
ubuntu或centos6:
service rsyslog restart

laravel服務轉發

laravel自身支持將日誌打到rsyslog,但是需要啓動該配置,啓動了syslog配置後,即可打到rsyslog日誌中,rsyslog會自動監控。如果其中日誌發生變化,會轉發到日誌服務器中
laravel配置

最終轉發到日誌服務器的結果如圖:
最終結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章