ログ管理
syslogとその周辺 応用編
back top next
■syslog について  ・・・データ形式・・・

syslog のデータ形式は次のようになっています。

  図2     syslogのデータ形式
<PRI>HEADER MESSAGE

全体の長さとしては1024バイト以下でなければなりません。<PRI> と TIMESTAMP の間にはスペースを入れませんが、他の区切りには1つのスペースが必要です。

PRI は facility と priority を表しています。facility はログの種類、priority はログの注目度です。OS によっても多少異なるところはありますが、FreeBSD では次のようになっています。

  表2     FreeBSD の syslog の facility/priority
facility syslog() に与える引数 用途
kern 0 LOG_KERN カーネルメッセージ
user 1 LOG_USER 任意のユーザのメッセージ
mail 2 LOG_MAIL メールシステム
daemon 3 LOG_DAEMON デーモンプログラム
auth 4 LOG_AUTH 認証メッセージ
syslog 5 LOG_SYSLOG syslogd 内部のメッセージ
lpr 6 LOG_LPR ラインプリンタ
news 7 LOG_NEWS ニュース (NetNews)
uucp 8 LOG_UUCP UUCP
cron 9 LOG_CRON cron (clock daemon)
authpriv 10 LOG_AUTHPRIV プライベート認証メッセージ
ftp 11 LOG_FTP FTP
ntp 12 LOG_NTP NTP
security 13 LOG_SECURITY セキュリティ
console 14 LOG_CONSOLE /dev/console 出力
local0 16 LOG_LOCAL0 任意の用途
local1 17 LOG_LOCAL1 任意の用途
local2 18 LOG_LOCAL2 任意の用途
local3 19 LOG_LOCAL3 任意の用途
local4 20 LOG_LOCAL4 任意の用途
local5 21 LOG_LOCAL5 任意の用途
local6 22 LOG_LOCAL6 任意の用途
local7 23 LOG_LOCAL7 任意の用途
priority syslog() に与える引数 用途
emerg 0 LOG_EMERG システムが利用出来ない
alert 1 LOG_ALERT 迅速に対処が必要
crit 2 LOG_CRIT 致命的な状態
err 3 LOG_ERR エラー
warning 4 LOG_WARNING 警告
notice 5 LOG_NOTICE 重要な情報
info 6 LOG_INFO なんらかの情報
debug 7 LOG_DEBUG デバッグ用

facility では 15 の値を取るものがないことに注意してください。

これらの2つの表の値を組み合わせて、PRI の値を決定します。

  図3     PRI の計算方法
29bit 3bit
facility priority

PRI は整数で表現し、図3 のように上位29bitが facility、下位3bitがpriorityを表します。例えば facility が local0、priority が notice のときには、次のように計算します。

PRI = (16 << 3) + 5 = 133

facility と priority は必ず対で指定するため、 '.' で区切って並べて書くのが普通です。この例では local0.notice となります。

PRI に続く HEADER には、TIMESTAMP と HOSTNAME の2つの要素が含まれます。TIMESTAMP には、device がログを生成した時刻を 図4 の形式で表記します。

  図4     TIMESTAMP の形式
Mmm dd hh:mm:ss
--------------------------------------------------------------------------
    Mmm      -- Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
    dd       -- 日付 (1桁のときは2桁に合わせてスペースを入れる)
    hh:mm:ss -- 24時間制ローカル時間

例えば 12月6日 12:34:56 JST の場合では、次のようになります。
Dec  6 12:34:56
"6" は1桁なので、"Dec" と "6" との間には2つのスペースが必要です。

続いて HOSTNAME は、ホスト名もしくは IP アドレスを記述します。 ホスト名にはドメイン名は含めません。
もし TIMESTAMP や HOSTNAME が存在しないデータが回ってきたときには、 relay が適宜補います。*1)

*1) RedHat など Linux の syslogd では、そのまま MESSAGE だけを転送してしまうものもあります。


最後に MESSAGE は、ログメッセージの本文になります。 MESSAGE は TAG と CONTENT の2つの部分からなります。

TAG ではメッセージの出力元やプログラム名を表します。アルファベット以外の文字が表れたときに終わりとなり、通常では ':" や '[' がよく使われます。また、TAG は32文字を超えてはいけません。

CONTENT は TAG に続いて記述され、自由にメッセージを書くことができます。TAG との区切り文字はありません。例えば 図5 のログを見てみますと、TAG は "newsyslog"、CONTENT は "[69183]: logfile turned over" になります。

  図5     ログの例
Dec 6 12:34:56 kei newsyslog[69183]: logfile turned over

CONTENT に含まれる文字列の文字セットは ASCII が推奨されていますが、読み手が限られているときには、CONTENT に限っては日本語などの他の文字セットを使っても構いません。*2)

*2) 市販のルータでは日本語のメッセージを吐くものもあるようです。


また、MESSAGE は存在しなくても syslog のデータとしては正しいものではありますが、意味がありませんので relay や collector は処理をせずに無視してしまうのが普通のようです。

back top next
Copyright(C) 1995-2003 Infoscience Corporation. All rights reserved. 
※このページの内容は 『FreeBSD PRESS No.14 (2003 JANUARY) 毎日コミュニケーションズ刊』 に掲載されたものです。