share facebook facebook2 twitter menu hatena pocket slack

2014.08.20 WED

rsyslog でプロパティ毎にログを出し分ける

川原 洋平

WRITTEN BY川原 洋平

どうも、 rsyslog の local ファシリティが 8 個しか使えないのはなぜなんだろうってずーっと思っているかっぱ@inokara)です。

はじめに

local ファシリティはなぜ 8 個なのって純粋な疑問から始まって local ファシリティを使いきった場合にどうするか探してみました。

local ファシリティはなぜ 8 個なの?

RFC 3164 で定義されてます。8 ページ目あたりを御覧下さい。あと、以下のようにソースコードにもカッチリと定義されていますね…。

/usr/include/sys/syslog.h
#ifdef SYSLOG_NAMES
CODE facilitynames[] =
  {
    { "auth",LOG_AUTH },
    { "authpriv", LOG_AUTHPRIV },
    { "cron", LOG_CRON },
    { "daemon", LOG_DAEMON },
    { "ftp", LOG_FTP },
    { "kern", LOG_KERN },
    { "lpr", LOG_LPR },
    { "mail", LOG_MAIL },
    { "mark", INTERNAL_MARK },          /* INTERNAL */
    { "news", LOG_NEWS },
    { "security", LOG_AUTH },          /* DEPRECATED */
    { "syslog", LOG_SYSLOG },
    { "user", LOG_USER },
    { "uucp", LOG_UUCP },
    { "local0", LOG_LOCAL0 },
    { "local1", LOG_LOCAL1 },
    { "local2", LOG_LOCAL2 },
    { "local3", LOG_LOCAL3 },
    { "local4", LOG_LOCAL4 },
    { "local5", LOG_LOCAL5 },
    { "local6", LOG_LOCAL6 },
    { "local7", LOG_LOCAL7 },
    { NULL, -1 }
  };
#endif

はて、では local ファシリティを使いきってしまった時とかどうするんでしょうか…


プロパティで何とかなる

こちら に書かれているように、以下のようにしてプロパティを指定して log の出力を出し分けることが可能なようです。

:syslogtag, contains, "ahoaho" -/var/log/aho.log

上記の syslogtag がプロパティとなります。この例では Syslog のタグに ahoaho が含まれていたら /var/log/aho.log に書き出せという設定となります。この設定を /etc/rsyslog.conf あたりに設定します。他にも指定可能ですのでこちらに書かれている Available Properties をご覧下さい。上記の設定が終わったら rsyslog を再起動します。

そして、以下のように logger を使ってログを吐かせてみます。

logger -t ahoaho "aaaaa"

-t でタグの指定となります。ログが以下のように出力されています。

/var/log/aho.log
Aug 15 21:56:35 ip-xxx-xxx-xxx-xxx ahoaho: aaaaa

おお。

これで local ファシリティ不足に悩むことは無さそうですが…アプリケーションによってはこのプロパティ指定でログ出力が出来ないものがあるので注意です。大好きな HAProxy も無理でした。


本当にすいません

出なおしてきます。

元記事は、こちら