日誌服務器搭建是靠linux的rsyslog功能做日誌轉發和日誌收集的linux
rsyslog是由一臺Linux服務器做日誌服務器,收集其餘服務器即rsyslog客戶端轉發過來的日誌,因此rsyslog既能夠做爲日誌服務器,也能夠做爲日誌客戶端去使用laravel
rsyslog配置包括/etc/rsyslog.conf文件和/etc/rsyslog.d文件夾下的自定義配置文件(自定義配置文件會在rsyslog.conf全局配置中被加載)git
rsyslog.conf配置文件包括模塊配置、全局配置、規則三部分數據庫
日誌服務器的rsyslog配置文件包括如下幾個部分:ubuntu
通常來講,只須要配置做爲日誌服務器經過UDP協議仍是TCP協議接收其餘服務器的日誌文件便可
經過UDP傳輸內容較快,可是可能會出現丟失;而TCP協議傳輸則較爲安全centos
圖中模板,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是規則描述的一部分,規則用於處理消息。總的來講,消息內容被寫到一種日誌文件上,但也能夠執行其餘動做,好比寫到數據庫表中或轉發到其餘主機。
備註:
一、日誌文件前面的減號表示的意思是異步寫文件,好比:
mail.!info -/var/log/mail.info
二、而.emerg :omusrmsg:表明全部服務emerg級別的日誌都會告知全部在線人員
三、. ?模板名錶示全部日誌都遵循logfile模板格式
日誌客戶端也是使用rsyslog功能,且配置文件和日誌服務器同樣,但通常只會在全局配置中配置如下內容
. @IP表示將全部系統信息和定義local0-local7的自定義信息經過UDP傳輸到某IP
. @@IP則表示經過TCP傳輸
而轉發內容和規則也能夠寫到/etc/rsyslog.d/下的一個單獨文件
符號"& ~"表示了一個重定向規則,被用來告知rsyslog守護進程中止對日誌消息的進一步處理,而且不要在本地寫入。只須要寫入指定文件或服務器中便可,若是沒有使用該重定向規則,那麼全部的遠程消息都會在寫入上述描述的日誌文件以外同時被寫入到本地日誌文件,這就意味着日誌消息實際上被寫了屢次。如:
. @IP
& ~
備註:
local0-local7的自定義服務須要在對應服務的配置文件中配置,不然轉發過去的日誌只有系統日誌
全部對於rsyslog的更新都須要重啓rsyslog,包括對rsyslog.conf更改後的:wq操做,不然rsyslog沒法繼續使用
centos7系統:
systemctl restart rsyslog.service
ubuntu或centos6:
service rsyslog restart
laravel自身支持將日誌打到rsyslog,可是須要啓動該配置,啓動了syslog配置後,便可打到rsyslog日誌中,rsyslog會自動監控。若是其中日誌發生變化,會轉發到日誌服務器中
最終轉發到日誌服務器的結果如圖: