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

6. Syslog メッセージフォーマット (Syslog Message Format)

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. メッセージ長 (Message Length)

Syslog メッセージは UDP トランスポートで 480 オクテットを超えてはなりません。これにより、制限されたネットワーク実装との互換性が保証されます。

Syslog 受信者は、最大 480 オクテットのメッセージを受け入れることができなければなりません。受信者は、最大 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
0kernel messages
1user-level messages
2mail system
3system daemons
4security/authorization messages
5messages generated internally by syslogd
6line printer subsystem
7network news subsystem
8UUCP subsystem
9clock daemon
10security/authorization messages
11FTP daemon
12NTP subsystem
13log audit
14log alert
15clock daemon
16-23local use 0-7 (local0 - local7)

Severity 値:

Severity説明
0Emergencyシステムは使用不可
1Alert即座にアクションを取る必要がある
2Critical重大な状態
3Errorエラー状態
4Warning警告状態
5Notice通常だが重要な状態
6Informational情報メッセージ
7Debugデバッグレベルメッセージ

例: Facility 4 (security/authorization) と Severity 2 (Critical) を持つメッセージの Priority 値:

Priority = 4 * 8 + 2 = 34
PRI = "<34>"

PRI 値は 0 から 191 の間でなければなりません。

6.2.2. VERSION

VERSION フィールドは syslog プロトコルのバージョンを示します。本文書はバージョン 1 を定義します。VERSION 値は 1-999 の範囲の非ゼロ整数でなければなりません。

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) - 推奨 (RECOMMENDED)
  2. 静的 IP アドレス
  3. ホスト名
  4. 動的 IP アドレス
  5. 不明な場合は NILVALUE ("-")

FQDN は最も正確な識別を提供するため、推奨されるフォーマットです。

IPv6 アドレスを使用する場合、角括弧で囲むべきです (SHOULD)。

最大長: 255 ASCII 印刷可能文字。

6.2.5. APP-NAME

APP-NAME フィールドは、メッセージを生成したデバイスまたはアプリケーションを識別します。スペースのない自由形式の文字列です。

例:

myapp
su
postfix/smtpd

最大長: 48 ASCII 印刷可能文字。

APP-NAME が不明な場合は、NILVALUE ("-") を使用します。

6.2.6. PROCID

PROCID フィールドは、プロセスが開始または再起動されるたびに変更される値です。通常、以下が含まれます:

  • Unix ライクシステムのプロセス ID (PID)
  • スレッド ID
  • プロセス名
  • その他の一意識別子

例:

12345
thread1
-

最大長: 128 ASCII 印刷可能文字。

PROCID が使用されない場合は、NILVALUE ("-") に設定します。

6.2.7. MSGID

MSGID フィールドは、メッセージのタイプを識別します。自動解析とルーティングに使用できる、スペースのない自由形式の文字列です。

例:

ID47
TCPIN
login-failure
config-change

最大長: 32 ASCII 印刷可能文字。

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: name@<private enterprise number> の形式でなければなりません。ここで、エンタープライズ番号は IANA に登録されています。

例:

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. 変更管理 (Change Control)

新しい 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 部分には自由形式のメッセージテキストが含まれます。2 つの可能なフォーマットがあります:

  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