6. Syslog メッセージ形式
Syslog メッセージは次の ABNF で定義される。
SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG]
HEADER = PRI VERSION SP TIMESTAMP SP HOSTNAME
SP APP-NAME SP PROCID SP MSGID
PRI = "<" PRIVAL ">"
PRIVAL = 1*3DIGIT ; range 0 .. 191
VERSION = NONZERO-DIGIT 0*2DIGIT
HOSTNAME = NILVALUE / 1*255PRINTUSASCII
APP-NAME = NILVALUE / 1*48PRINTUSASCII
PROCID = NILVALUE / 1*128PRINTUSASCII
MSGID = NILVALUE / 1*32PRINTUSASCII
TIMESTAMP = NILVALUE / FULL-DATE "T" FULL-TIME
FULL-DATE = DATE-FULLYEAR "-" DATE-MONTH "-" DATE-MDAY
DATE-FULLYEAR = 4DIGIT
DATE-MONTH = 2DIGIT ; 01-12
DATE-MDAY = 2DIGIT ; 01-28, 01-29, 01-30, 01-31
FULL-TIME = PARTIAL-TIME TIME-OFFSET
PARTIAL-TIME = TIME-HOUR ":" TIME-MINUTE ":" TIME-SECOND
[TIME-SECFRAC]
TIME-HOUR = 2DIGIT ; 00-23
TIME-MINUTE = 2DIGIT ; 00-59
TIME-SECOND = 2DIGIT ; 00-59
TIME-SECFRAC = "." 1*6DIGIT
TIME-OFFSET = "Z" / TIME-NUMOFFSET
TIME-NUMOFFSET = ("+" / "-") TIME-HOUR ":" TIME-MINUTE
STRUCTURED-DATA = NILVALUE / 1*SD-ELEMENT
SD-ELEMENT = "[" SD-ID *(SP SD-PARAM) "]"
SD-PARAM = PARAM-NAME "=" %d34 PARAM-VALUE %d34
SD-ID = SD-NAME
PARAM-NAME = SD-NAME
PARAM-VALUE = UTF-8-STRING
SD-NAME = 1*32PRINTUSASCII
MSG = MSG-ANY / MSG-UTF8
MSG-ANY = *OCTET
MSG-UTF8 = BOM UTF-8-STRING
BOM = %xEF.BB.BF
UTF-8-STRING = *OCTET
OCTET = %d00-255
SP = %d32
PRINTUSASCII = %d33-126
NONZERO-DIGIT = %d49-57
DIGIT = %d48 / NONZERO-DIGIT
NILVALUE = "-"
メッセージは次の要素から構成される。
- HEADER: メッセージのメタデータ(優先度、版、時刻印、発信元情報)を含む。
- STRUCTURED-DATA: 名前と値の組で表す任意の構造化情報。
- MSG: 任意の自由形式メッセージ内容。
6.1. メッセージ長
UDP 転送における Syslog メッセージは 480 オクテットを超えてはならない(MUST NOT)。これは制約のあるネットワーク実装との互換性を確保するためである。
Syslog 受信者は、480 オクテットまでのメッセージを受け入れ可能でなければならない(MUST)。受信者は、2048 オクテットまでのメッセージを受け入れられるべきである(SHOULD)。
Syslog 送信者は、480 オクテットを超えるメッセージを送信しても MAY よい。ただし必要に応じて、メッセージの切詰めまたは分割機構を実装することが SHOULD である。
転送マッピングは異なる最大メッセージサイズを規定しても MAY よい。たとえば TLS 転送では通常、はるかに大きなメッセージを許可する。
メッセージ長は文字数ではなくオクテット数で測定する。UTF-8 の符号化では、1 文字が複数オクテットになる場合がある。
6.2. HEADER
HEADER は、次のフィールドをこの厳密な順序で含む。
6.2.1. PRI
PRI 部は、山括弧で囲んだ Priority 値を含む。Priority 値は Facility 値と Severity 値から次のように計算する。
Priority = Facility * 8 + Severity
Facility 値:
| 値 | Facility |
|---|---|
| 0 | カーネルメッセージ |
| 1 | ユーザーレベルメッセージ |
| 2 | メールシステム |
| 3 | システムデーモン |
| 4 | セキュリティ/認可メッセージ |
| 5 | syslogd が内部で生成するメッセージ |
| 6 | ラインプリンタサブシステム |
| 7 | ネットワークニュースサブシステム |
| 8 | UUCP サブシステム |
| 9 | 時計デーモン |
| 10 | セキュリティ/認可メッセージ |
| 11 | FTP デーモン |
| 12 | NTP サブシステム |
| 13 | ログ監査 |
| 14 | ログ警報 |
| 15 | 時計デーモン |
| 16–23 | ローカル使用 0–7(local0 – local7) |
Severity 値:
| 値 | Severity | 説明 |
|---|---|---|
| 0 | Emergency | システムが使用不能 |
| 1 | Alert | 直ちに対処が必要 |
| 2 | Critical | 重大な状態 |
| 3 | Error | エラー状態 |
| 4 | Warning | 警告状態 |
| 5 | Notice | 通常だが重要な状態 |
| 6 | Informational | 情報メッセージ |
| 7 | Debug | デバッグレベルのメッセージ |
例: Facility 4(セキュリティ/認可)、Severity 2(Critical)のメッセージの Priority 値は次のとおりである。
Priority = 4 * 8 + 2 = 34
PRI = "<34>"
PRI 値は 0 から 191 の範囲でなければならない(MUST)。
6.2.2. VERSION
VERSION フィールドは Syslog プロトコルの版を示す。本書は版 1 を定義する。VERSION 値は 1–999 の範囲にあるゼロ以外の整数でなければならない(MUST)。
6.2.3. TIMESTAMP
TIMESTAMP フィールドは、メッセージ生成時を示す書式化された時刻印である。記述するイベントが発生した時刻を表すことが SHOULD である。
時刻印形式は RFC 3339 に基づき、次の要件を適用する。
- 日付は YYYY-MM-DD 形式
- 時刻区切りは
T - 時刻は HH:MM:SS 形式(24 時間制)
- 任意の小数秒(最大 6 桁)
- タイムゾーンオフセット(UTC の
Zまたは+/-HH:MM)
例:
2003-10-11T22:14:15.003Z
2003-08-24T05:14:15.000003-07:00
2009-03-12T18:53:01+00:00
発信者が時刻を知らない場合、NILVALUE(-)を使用しなければならない(MUST)。
推奨事項:
- 一貫性のため、可能な場合は UTC タイムゾーン(
Z)を使用する。 - 精度が重要な場合は小数秒を含める。
- 正確な時刻印のため時刻同期(NTP)を確保する。
6.2.4. HOSTNAME
HOSTNAME フィールドは、Syslog メッセージを最初に生成した機器を識別する。次のいずれかを含めるべきである(SHOULD)。
- 完全修飾ドメイン名(FQDN)— 推奨
- 静的 IP アドレス
- ホスト名
- 動的 IP アドレス
- 不明な場合は NILVALUE(
-)
最も正確に識別できるため、FQDN が推奨の形式である。
IPv6 アドレスを使用する場合、角括弧で囲むことが SHOULD である。
最大長は、印字可能な ASCII 文字 255 文字である。
6.2.5. APP-NAME
APP-NAME フィールドは、メッセージを生成した機器またはアプリケーションを識別する。空白を含まない自由形式文字列である。
例:
myapp
su
postfix/smtpd
最大長は、印字可能な ASCII 文字 48 文字である。
APP-NAME が不明な場合は、NILVALUE(-)を使用する。
6.2.6. PROCID
PROCID フィールドは、プロセスを開始または再開始するたびに変化する値である。通常は次を含む。
- Unix 系システムのプロセス ID(PID)
- スレッド ID
- プロセス名
- その他の一意な識別子
例:
12345
thread1
-
最大長は、印字可能な ASCII 文字 128 文字である。
PROCID を使用しない場合は、NILVALUE(-)に設定する。
6.2.7. MSGID
MSGID フィールドはメッセージ種別を識別する。自動解析およびルーティングに使用できる、空白を含まない自由形式文字列である。
例:
ID47
TCPIN
login-failure
config-change
最大長は、印字可能な ASCII 文字 32 文字である。
MSGID を使用しない場合は、NILVALUE(-)に設定する。
6.3. STRUCTURED-DATA
STRUCTURED-DATA は、情報を構造化され解析しやすい形式で表現する機構を提供する。1 個以上の SD-ELEMENT から構成される。
6.3.1. SD-ELEMENT
SD-ELEMENT は次から構成される。
- SD-ID(識別子)
- 0 個以上の SD-PARAM(パラメータ)
形式: [SD-ID PARAM1="value1" PARAM2="value2" ...]
6.3.2. SD-ID
SD-ID は要素の種別および目的を一意に識別する。
IANA 登録 SD-ID: =、]、"、空白を除く印字可能な ASCII 文字から構成される。
私用企業 SD-ID: 企業番号が IANA に登録されている name@<private enterprise number> の形式でなければならない。
例:
timeQuality
origin
myCompany@32473
6.3.3. SD-PARAM
各 SD-PARAM は名前と値の組である。
PARAM-NAME="PARAM-VALUE"
PARAM-VALUE は UTF-8 で符号化されなければならない(MUST)。特殊文字はエスケープする。
"は\"になる。\は\\になる。]は\]になる。
例:
[exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]
同じパラメータ名について複数の値を使用するには、そのパラメータを繰り返してよい。
[example ip="192.0.2.1" ip="192.0.2.2"]
6.3.4. 変更管理
新しい SD-ID は IANA を通じて登録できる。詳細は第 9 節を参照する。
私用企業は、登録済みの企業番号を使用して、登録なしで私用 SD-ID を作成できる。
6.3.5. 例
単一の SD-ELEMENT:
[exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]
複数の SD-ELEMENT:
[exampleSDID@32473 iut="3"][examplePriority@32473 class="high"]
構造化データなし:
-
6.4. MSG
MSG 部は自由形式のメッセージテキストを含む。次の二つの形式をとれる。
- MSG-ANY: 任意のオクテット列
- MSG-UTF8: BOM(Byte Order Mark:
0xEF 0xBB 0xBF)を前置した UTF-8 文字列
MSG が UTF-8 BOM で始まる場合、収集器またはリレーは、MSG が UTF-8 で符号化されていると仮定することが SHOULD である。そうでない場合、符号化は指定されない。
MSG 部は任意である。存在しない場合、メッセージ末尾の前に SP は置かない。
推奨事項:
- 国際文字を一貫して扱うため、BOM を伴う UTF-8 符号化を使用する。
- 改行や他の制御文字を含めない。
- 重要な情報はメッセージの先頭側(最初の 480 オクテット以内)に置く。
6.5. 例
例 1: すべてのフィールドおよび構造化データを含む完全なメッセージ
<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] BOMsystem crashed
例 2: NILVALUE フィールドを含むメッセージ
<165>1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts.
例 3: UTF-8 内容および複数の SD-ELEMENT を含むメッセージ
<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"][examplePriority@32473 class="high"] BOMAn application event log entry...
例 4: 最小メッセージ(緊急カーネルメッセージ)
<0>1 2009-03-12T18:53:01+00:00 server1 kernel - - - System will shutdown