使用rsyslog收集日誌

爲何使用rsyslog?服務器

    1.他是POSIX-like系統中標準的logging,有些軟件,好比haproxy,只使用syslog。因此你不能徹底消除它網絡

    2.經過網絡硬件被使用app

    3.它有更復雜的設置,但更多的功能比競爭對手的更好。例如,Elastic Filebeat仍然不能使用inofity異步

    4.低內存的使用。async

    5.容許在保存和轉發以前更改消息ide

    6.相比rsyslog的功能更加全面
性能


rsyslog使用的協議爲:syslog.加密

image.png

消息格式spa

    經過網絡傳輸的syslog消息看起來是這樣的:日誌

    <PRI> TIMESTAMP HOST TAG MSG

    PRI:優先級。facility * 8 + severity  

    facility:0-23         severity:級別

    TIMESTAMP:時間格式

    HOST:主機名

    tag:包含生成消息的程序的名稱

    msg:消息

    

rsyslog日誌收集的主體流程:

    客戶端(input--->filter---->output)===網絡傳輸===>服務端(input--->filter---->output)


客戶端配置解析:

        input:

                image.png

                主要選項:

                    tag:指定這個值的做用是在template中指定rsyslogtag內容,而後傳遞給服務端用於區分文件名。

                    facility:能夠不指定,默認就是local0,這個數據會傳遞到服務端用於作條件判斷

                涉及到讀取通配符設置的日誌文件和多行讀取:

                     1.爲何使用通配符設置日誌文件:若是一個目錄下有不少日誌文件,你都像傳輸到遠程主機去,此時能夠設置如上面的第一行:

                      格式爲:

                            image.png

                            說明:使用*匹配全部文件,此時匹配的是整個路徑,並開啓元數據,這樣元數據就會附加到消息中。而後再filter的過程當中使用re_extract過濾整個路徑只剩下文件名,而後將這個文件名附                         加給一個局部屬性,最後將這個局部屬性附加到template,並和對應的tag部分想結合組成新的tag部分。

                    固然也能夠不使用,如第2,3個將指定的日誌文件傳輸到遠程主機。

                   

                    2.日誌多行處理:

                        使用多行消息的文件imfile提供3個選項

                        readMode=1消息被空字符串分割

                        readMode=2新消息從行首的rhe開始。若是行是從空格或表格開始的,它就是消息的一部分。堆棧跟蹤一般是這樣的

                        startmsg.regex經過regexp(POSIX Extended)定義新消息

                        前兩個選項在inotify模式下有問題,第三個選項能夠所有替換爲正確的regexp,因此咱們會使用它。讀取多行日誌有一個微妙之處。新消息標記一般放在消息的第一行。所以,在新消息開始以前,咱們不能肯定最後一條消息是否完整。由於最後一條消息可能永遠不會被傳輸。爲了不這種狀況,咱們設置參數readTimeout,在此秒數以後,最後一條消息被認爲已經完成。

                          image.png

    filter  and output:

           上面的input部分已經指定了ruleset規則集,裏面能夠包含多個操做,操做裏面能夠引用不一樣的template,同時能夠指定傳輸的類型,在template中能夠指定要傳輸的日誌格式。格式之間可能有空格。

            template有多種用法:

                    1.在客戶端指定傳輸的日誌格式

                     2.在服務端指定日誌的保存的路徑已經文件名

            此處使用RELP模塊進行傳輸而不是UDP或TCP

                    緣由:若是消息是使用rsyslog在主機之間傳輸的,那麼可使用RELP ,l而不是普通的TCP。它是爲rsyslog建立的,如今其餘一些系統也支持它。例如,它由Logstash和Graylog支持。使用TCP                 進行傳輸。能夠選擇使用TLS加密消息。它比普通的TCP syslog更可靠,由於它不會在鏈接中斷時丟失消息。它解決了多行消息的問題。

            image.png

            

server:                         

        input:使用imRELP模塊接收日誌並指定相應的規則集。而且引用指定模塊消除msg以前的空格。

            讓咱們加載全部必要的模塊並關閉$EscapeControlCharactersOnReceive,不然咱們將在接收到的消息中使用\n而不是新行.

            固定的格式:設置目錄和文件的權限。

            以下爲指定的格式,通常不須要修改:

             image.png       

    filter and    寫入新文件:       

        如今讓咱們建立規則集來解析傳入的消息並將其保存到適當的文件和文件夾中。依賴於syslog的服務指望節省消息時間和其餘syslog字段。所以,具備標準功能的消息以syslog格式保存。對於具備local0-local7功能的消息,咱們將從tag中生成文件名,並保存沒有其餘syslog字段的純消息。消息前面有額外空間的問題仍然存在,由於它出如今消息解析階段。咱們會把它剪掉。

        爲了提升性能,咱們將使用異步寫:asyncwrite ="on"和大緩衝區:ioBufferSize=64k。咱們不會在每一個接收到的消息:flushOnTXEnd="off"以後刷新緩衝區,可是咱們將每秒刷新一次,以便在日誌服務器上擁有新日誌:flushInterval="1"

            說明:消息從上面的imRELP模塊進行以後,進入以下的規則集,而後進行判斷,並根據客戶端傳遞過來的tag部分而後使用replace和field方法進行分割並賦值個appname和logpath,而後進入操做,類型是寫入文件,文件名是根據dynaFile獲取,template指定常規模塊,將日誌寫入到文件。

          image.png


        如上action裏面的dynaFile指定生成動態的文件路徑的template。temolate部分以下:

          image.png


       另外還有隊列,不過多說明。

相關文章
相關標籤/搜索