Syslog協議日志格式翻譯


通用日志格式規范(參考 RFC5424 Syslog協議)

下面是RFC5424 Syslog協議關於信息格式的定義。

Syslog信息的格式定義

# 一條信息的構成
SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG]  # 最后的MSG是可省略的
# HEADER = 優先級 版本 空格 時間戳 空格 主機名 空格 應用名 空格 進程id 空格 信息id
HEADER = PRI VERSION SP TIMESTAMP SP HOSTNAME
SP APP-NAME SP PROCID SP MSGID
# PRI優先級
PRI = "<" PRIVAL ">" # 優先級 <0>
# PRI優先級的值
PRIVAL = 1*3DIGIT ; range 0 .. 191 # 3位數字, 0到191
# syslog版本號
VERSION = NONZERO-DIGIT 0*2DIGIT # 默認為 RFC5424默認為1
# 主機名
HOSTNAME = NILVALUE / 1*255PRINTUSASCII # - 或 255位可打印ASCII值
# 應用名
APP-NAME = NILVALUE / 1*48PRINTUSASCII # - 或 48位可打印ASCII值
# 進程ID
PROCID = NILVALUE / 1*128PRINTUSASCII # - 或 128位可打印ASCII值
# 信息ID
MSGID = NILVALUE / 1*32PRINTUSASCII # - 或 32位可打印ASCII值
# 時間戳
TIMESTAMP = NILVALUE / FULL-DATE "T" FULL-TIME # - 或 "0000-00-00"
# 完整日期格式
FULL-DATE = DATE-FULLYEAR "-" DATE-MONTH "-" DATE-MDAY # "0000-00-00"
# 年
DATE-FULLYEAR = 4DIGIT # 四位數字
# 月
DATE-MONTH = 2DIGIT ; 01-12 # 兩位數字
# 日
DATE-MDAY = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year
# 完整時間(帶時區)
FULL-TIME = PARTIAL-TIME TIME-OFFSET
# 時間(不帶時區)
PARTIAL-TIME = TIME-HOUR ":" TIME-MINUTE ":" TIME-SECOND # 23:59:59
[TIME-SECFRAC]
# 小時
TIME-HOUR = 2DIGIT ; 00-23 # 兩位數字
# 分
TIME-MINUTE = 2DIGIT ; 00-59 # 兩位數字
# 秒
TIME-SECOND = 2DIGIT ; 00-59 # 兩位數字
# 時間的小數部分
TIME-SECFRAC = "." 1*6DIGIT # 6位數字
TIME-OFFSET = "Z" / TIME-NUMOFFSET # 相對於標准時區的偏移, "Z" 或 +/- 23:59
# 相對於便准時區的偏移
TIME-NUMOFFSET = ("+" / "-") TIME-HOUR ":" TIME-MINUTE # +/- 23:59
# 結構化數據
STRUCTURED-DATA = NILVALUE / 1*SD-ELEMENT # - 或 SD-ELEMENT
SD-ELEMENT = "[" SD-ID *(SP SD-PARAM) "]" # [SD-ID*( PARAM-NAME="PARAM-VALUE")]
SD-PARAM = PARAM-NAME "=" %d34 PARAM-VALUE %d34 # PARAM-NAME="PARAM-VALUE"
SD-ID = SD-NAME # SD-ID
PARAM-NAME = SD-NAME # 參數名
PARAM-VALUE = UTF-8-STRING # utf-8字符, '"', '\' 和 ']'必須被轉義
SD-NAME = 1*32PRINTUSASCII # 1到32位可打印ascii值,除了'=',空格, ']', 雙引號(")
MSG = MSG-ANY / MSG-UTF8 # 信息
MSG-ANY = *OCTET ; not starting with BOM # 八進制字符串 不以BOM開頭
MSG-UTF8 = BOM UTF-8-STRING # utf-8格式字符串
BOM = %xEF.BB.BF # 表明編碼方式,以 EF BB BF開頭表明utf-8編碼
UTF-8-STRING = *OCTET # RFC 3629規定的字符
OCTET = %d00-255 # ascii
SP = %d32 # 空格
PRINTUSASCII = %d33-126 # ascii值的33-126,即數字、大小寫字母、標點符號
NONZERO-DIGIT = %d49-57 # ascii的49-57
DIGIT = %d48 / NONZERO-DIGIT # ascii的48-57
NILVALUE = "-" # 無對應值

對定義的解釋

  1. PRI(優先級)
    優先級使用"<"和">"括起來,中間是1到3位數字,優先PRIVAL是具體的數值,由設備編號和日志等級兩部份通過計算獲得,計算公式為:
    PRIVAL = Facility * 8 + severity
    例如"local use 4"信息(Facility=20) 的日志級別是Notice (Severity=5),那么優先級是20 * 8 + 5 = 165

    # 設備編號
          Numerical             Facility
             Code
    
              0             kernel messages
              1             user-level messages
              2             mail system
              3             system daemons
              4             security/authorization messages
              5             messages generated internally by syslogd
              6             line printer subsystem
              7             network news subsystem
              8             UUCP subsystem
              9             clock daemon
             10             security/authorization messages
             11             FTP daemon
             12             NTP subsystem
             13             log audit
             14             log alert
             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)
    # 日志等級
           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
    
  2. VERSION
    VERSION指的是Syslog協議的版本RFC5424用的是版本號是"1"。

  3. TIMESTAMP

    • "T"、"Z"字母必須大寫
    • "T"是必需的
    • 不能使用閏秒
    • 如果無法找到時間戳,要使用"-"代替
    # 例1
    1985-04-12T23:20:50.52Z
    # 例2
    1985-04-12T19:20:50.52-04:00
    # 例3
    2003-10-11T22:14:15.003Z
    # 例4
    2003-08-24T05:14:15.000003-07:00
    # 無效的時間戳,小數點后只能保留6位
    2003-08-24T05:14:15.000000003-07:00
    
  4. HOSTNAME主機名
    主機名的寫法應當優先選用下面的寫法:

    1. FQDN 完全合格域名/全稱域名
    2. Static IP address 靜態IP
    3. hostname 主機名
    4. Dynamic IP address 動態ip
    5. the NILVALUE "-"
  5. APP-NAME
    APP-NAME用於識別產生信息的設備或應用,如果無法得知生成設備或應用,則使用"-"代替。

  6. PROID
    PROID的值一般為進程名稱或進程ID,如果無法得知,則使用"-"代替。PROID常用於分析盡日志生成進程的連續性,但並不是十分可靠,因為重啟了進程之后可能還會分配到與原來相同的ID。

  7. MSGID
    MSGID用於識別信息的類型,例如"TCPIN"和"TCPOUT"分別代表TCP數據的流入和流出。如果無法得知類型則使用"-"代替。

  8. STRUCTURED-DATA
    STRUCTURED-DATA提供了一種記錄被良好定義易於被解析的數據的數據格式。例如它可以用於記錄系統的元信息或應用相關的信息。
    STRUCTURED-DATA可以包含零到多條結構化數據,每條結構化數據也被稱作"SD-ELEMENT",如果包含0條信息,則必須使用"-"作為占位符。

    1. SD-ELEMENT由名字和鍵值對參數組成,名字被稱作"SD-ID",鍵值對被稱作"SD-PARAM"。
    2. SD-ID在一條信息中必須唯一,用於識別SD-ELEMENT的類型和目的
    3. SD-PARAM由PARAM-NAME和PARAM-VALUE組成,IANA定義了所有可用的SD-ID和PARAM
    4. 例子
    # 有效例子1
    [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]
    # 有效例子2:兩個SD-ELEMENT
    [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]    [examplePriority@32473 class="high"]
    # 無效例子:兩個SD-ELEMENT之間不能用空格
    [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"][examplePriority@32473 class="high"]
    # 無效例子:左括號之后不能有空格
    [ exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"][examplePriority@32473 class="high"]
    # 有效例子
    [sigSig ver="1" rsID="1234" ... signature="..."]
    
  9. MSG
    MSG沒有固定的格式,應當使用unicode字符集,utf-8的編碼方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM