メインコンテンツまでスキップ

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セキュリティ/認可メッセージ
5syslogd が内部で生成するメッセージ
6ラインプリンタサブシステム
7ネットワークニュースサブシステム
8UUCP サブシステム
9時計デーモン
10セキュリティ/認可メッセージ
11FTP デーモン
12NTP サブシステム
13ログ監査
14ログ警報
15時計デーモン
16–23ローカル使用 0–7(local0 – local7)

Severity 値:

Severity説明
0Emergencyシステムが使用不能
1Alert直ちに対処が必要
2Critical重大な状態
3Errorエラー状態
4Warning警告状態
5Notice通常だが重要な状態
6Informational情報メッセージ
7Debugデバッグレベルのメッセージ

例: 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)。

  1. 完全修飾ドメイン名(FQDN)— 推奨
  2. 静的 IP アドレス
  3. ホスト名
  4. 動的 IP アドレス
  5. 不明な場合は 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 部は自由形式のメッセージテキストを含む。次の二つの形式をとれる。

  1. MSG-ANY: 任意のオクテット列
  2. 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