flume1.6 + syslogtcp + kafka 日誌採集(一)

1.什麼是syslog

在網上搜的文章,寫的很全乎。摘抄以下,供你們參考學習安全

一、介紹服務器

    在Unix類操做系統上,syslog普遍應用於系統日誌。syslog日誌消息既能夠記錄在本地文件中,也能夠經過網絡發送到接收syslog的服務器。接收syslog的服務器能夠對多個設備的syslog消息進行統一的存儲,或者解析其中的內容作相應的處理。常見的應用場景是網絡管理工具、安全管理系統、日誌審計系統。網絡

    完整的syslog日誌中包含產生日誌的程序模塊(Facility)、嚴重性(Severity或 Level)、時間、主機名或IP、進程名、進程ID和正文。在Unix類操做系統上,可以按Facility和Severity的組合來決定什麼樣的日誌消息是否須要記錄,記錄到什麼地方,是否須要發送到一個接收syslog的服務器等。因爲syslog簡單而靈活的特性,syslog再也不僅限於 Unix類主機的日誌記錄,任何須要記錄和發送日誌的場景,均可能會使用syslog。工具

    長期以來,沒有一個標準來規範syslog的格式,致使syslog的格式是很是隨意的。最壞的狀況下,根本就沒有任何格式,致使程序不能對syslog 消息進行解析,只能將它看做是一個字符串。學習

在2001年定義的RFC3164中,描述了BSD syslog協議:
http://www.ietf.org/rfc/rfc3164.txt
    不過這個規範的不少內容都不是強制性的,經常是「建議」或者「約定」,也因爲這個規範出的比較晚,不少設備並不遵照或不徹底遵照這個規範。接下來就介紹一 下這個規範。spa

    約定發送syslog的設備爲Device,轉發syslog的設備爲Relay,接收syslog的設備爲Collector。Relay自己也能夠發送自身的syslog給Collector,這個時候它表現爲一個Device。Relay也能夠只轉發部分接收到的syslog消息,這個時候它同時表現爲Relay和Collector。操作系統

    syslog消息發送到Collector的UDP 514端口,不須要接收方應答,RFC3164建議 Device 也使用514做爲源端口。規定syslog消息的UDP報文不能超過1024字節,而且所有由可打印的字符組成。完整的syslog消息由3部分組成,分別是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分,而HEADER可能沒有。.net

二、syslog的格式debug

    下面是一個syslog消息:
<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.
    其中「<30>」是PRI部分,「Oct 9 22:33:20 hlfedora」是HEADER部分,「auditd[1787]: The audit daemon is exiting.」是MSG部分。日誌

2.一、PRI部分 
    PRI部分由尖括號包含的一個數字構成,這個數字包含了程序模塊(Facility)、嚴重性(Severity),這個數字是由Facility乘以 8,而後加上Severity得來。不知道他們爲何發明了這麼一種不直觀的表示方式。
也就是說這個數字若是換成2進制的話,低位的3個bit表示Severity,剩下的高位的部分右移3位,就是表示Facility的值。
十進制30 = 二進制0001 1110
0001 1... = Facility: DAEMON - system daemons (3)
.... .110 = Severity: INFO - informational (6)

Facility的定義以下,能夠看出來syslog的Facility是早期爲Unix操做系統定義的,不過它預留了User(1),Local0~7 (16~23)給其餘程序使用:

      Numerical             Facility
         Code

          0             kernel messages
          1             user-level messages
          2             mail system
          3             system daemons
          4             security/authorization messages (note 1)
          5             messages generated internally by syslogd
          6             line printer subsystem
          7             network news subsystem
          8             UUCP subsystem
          9             clock daemon (note 2)
         10             security/authorization messages (note 1)
         11             FTP daemon
         12             NTP subsystem
         13             log audit (note 1)
         14             log alert (note 1)
         15             clock daemon (note 2)
         16             local use 0  (local0)
         17             local use 1  (local1)
         18             local use 2  (local2)
         19             local use 3  (local3)
         20             local use 4  (local4)
         21             local use 5  (local5)
         22             local use 6  (local6)
         23             local use 7  (local7)

       Note 1 - Various operating systems have been found to utilize
          Facilities 4, 10, 13 and 14 for security/authorization,
          audit, and alert messages which seem to be similar.
       Note 2 - Various operating systems have been found to utilize
          both Facilities 9 and 15 for clock (cron/at) messages.

Severity的定義以下:

       Numerical         Severity
        Code

         0       Emergency: system is unusable
         1       Alert: action must be taken immediately
         2       Critical: critical conditions
         3       Error: error conditions
         4       Warning: warning conditions
         5       Notice: normal but significant condition
         6       Informational: informational messages
         7       Debug: debug-level messages

    也就是說,尖括號中有1~3個數字字符,只有當數字是0的時候,數字才以0開頭,也就是說00和01這樣在前面補0是不容許的。

2.二、HEADER部分 
    HEADER部分包括兩個字段,時間和主機名(或IP)。
    時間緊跟在PRI後面,中間沒有空格,格式必須是「Mmm dd hh:mm:ss」,不包括年份。「日」的數字若是是1~9,前面會補一個空格(也就是月份後面有兩個空格),而「小時」、「分」、「秒」則在前面補「0」。月份取值包括:
Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec

    時間後邊跟一個空格,而後是主機名或者IP地址,主機名不得包括域名部分。

    由於有些系統須要將日誌長期歸檔,而時間字段又不包括年份,因此一些不標準的syslog格式中包含了年份,例如:
<165>Aug 24 05:34:00 CST 1987 mymachine myproc[10]: %% It's
time to make the do-nuts. %% Ingredients: Mix=OK, Jelly=OK #
Devices: Mixer=OK, Jelly_Injector=OK, Frier=OK # Transport:
Conveyer1=OK, Conveyer2=OK # %%
    這樣會致使解析程序將「CST」看成主機名,而「1987」開始的部分做爲MSG部分。解析程序面對這種問題,可能要作不少容錯處理,或者定製能解析多種syslog格式,而不只僅是隻能解析標準格式。

HEADER部分後面跟一個空格,而後是MSG部分。
    有些syslog中沒有HEADER部分。這個時候MSG部分緊跟在PRI後面,中間沒有空格。

2.三、MSG部分 
    MSG部分又分爲兩個部分,TAG和Content。其中TAG部分是可選的。
    在前面的例子中(「<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.」),「auditd[1787]」是TAG部分,包含了進程名稱和進程PID。PID能夠沒有,這個時候中括號也是沒有的。
    進程PID有時甚至不是一個數字,例如「root-1787」,解析程序要作好容錯準備。

    TAG後面用一個冒號隔開Content部分,這部分的內容是應用程序自定義的。


三、RFC3195 
    BSD syslog協議使用UDP協議在網絡中傳遞,然而UDP是一個不可靠的協議,而且syslog也沒有要求接收方有所反饋。爲了解決這個問題,RFC又定義了一個新的規範來可靠的傳遞syslog消息,它使用TCP協議:
http://www.ietf.org/rfc/rfc3195.txt
    不過大多數狀況下,使用UDP發送不須要確認的syslog消息,已經可以知足要求了,而且這樣作很是簡單。所以到目前爲止,RFC3195的應用仍是不多見的。

轉自:http://blog.csdn.net/xcj0535/archive/2009/05/07/4158624.aspx

相關文章
相關標籤/搜索