2019年3月28日木曜日

BSD-syslog メッセージフォーマット【2019/3/28 修正】

<修正:2019年3月28日>-----------
いつも JTC ブログをご利用いただきありがとうございます。
2016年9月13日公開の下記ブログの内容を一部修正し()、再投稿いたしましたので、お知らせいたします。
今後とも JTC ブログをどうぞよろしくお願いいたします。
--------------------------------------------


転送時のsyslogメッセージは分離可能な3つの要素で構成されます。それぞれPRI、HEADER、MSGと呼ばれます。全長は1024バイト以内です。

メッセージフォーマットの3つの要素

PRI

3、4または5文字であり、はじめは "<"、終わりが ">" です。コードは8ビットフィールドの7ビットASCIIが使用されます。これらは"USA Standard Code for Information Interchange"として定義されています。かぎ括弧の間の数はプライオリティでありファシリティとセベリティをあらわします。プライオリティは0から9までの1,2又は3桁の10進数です。
ファシリティとセベリティは10進数の数字コードです。いくつかのOSやデーモンにはにはファシリティがアサインされています。明示的にアサインされていない場合は"local user"ファシリティや"user level"ファシリティをアサインすることができます。これらのファシリティとセベリティは下の表に示します。

プライオリティ値=ファシリティx8 + セベリティです。つまりセベリティがEmergency(セベリティ=0)のカーネルメッセージ(ファシリティ=0)のプライオリティは0です。local user4(ファシリティ=20)のNotice(セベリティ=5)メッセージは165です。SyslogメッセージのPRIはそれぞれ<0>と<165>となります。

 

HEADER

タイムスタンプとホスト名あるいはデバイスIPアドレスを含みます。必ず印刷可能文字です。PRIと同じく8ビットフィールドの7ビットASCIIが使用されます。
TIMESTAMPはPRIの">"に続きます。TAIMESTAMPとHOSTNAMEのあとはひとつのスペースです。HOSTNAMEはホスト名あるいはIPアドレスです。TIMESTAMPはローカル時刻でフォーマットは"Mmm dd hh:mm:ss"です。Mmmは英語3文字の月であり先頭が大文字、それ以降は小文字です。ddは日で10未満はスペース+数字です。8月7日は"Aug  7"でgと7の間にはスペースが2つあります。"hh"は24時間表示の時間であり00から24、"mm"と"ss"は00から59までの分と秒です。TIMESTAMPのあとはひとつのスペースです。HOSTNAMEはホスト名、IPv4アドレス、IPv6アドレスのいずれかです。HOSTNAMEのあとはひとつのスペースです。

 

MSG

Syslogパケットの残りでありテキストメッセージで追加情報を含みます。終了区切りはありません。印字可能文字でなければなりません。文字セットは受信者を考慮できます。受信者が読めない文字では意味がありません。MSGにはTAGとCONTENTの2つのフィールドがあります。TAGフィールドの値はメッセージを生成したプログラムやプロセス名、CONTENTにはメッセージの詳細が含まれます。TAGは32文字以内であり、英数字以外はTAGフィールドの終わりを示します。通常"[",":", " "などが使われます。

例:

<34>Oct 11 22:14:15 mymachine su: 'su root' failed for lonvick on /dev/pts/8

<13>Feb 5 17:32:18 10.0.0.99 Use the BFG!

<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 # %%

※ 2019/3/28 修正
上述のメッセージ例はRFCに準拠していないため、取り消しました



https://www.jtc-i.co.jp/contact/scontact.php