協議的用途:對所要傳輸的數據進行一種約定。
二、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.一、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部分,這部分的內容是應用程序自定義的。ide