syslog格式記錄

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

不過這個規範的很多內容都不是強制性的,常常是“建議”或者“約定”,也由於這個規範出的比較晚,很多設備並不遵守或不完全遵守這個規範。接下來就介紹一 下這個規範。

約 定發送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可能沒有。

2、syslog的格式
下面是一個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.1、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.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.3、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部分,這部分的內容是應用程序自定義的。

3、RFC3195
BSD syslog協議使用UDP協議在網絡中傳遞,然而UDP是一個不可靠的協議,並且syslog也沒有要求接收方有所反饋。爲了解決這個問題,RFC又定 義了一個新的規範來可靠的傳遞syslog消息,它使用TCP協議:

http://www.ietf.org/rfc/rfc3195.txt

不過大多數情況下,使用UDP發送不需要確認的syslog消息,已經能夠滿足要求了,並且這樣做非常簡單。因此到目前爲止,RFC3195的應用還是很 少見的。

參考文章
http://blog.gdsyzx.edu.cn/wordpress/?p=299
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章