Linux配置syslog服務器及CentOS配置rsyslog客戶端遠程記錄日誌

轉載網址:

http://www.111cn.net/sys/CentOS/81133.htm


syslog服務器可以用作一個網絡中的日誌監控中心,所有能夠通過網絡來發送日誌的設施(包含了Linux或Windows服務器,路由器,交換機以及其他主機)都可以把日誌發送給它。 通過設置一個syslog服務器,可以將不同設施/主機發送的日誌,過濾和合併到一個獨立的位置,這樣使得你更容易地查看和獲取重要的日誌消息。

rsyslog 作爲標準的syslog守護進程,預裝在了大多數的Linux發行版中。在客戶端/服務器架構的配置下,rsyslog同時扮演了兩種角色:1.作爲一個syslog服務器,rsyslog可以收集來自其他設施的日誌信息;2.作爲一個syslog客戶端,rsyslog可以將其內部的日誌信息傳輸到遠程的syslog服務器。

在此,我們演示了在linux上如何通過rsyslog來配置一箇中心化syslog服務器。 在進入詳解之前,先溫習一下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客戶端來執行以下三個任務之一:

    保存日誌消息到一個本地文件;
    通過TCP/UDP將消息路由到遠程的syslog服務器中;
    將其發送到一個標準輸出中,例如控制檯。

在 rsyslog裏, syslog的配置是基於以下模式進行結構化的。

    [facility-level].[severity-level] [destination]

在Linux中配置Rsyslog

在我們理解syslog之後,現在可以通過rsyslog來將一個Linux服務器配置爲一箇中心syslog服務器了,另外我們也將看到如何在一個Windows的系統上配置一個syslog客戶端來發送內部日誌到該syslog服務器中。

第1步: 初始化系統需求

要將linux主機設置爲一箇中央日誌服務器, 我們需要創建一個分離的 /var 分區,並分配足夠大的磁盤空間或者創建一個特殊的LVM卷組。這樣就會使得syslog服務器能夠承擔在日積月累收集日誌所帶來的潛在增長。

第2步: 讓rsyslog 後臺進程生效

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步:創建日誌接收模板

接下來的這步,需要我們來爲遠程消息創建模板,並告知rsyslog守護進程如何記錄從其他客戶端機器所接受到的消息。

使用文本編輯器來打開 /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守護進程並編輯好配置文件之後,需要重啓該守護進程。

在 Debian,Ubuntu 或 CentOS/RHEL 6中:

    $ sudo service rsyslog restart 

在 Fedora 或 CentOS/RHEL 7中:

    $ sudo systemctl restart rsyslog 

我們可以通過netstat命令來驗證rsyslog守護進程是否正常工作。

    $ sudo netstat -tulpn | grep rsyslog 

在UDP監聽端口下工作的rsyslog守護進程會有類似下面的輸出。

    udp 0 0 0.0.0.0:514 0.0.0.0:* 551/rsyslogd
    udp6 0 0 :::514 :::* 551/rsyslogd 

如果rsyslog守護進程被設置在TCP連接端口,那麼應該有類似下面所示的輸出。

    tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1891/rsyslogd
    tcp6 0 0 :::514 :::* LISTEN 1891/rsyslogd

發送Windows日誌到一個遠程的rsyslog服務器

要將一個Windows客戶端的日誌消息轉發到我們的rsyslog服務器,需要一個安裝 Windows syslog 代理。當然,有許多的syslog代理可以在windows上運行,在此我們可以使用一個自由軟件程序 Datagram SyslogAgent.

在下載安裝該syslog代理後,需要將其配置爲作爲服務運行。指定使用何種協議來發送數據,以及遠程rsyslog服務器的IP地址和端口,最後指定應該傳輸的事件日誌類型,如下所示。

Linux配置syslog服務器及CentOS配置rsyslog客戶端遠程記錄日誌

在我們完成所有的這些配置之後,我們就可以啓動該服務並且在中央rsyslog服務器中使用命令行工具tail -f來查看日誌文件了。
總結

通過創建一個可以收集本地和遠程主機的中央rsyslog服務器,我們可以更好地瞭解在這些系統內部究竟發生着什麼,而且可以更加容易地調試它們的問題,是否在它們之間有任何延遲或崩潰存在。


CentOS上配置rsyslog客戶端用以遠程記錄日誌

rsyslog是一個開源工具,被廣泛用於Linux系統以通過TCP/UDP協議轉發或接收日誌消息。rsyslog守護進程可以被配置成兩種環境,一種是配置成日誌收集服務器,rsyslog進程可以從網絡中收集其它主機上的日誌數據,這些主機會將日誌配置爲發送到另外的遠程服務器。rsyslog的另外一個用法,就是可以配置爲客戶端,用來過濾和發送內部日誌消息到本地文件夾(如/var/log)或一臺可以路由到的遠程rsyslog服務器上。

假定你的網絡中已經有一臺已經配置好並啓動的rsyslog服務器,本指南將爲你展示如何來設置CentOS系統將其內部日誌消息路由到一臺遠程rsyslog服務器上。這將大大改善你的系統磁盤空間的使用,尤其是當你還沒有一個用於/var目錄的獨立的大分區。

Linux配置syslog服務器及CentOS配置rsyslog客戶端遠程記錄日誌

步驟一: 安裝Rsyslog守護進程

在CentOS 6和7上,rsyslog守護進程已經預先安裝了。要驗證rsyslog是否已經安裝到你的CentOS系統上,請執行如下命令:

    # rpm -qa | grep rsyslog
    # rsyslogd -v 

Linux配置syslog服務器及CentOS配置rsyslog客戶端遠程記錄日誌

如果處於某種原因,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來加密日誌消息的傳輸。


發佈了24 篇原創文章 · 獲贊 29 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章