协议的用途:对所要传输的数据进行一种约定。

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部分,这部分的内容是应用程序自定义的。