參考文檔:
1)https://linux.cn/article-5023-1.html:在 Linux 上配置一個 syslog 服務器
2)http://www.111cn.net/sys/CentOS/81133.htm:Linux配置syslog服務器及CentOS配置rsyslog客戶端遠程記錄日志
注:本文綜合了上述兩篇文檔,并通過實際驗證。
syslog服務器可以用作一個網絡中的日志監控中心,所有能夠通過網絡來發送日志的設施(包含了Linux或Windows服務器,路由器,交換機以及其他主機)都可以把日志發送給它。通過設置一個syslog服務器,可以將不同設施/主機發送的日志,過濾和合并到一個獨立的位置,這樣使得你更容易地查看和獲取重要的日志消息。
rsyslog 作為標準的syslog守護進程,預裝在了大多數的Linux發行版中。在客戶端/服務器架構的配置下,rsyslog同時扮演了兩種角色:1.作為一個syslog服務器,rsyslog可以收集來自其他設施的日志信息;2.作為一個syslog客戶端,rsyslog可以將其內部的日志信息傳輸到遠程的syslog服務器。
在此,我們演示了在linux上如何通過rsyslog來配置一個中心化syslog服務器。在進入詳解之前,先溫習一下syslog標準。
當通過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客戶端來執行以下三個任務之一:
1. 保存日志消息到一個本地文件;
2. 通過TCP/UDP將消息路由到遠程的syslog服務器中;
3. 將其發送到一個標準輸出中,例如控制臺。
在 rsyslog里, syslog的配置是基于以下模式進行結構化的。
1. [facility-level].[severity-level] [destination]
在我們理解syslog之后,現在可以通過rsyslog來將一個Linux服務器配置為一個中心syslog服務器了,另外我們也將看到如何在一個Windows的系統上配置一個syslog客戶端來發送內部日志到該syslog服務器中。
要將linux主機設置為一個中央日志服務器, 我們需要創建一個分離的 /var 分區,并分配足夠大的磁盤空間或者創建一個特殊的LVM卷組。這樣就會使得syslog服務器能夠承擔在日積月累收集日志所帶來的潛在增長。
rsyslog守護進程來自于當前的linux發布版本的預裝模塊,但是默認并沒有啟動。為了能夠讓rsyslog守護進程能夠接受外部的消息,需要編輯其配置文件/etc/rsyslog.conf.
打開文件進行編輯,查找到下面的兩行所在的位置,通過刪除其行首的#字符來取消注釋。
1. $ModLoad imudp
2. $UDPServerRun 514
這會使得rsysolog守護進程能夠在UDP端口514上接受日志消息了---UDP是一種比TCP速度快,但是并不具有TCP一樣的數據流的可靠性。所以如果你需要使用可靠的傳送機制,就可以通過取消以下行的注釋。
1. $ModLoad imtcp
2. $InputTCPServerRun 514
需要注意的是,TCP和UDP可以被同時生效來監聽TCP/UDP 連接。
接下來的這步,需要我們來為遠程消息創建模板,并告知rsyslog守護進程如何記錄從其他客戶端機器所接受到的消息。
使用文本編輯器來打開 /etc/rsyslog.conf,然后在GLOBAL DIRECTIVE塊前追加以下的模板。
1. $template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"*
2. *.* ?RemoteLogs
3. & ~
在此對該模板進行簡單解釋,$template RemoteLogs(這里“RemoteLogs” 字符串可以為任何其他的描述性的名稱)指令使rsyslog后臺進程將日志消息寫到/var/log下的單獨的本地日志文件中,其中日志文件的名稱是基于遠程日志發送機器的主機名以及生成該日志的應用程序名進行定義的。其中第二行暗示了我們將RemoteLogs模板應用到所有接收到的日志上。
符號"& ~"表示了一個重定向規則,被用來告知rsyslog守護進程停止對日志消息的進一步處理,并且不要在本地寫入。如果沒有使用該重定向規則,那么所有的遠程消息都會在寫入上述描述的日志文件之外同時被寫入到本地日志文件,這就意味著日志消息實際上被寫了兩次。使用該規則的另外一個結果就是syslog服務器本身的日志消息只會被以該機器主機名命名的專有文件中。
如果你想要的話,也可以使用下面的模式對特定的設備或嚴重性級別使用新的模板直接來記錄日志消息。
1. [facility-level].[severity-level] ?RemoteLogs
例如:
將全部優先級別的所有內部用戶驗證消息指定為RemoteLogs模板:
1. authpriv.* ?RemoteLogs
將所有系統進程中除開mail、用戶驗證和cron消息之外的進程產生的消息級別的日志指定為RemoteLogs模板:
1. *.info,mail.none,authpriv.none,cron.none ?RemoteLogs
如果我們想要將所有從遠程客戶端接受到的消息寫入到一個以它們的ip地址命名的單個文件中,可以使用以下的模板。在此我們為該模板賦予了“IpTemplate”名稱。
1. $template IpTemplate,"/var/log/%FROMHOST-IP%.log"
2. *.* ?IpTemplate
3. & ~
在我們啟用rsyslog守護進程并編輯好配置文件之后,需要重啟該守護進程。
在 Debian,Ubuntu或 CentOS/RHEL 6中:
1. $ sudo servicersyslog restart
在 Fedora 或 CentOS/RHEL 7中:
1. $ sudosystemctl restartrsyslog
我們可以通過netstat命令來驗證rsyslog守護進程是否正常工作。
1. $ sudonetstat-tulpn |grep rsyslog
在UDP監聽端口下工作的rsyslog守護進程會有類似下面的輸出。
1. udp 000.0.0.0:5140.0.0.0:* 551/rsyslogd
2. udp6 00 :::514 :::* 551/rsyslogd
如果rsyslog守護進程被設置在TCP連接端口,那么應該有類似下面所示的輸出。
1. tcp 000.0.0.0:5140.0.0.0:* LISTEN 1891/rsyslogd
2. tcp6 00 :::514 :::* LISTEN 1891/rsyslogd
要將一個Windows客戶端的日志消息轉發到我們的rsyslog服務器,需要一個安裝 Windows syslog 代理。當然,有許多的syslog代理可以在windows上運行,在此我們可以使用一個自由軟件程序 Datagram SyslogAgent.
在下載安裝該syslog代理后,需要將其配置為作為服務運行。指定使用何種協議來發送數據,以及遠程rsyslog服務器的IP地址和端口,最后指定應該傳輸的事件日志類型,如下所示。
在我們完成所有的這些配置之后,我們就可以啟動該服務并且在中央rsyslog服務器中使用命令行工具tail -f來查看日志文件了。
linux 配置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
通過創建一個可以收集本地和遠程主機的中央rsyslog服務器,我們可以更好地了解在這些系統內部究竟發生著什么,而且可以更加容易地調試它們的問題,是否在它們之間有任何延遲或崩潰存在。
新聞熱點
疑難解答