リンク

  • 本家    プレミアムエディションなんてのがあるんだな。

インストール

portinstall sysutils/syslog-ng
 (sysutils/syslog-ng2でもいい)

設定

/etc/syslog-ng.confを作る。

デフォルトのsyslog.confを参考にして、いくつかエントリを作成した。

source src {
   unix-dgram("/var/run/log");
   internal();
};

filter f_security      { facility(security); };
filter f_auth_info     { facility(auth) and level(info); };
filter f_authpriv_info { facility(authpriv) and level(info); };
filter f_mail_info     { facility(mail) and level(info); };
filter f_cron          { facility(cron); };

destination d_security { file("/var/log/security.log"); };
destination d_auth     { file("/var/log/auth.log"); };
destination d_mail     { file("/var/log/maillog"); };
destination d_cron     { file("/var/log/cron"); };

log { source(src); filter(f_security); destination(d_security); };
log { source(src); filter(f_auth_info); destination(d_auth); };
log { source(src); filter(f_authpriv_info); destination(d_auth); };
log { source(src); filter(f_mail_info); destination(d_mail); };
log { source(src); filter(f_cron); destination(d_cron); };

テスト起動

動いているsyslogdを停止させる。

% kill `cat /var/run/syslog.pid`

syslog-ngを起動させる

設定ファイルの位置指定がわかんなかったので、まず、ヘルプを表示させた。

% syslog-ng --help
Usage: syslog-ng [options]
Accept and manage system log messages

Options:
 -s, --syntax-only                Only read and parse config file
 -d, --debug                      Turn on debugging messages
 -v, --verbose                    Be a bit more verbose
 -F, --foreground                 Don't fork into background
 -f <fname>, --cfgfile=<fname>    Set config file name, default=/usr/local/etc/syslog-ng/ syslog-ng.conf
 -V, --version                    Display version number (syslog-ng 1.6.12)
 -p <fname>, --pidfile=<fname>    Set pid file name, default=/var/run/syslog.pid
 -C <dir>, --chroot=<dir>         Chroot to directory
 -u <user>, --user=<user>         Switch to user
 -g <group>, --group=<group>      Switch to group

設定ファイルの構文チェックをしてくれるオプションがあるので、試す。

% syslog-ng -s -f /etc/syslog-ng.conf

何も出なかった。 "OK"とか、"GJ!"とか言ってくれんかな。

次に、起動。

syslog-ng -f /etc/syslog-ng.conf

試しに、端末からtelnetログインしてみたところ、/var/log/auth.logにログが追加されていたので、動いているようだ。

起動設定

syslogに起動されては困るので、/etc/rc.confに下記を追加。

syslogd_enable="NO"

起動スクリプトは、/usr/ports/sysutils/syslog-ng/files/syslog-ng.sh.inがあるので、これを/usr/local/etc/rc.d/にコピーする

cp /usr/ports/sysutils/syslog-ng/files/syslog-ng.sh.in /usr/local/etc/rc.d/

設定ファイルの位置が違うので変更する。

required_files=/etc/syslog-ng.conf

って、やってみたけど、エラーが出て動かないし、rc.subrがどうのこうのと言われても理解できないので、別途作った。

#! /bin/sh

DAEMON=/usr/local/sbin/syslog-ng
PIDFILE=/var/run/syslog-ng.pid
CONFIG=/etc/syslog-ng.conf

test -x "$DAEMON" || exit 0

case $1 in
   start)
   $DAEMON -f $CONFIG -p $PIDFILE
   echo -n ' syslog-ng'
   ;;
   stop)
   kill $PIDFILE
   ;;
   *)
   # Print help
   echo "Usage: `basename $0` {start|stop}" 1>&2
   exit 1
   ;;
esac

exit 0

リモートからの受信でエラーが出る

送受信ともに syslog-ng を使って構成し、クライアント側から PHP スクリプトの syslog() を使ってメッセージを出力させてみたところ、下記エラーが出てきた。末尾の行は PHP で 出力したもの

Feb 27 15:08:47 sv syslog-ng[17003]: EOF occurred while idle; fd='5'
Feb 27 15:08:47 sv syslog-ng[17003]: Connection broken; time_reopen='10'
Feb 27 15:09:12 sv php: error message from php

送信側の定義行は下記のように tcp() を使っている

destination logger { tcp("192.168.1.10" port(514)); };

この対処は、/etc/hosts.allow に以下を記述する

syslog-ng:ALL:ALLOW

例として ALL を使ったが、各ホストについて書くのが最良。

conf 中で使えるマクロ

マクロ説明
$FACILITYログのファシリティ
$PRIORITYログのプライオリティ
$DATE ($R_DATE, $S_DATE)BSD-syslog形式の日付(例:Sep 13 15:58:00)
$FULLDATE ($R_FULLDATE,$S_FULLDATE)$DATEに年を加えたもの(例:2008 Sep 13 15:58:00)
$ISODATE ($R_ISODATE, $S_ISODATE)ISO8601の日付(例:2008-09-13T15:58:00.123+01:00)
$STAMP ($R_STAMP, $S_STAMP)ts_format()オプションで指定された形式の日付
$YEAR ($R_YEAR, $S_YEAR)
$MONTH ($R_MONTH, $S_MONTH)
$DAY ($R_DAY, $S_DAY)
$WEEKDAY ($R_WEEKDAY,$S_WEEKDAY)曜日(例:Sun)
$WEEK ($R_WEEK, $S_WEEK)年の第何週
$HOUR ($R_HOUR, $S_HOUR)時間
$MIN ($R_MIN, $S_MIN)
$SEC ($R_SEC, $S_SEC)
$UNIXTIME ($R_UNIXTIME,$S_UNIXTIME)UNIXタイム(1970-01-01T00:00:00からの秒数)
$TZOFFSET ($R_TZOFFSET,$S_TZOFFSET)GMTとの時差(例:+09:00)
$TZ ($R_TZ,$S_TZ)$TZOFFSETと同等
$HOSTログを出力したホスト
$FULLHOSTログを出力したホスト(FQDN)
$HOST_FROMログを転送したホスト
$FULLHOST_FROMログを転送したホスト(FQDN)
$SOURCEIPログを転送したホストのIPアドレス
$PROGRAMログを出力したプログラム
$PIDログを出力したプログラムのPID
$MSG/$MESSAGE$PROGRAMや$PIDを含んだログメッセージ
$MSGONLYログメッセージから$PROGRAMや$PIDを除いたもの

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS