參考地址:html
http://www.111cn.net/sys/CentOS/81133.htmlinux
https://www.cnblogs.com/laoxiajiadeyun/p/9943742.htmlwindows
https://blog.51cto.com/liqingbiao/2119953安全
https://www.cnblogs.com/hasayaki/archive/2013/01/24/2874889.html服務器
在 Linux 上配置一個 syslog 服務器網絡
syslog服務器能夠用做一個網絡中的日誌監控中心,全部可以經過網絡來發送日誌的設施(包含了Linux或Windows服務器,路由器,交換機以及其餘主機)均可以把日誌發送給它。 經過設置一個syslog服務器,能夠將不一樣設施/主機發送的日誌,過濾和合併到一個獨立的位置,這樣使得你更容易地查看和獲取重要的日誌消息。架構
rsyslog 做爲標準的syslog守護進程,預裝在了大多數的Linux發行版中。在客戶端/服務器架構的配置下,rsyslog同時扮演了兩種角色:1.做爲一個syslog服務器,rsyslog能夠收集來自其餘設施的日誌信息;2.做爲一個syslog客戶端,rsyslog能夠將其內部的日誌信息傳輸到遠程的syslog服務器。tcp
在此,咱們演示了在linux上如何經過rsyslog來配置一箇中心化syslog服務器。 在進入詳解以前,先溫習一下syslog標準。編輯器
syslog標準基礎ide
當經過syslog機制來收集日誌時,有3個必需要考慮到的重要事情:
設施層級: 監聽何種類型的進程
嚴重性 (優先) 級別: 收集何種級別的日誌消息
目標: 發送或記錄日誌消息到何處
如今咱們更加深刻地瞭解一下配置是如何定義的。
設施層級定義了一種用來對內部系統進程進行分類的方法,linux中的一些常見的設施包括:
auth: 身份驗證相關的消息(登陸時)
cron: 進程或應用調度相關的消息
daemon: 守護進程相關的消息(內部服務器)
kernel: 內核相關的消息
mail: 內部郵件服務器相關的消息
syslog: syslog 守護進程自己相關的消息
lpr: 打印服務相關的消息
local0 - local7: 用戶自定義的消息 (local7 一般被Cisco 和 Windows 服務器 使用)
嚴重性(優先)級別有固定的標準縮寫和指代的值,其中的數字7具備最高的級別,這些級別包含了:
emerg: Emergency(緊急)- 0
alert: Alerts (報警)- 1
crit: Critical (關鍵)- 2
err: Errors (錯誤)- 3
warn: Warnings (警告)- 4
notice: Notification (通知)- 5
info: Information (消息)- 6
debug: Debugging (調試)- 7
最後,目標語句會讓一個syslog客戶端來執行如下三個任務之一:
保存日誌消息到一個本地文件;
經過TCP/UDP將消息路由到遠程的syslog服務器中;
將其發送到一個標準輸出中,例如控制檯。
在 rsyslog裏, syslog的配置是基於如下模式進行結構化的。
[facility-level].[severity-level] [destination]
在咱們理解syslog以後,如今能夠經過rsyslog來將一個Linux服務器配置爲一箇中心syslog服務器了
第1步: 初始化系統需求
要將linux主機設置爲一箇中央日誌服務器, 咱們須要建立一個分離的 /var 分區,並分配足夠大的磁盤空間或者建立一個特殊的LVM卷組。這樣就會使得syslog服務器可以承擔在日積月累收集日誌所帶來的潛在增加。
第2步: 讓rsyslog 後臺進程生效
1 $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) 2 $ModLoad imjournal # provides access to the systemd journal 3 4 #####開啓udp接收日誌 5 $ModLoad imudp 6 $UDPServerRun 514 7 $template RemoteHost,"/data/syslog/%$YEAR%-%$MONTH%-%$DAY%/%FROMHOST-IP%.log" ##Remotehost是用戶自定義模版的名稱,後面是日誌路徑 8 *.* ?RemoteHost ##啓用自定義的模板,能夠是*.* ,也能夠是不一樣的日誌類別加級別,
##例如 *.info;mail.none;authpriv.none;cron.none ?RemoteHost
##利用特殊的模板讓本身自定義不一樣的類型
##%%之間的就是自變參數
內容格式以下:
:屬性, 比較操做符, "值" 保存位置
屬性包括如下內容
fromhost 哪一個主機名發過來的
fromhost-ip 哪一個ip發過來的
msg 從日誌信息裏的內容判斷
hostname 從日誌中的主機名判斷
比較操做符包括如下內容
contains 包含
isequal 等於
startswith 以...開頭
9 & ~ ##重定向規則,被用來告知rsyslog守護進程中止對日誌消息的進一步處理,而且不要在本地寫入。若是沒有使用該重定向規則,
##那麼全部的遠程消息都會在寫入上述描述的日誌文件以外同時被寫入到本地日誌文件,這就意味着日誌消息實際上被寫了兩次。
##使用該規則的另一個結果就是syslog服務器自己的日誌消息只會被以該機器主機名命名的專有文件中
####開啓tcp協議接受日誌 11 $ModLoad imtcp 12 $InputTCPServerRun 514 13 14 $WorkDirectory /var/lib/rsyslog 15 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat 16 17 #######啓用/etc/rsyslog.d/*.conf目錄下全部以.conf結尾的配置文件 18 $IncludeConfig /etc/rsyslog.d/*.conf ##這裏能夠本身去定義本身須要主要監控的機器的IP系統日誌,不用每次都所有下載下來例如/etc/rsyslog.d/192.168.0.31.conf,
##這樣進程就會先加載此總配置文件,若是沒有配置則執行今後命令去執行對應的配置 19
這裏是isequal等於,也能夠是非本機日誌,採用 !isequal, "127.0.0.1",這樣就排除本機計算日誌了
20 $OmitLocalLogging on 21 $IMJournalStateFile imjournal.state 22 *.info;mail.none;authpriv.none;cron.none /var/log/messages 23 authpriv.* /var/log/secure 24 mail.* -/var/log/maillog 25 cron.* /var/log/cron 26 *.emerg :omusrmsg:* 27 uucp,news.crit /var/log/spooler 28 local7.* /var/log/boot.log 29 local0.* /etc/keepalived/keepalived.log
rsyslog守護進程來自於當前的linux發佈版本的預裝模塊,可是默認並無啓動。爲了可以讓rsyslog守護進程可以接受外部的消息,須要編輯其配置文件/etc/rsyslog.conf
打開文件進行編輯,查找到下面的兩行所在的位置,經過刪除其行首的#字符來取消註釋。
$ModLoad imudp
$UDPServerRun 514
這會使得rsysolog守護進程可以在UDP端口514上接受日誌消息了---UDP是一種比TCP速度快,可是並不具備TCP同樣的數據流的可靠性。因此若是你須要使用可靠的傳送機制,就能夠經過取消如下行的註釋。
$ModLoad imtcp
$InputTCPServerRun 514
注意: TCP和UDP能夠被同時生效來監聽TCP/UDP 鏈接
第3步:建立日誌接收模板
接下來的這步,是rsyslogd進程接受到外部客戶端日誌信息時,按照什麼樣的日誌格式來記錄在磁盤上,這裏提供接口供使用者自定義使用
打開 /etc/rsyslog.conf,而後在GLOBAL DIRECTIVE塊前追加如下的模板。
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *
*.* ?RemoteLogs
& ~
在此對該模板進行簡單解釋,$template RemoteLogs(這裏「RemoteLogs」 字符串能夠爲任何其餘的描述性的名稱)指令使rsyslog後臺進程將日誌消息寫到/var/log下的單獨的本地日誌文件中,其中日誌文件的名稱是基於遠程日誌發送機器的主機名以及生成該日誌的應用程序名進行定義的。其中第二行提示了咱們將RemoteLogs模板應用到全部接收到的日誌上。
符號"& ~"表示了一個重定向規則,被用來告知rsyslog守護進程中止對日誌消息的進一步處理,而且不要在本地寫入。若是沒有使用該重定向規則,那麼全部的遠程消息都會在寫入上述描述的日誌文件以外同時被寫入到本地日誌文件,這就意味着日誌消息實際上被寫了兩次。
使用該規則就是syslog服務器自己日誌信息除了寫入上述配置文件同時也會寫一份到本地日誌文件中,而且按照的是本機名做爲信息頭,這樣等因而浪費磁盤空間和對不熟悉的人配置混淆;
若是你想要的話,也可使用下面的模式對特定的設備或嚴重性級別使用新的模板直接來記錄日誌消息。
[facility-level].[severity-level] ?RemoteLogs
例如:
將所有優先級別的全部內部用戶驗證消息指定爲RemoteLogs模板:
authpriv.* ?RemoteLogs
將全部系統進程中除開mail、用戶驗證和cron消息以外的進程產生的消息級別的日誌指定爲RemoteLogs模板:
*.info,mail.none,authpriv.none,cron.none ?RemoteLogs
若是咱們想要將全部從遠程客戶端接受到的消息寫入到一個以它們的IP地址命名的單個文件中,可使用如下的模板。在此咱們爲該模板賦予了「IpTemplate」名稱。
$template IpTemplate,"/var/log/%FROMHOST-IP%.log"
*.* ?IpTemplate
& ~
在咱們啓用rsyslog守護進程並編輯好配置文件以後,須要重啓該守護進程。
發送Windows日誌到一個遠程的rsyslog服務器
要將一個Windows客戶端的日誌消息轉發到咱們的rsyslog服務器,須要一個安裝 Windows syslog 代理。固然,有許多的syslog代理能夠在windows上運行,在此咱們可使用一個自由軟件程序 Datagram SyslogAgent.
在下載安裝該syslog代理後,須要將其配置爲做爲服務運行。指定使用何種協議來發送數據,以及遠程rsyslog服務器的IP地址和端口,最後指定應該傳輸的事件日誌類型,以下所示。
在咱們完成全部的這些配置以後,咱們就能夠啓動該服務而且在中央rsyslog服務器中使用命令行工具tail -f來查看日誌文件了。
總結
經過建立一個能夠收集本地和遠程主機的中央rsyslog服務器,咱們能夠更好地瞭解在這些系統內部究竟發生着什麼,並且能夠更加容易地調試它們的問題,是否在它們之間有任何延遲或崩潰存在。
CentOS上配置rsyslog客戶端用以遠程記錄日誌
rsyslog是一個開源工具,被普遍用於Linux系統以經過TCP/UDP協議轉發或接收日誌消息。rsyslog守護進程能夠被配置成兩種環境,一種是配置成日誌收集服務器,rsyslog進程能夠從網絡中收集其它主機上的日誌數據,這些主機會將日誌配置爲發送到另外的遠程服務器。rsyslog的另一個用法,就是能夠配置爲客戶端,用來過濾和發送內部日誌消息到本地文件夾(如/var/log)或一臺能夠路由到的遠程rsyslog服務器上。
假定你的網絡中已經有一臺已經配置好並啓動的rsyslog服務器,本指南將爲你展現如何來設置CentOS系統將其內部日誌消息路由到一臺遠程rsyslog服務器上。這將大大改善你的系統磁盤空間的使用,尤爲是當你尚未一個用於/var目錄的獨立的大分區。
步驟一: 安裝Rsyslog守護進程
在CentOS 6和7上,rsyslog守護進程已經預先安裝了。要驗證rsyslog是否已經安裝到你的CentOS系統上,請執行以下命令:
# rpm -qa | grep rsyslog
# rsyslogd -v
若是處於某種緣由,rsyslog守護進程沒有出如今你的系統中,請使用如下命令來安裝:
# yum install rsyslog
步驟二: 配置Rsyslog守護進程爲客戶端
接下來的步驟,是要將你的CentOS機器轉變成rsyslog客戶端,將其全部內部日誌消息發送到遠程中央日誌服務器上。
要實現該功能,請使用你喜好的文本編輯器打開位於/etc路徑下的rsyslog主配置文件:
# nano /etc/rsyslog.conf
開啓文件用於編輯後,你須要添加如下聲明到文件底部。將IP地址替換爲你的遠程rsyslog服務器的IP地址。
*.* @192.168.1.25:514
上面的聲明告訴rsyslog守護進程,將系統上各個設備的各類日誌消息路由到遠程rsyslog服務器(192.168.1.25)的UDP端口514。
若是出於某種緣由,你須要更爲可靠的協議,如TCP,而rsyslog服務器也被配置爲監聽TCP鏈接,你必須在遠程主機的IP地址前添加一個額外的@字符,像下面這樣:
*.* @@192.168.1.25:514
注意,你也能夠將rsyslog服務器的IP地址替換成它的主機名(FQDN)。
若是你只想要轉發服務器上的指定設備的日誌消息,好比說內核設備,那麼你能夠在rsyslog配置文件中使用如下聲明。
kern.* @192.168.1.25:514
修改配置文件後,你須要重啓進程以激活修改:
CentOS 7:
# systemctl restart rsyslog.service
CentOS 6:
# service rsyslog restart
非 syslog 日誌的轉發
在另一種環境中,讓咱們假定你已經在機器上安裝了一個名爲「foobar」的應用程序,它會在/var/log下生成foobar.log日誌文件。如今,你想要將它的日誌定向到rsyslog服務器,這能夠經過像下面這樣在rsyslog配置文件中加載imfile模塊來實現
首先,加載imfile模塊,這隻需作一次。
module(load="imfile" PollingInterval="5")
而後,指定日誌文件的路徑以便imfile模塊能夠檢測到:
input(type="imfile"
File="/var/log/foobar.log"
Tag="foobar"
Severity="error"
Facility="local7")
最後,定向local7設備到遠程rsyslog服務器:
local7.* @192.168.1.25:514
別忘了重啓rsyslog進程哦!
步驟三: 讓Rsyslog進程自動啓動
要讓rsyslog客戶端在每次系統重啓後自動啓動,請運行如下命令:
CentOS 7:
# systemctl enable rsyslog.service
CentOS 6:
# chkconfig rsyslog on
小結
在本教程中,我演示瞭如何將CentOS系統轉變成rsyslog客戶端以強制它發送日誌消息到遠程rsyslog服務器。這裏我假定rsyslog客戶端和服務器之間的鏈接是安全的(如,在有防火牆保護的公司網絡中)。無論在任何狀況下,都不要配置rsyslog客戶端將日誌消息經過不安全的網絡轉發,或者,特別是經過互聯網轉發,由於syslog協議是一個明文協議。要進行安全傳輸,能夠考慮使用TLS/SSL來加密日誌消息的傳輸。