|
|
ログ監視ツール logsurfer logsurfer とは †システムログをリアルタイムで監視し、イベントの発生を報告します。 関連するログをグループ化できる。たとえば、ブート時には多数のログが書かれます。 C言語で書かれているので、多量のログが発生する環境でも運用できます。 logsurfer 1.5b インストールメモ †リアルタイムにログファイルを監視する logsurfer 1.5b をインストールする。 swatch に対して、次のような特長がある。 †
このドキュメントの前提環境 †
logsurfer 1.5b インストールメモ †logsurfer の tarball をダウンロードする。 tarball を伸張する。 $ tar xvf logsurfer-1.5b.tar $ cd logsurfer-1.5b INSTALL の手順に従いコンパイルする。 $ ./configure --with-etcdir=/etc/logsurfer $ make root になりインストールする。 $ su # make install 実行ユーザ/グループの作成 †Logsurfer のプロセスを実行するユーザ/グループを作成する。 # /usr/sbin/groupadd logadm # /usr/sbin/useradd -g logadm -s /bin/sh logadm ログファイルのパーミッションの変更 †監視対象となるログファイルのパーミッションを、logadm グループのユーザが読めるように変更する。 # cd /var/log # chmod 0640 maillog* messages* secure* # chown root.logadm maillog* messages* secure* 設定ファイルの構造 †設定ファイルは '#' で始まる行はコメント行となり、空白またはタブで始まる行は、前の行の続きとなる。 設定ファイルのルールは、以下の 7 つのフィールドから構成される。 match_regex not_match_regex stop_regex not_stop_regex timeout [continue] action 1. match_regex 監視するメッセージの正規表現を記述する。 パターンマッチした場合は、次に not_match_regex が評価される。 2. not_match_regex match_regex にパターンマッチした後、評価を打ち切る (action を実行しない) ための正規表現を記述する。 not_match_regex にパターンマッチした場合は action が実行されない。 '-' を記述すると、match_regex にパターンマッチした場合、必ず action が実行される。 3. stop_regex action で追加されたルールを削除するための正規表現を記述する。パターンマッチした場合は、ルールを削除するが、 not_stop_regex にマッチする場合は、ルールを削除しない。 4. not_stop_regex stop_regex にパターンマッチした後、ルールの削除を行わないための正規表現を記述する。 5. timeout ルールの有効期限を指定する。'0' を指定すると無期限となる。 6. continue 現在のログ行について action 実行後も他のルールの評価を行う場合に指定する。省略可能。 7. action 引数: action_command [arguments ...] 以下の形式で action を指定する。アクションの引数をダブルクォートで囲んだ場合、$0〜$9 が使える。 $0 は、メッセージ行全体を、$1 は match_regex にパターンマッチした部分を、$2〜$9 は、match_regex 中の副表現 (sub-expression) にマッチした部分に置き換えられる。 ignore
引数: なし
パターンマッチを無視する。
exec
引数: command [arguments ...]
コマンド command を実行する。引数をコマンドに渡す場合は、
コマンドと引数全体をシングルクォートまたはダブルクォートで囲む。
pipe
引数: command [arguments ...]
コマンド command の標準入力に、パターンマッチした行が送られる。
open
引数: match_regex match_not_regex line_limit timeout_abs timeout_rel default_action
新規のコンテキストを作成する。コンテキストは match_regex の文字列により識別され、
同じ識別名を持つコンテキストが存在する場合は、コンテキストは作成されない。
match_regex
コンテキストに追加する正規表現を記述する。
match_not_regex
match_regex にパターンマッチした後、評価を打ち切る (コンテキストに追加しない) ための正規表現を記述する。
match_not_regex にパターンマッチした場合は、コンテキストに追加しない。'-' を記述すると、
match_regex にパターンマッチした場合、必ずコンテキストに追加される。
line_limit
コンテキストに追加可能なメッセージの最大値 (行数) を指定する。
最大値を超えた場合、default_action が実行され、コンテキストは自動的に削除される。'0' を指定すると、無制限に追加する。
timeout_abs
コンテキストが生成されてからの有効期限を秒数で指定する。
timeout_abs 秒経過した場合、default_action が実行され、コンテキストは自動的に削除される。'0' を指定すると、有効期限が無期限となる。
timeout_rel
コンテキストに最後にメッセージが追加されてからのタイムアウトを秒数で指定する。
timeout_rel 秒経過した場合、default_action が実行され、コンテキストは自動的に削除される。'0' を指定するとタイムアウトは無期限となる。
default_action
コンテキストの制限を越えた場合に実行されるアクションを指定する。
書式はルールの ignore, exec, pipe, report と同一である。
delete
引数: match_regex
match_regex で識別されるコンテキストを削除する。
report
引数: command match_regex
コマンド command の標準入力に match_regex で識別されるコンテキストの内容が送られる。
rule
引数: {before|behind|top|bottom} ルール定義
新しいルールを、指定した位置に追加する。
環境設定 †設定ファイルのデフォルトは /usr/local/etc/logsurfer.conf であるが、ここでは /etc/logsurfer/logsurfer.conf とした。監視ポリシーに合わせて、監視対象とするパターンを設定する。 次のログ出力を Logsurfer にて監視する。 1: Sep 14 13:13:26 sv1 sshd[17072]: Accepted password for foo from aaa.bbb.1.210 port 65512 次の例では、2 行目の '(sshd) session opened' の出力後、2 行目のみをメールで送信する。 'PAM_pwdb\[([0-9]*)\]: \(sshd\) session opened' - - - 0
pipe "/bin/mail root -s \"sshd: session opened\""
次の例では、2 行目の '(sshd) session opened' の出力後、1, 2 行目をメールで送信する。'17072' という同じ PID により関連するログ出力である。3 行目とマッチしたら、コンテキストを削除する。3 行目が 1 行目の出力から 43200 秒以内に出力されないときも、コンテキストが自動的に削除される。 'sshd\[([0-9]*)\]: Accepted password' - - - 0
open "PAM_pwdb\\[$2\\]:" - 5000 43200 0 ignore
'PAM_pwdb\[([0-9]*)\]: \(sshd\) session opened' - - - 0
report "/usr/local/sbin/start-mail root \"sshd: session opened\"" "PAM_pwdb\\[$2\\]:"
'PAM_pwdb\[([0-9]*)\]: \(sshd\) session closed' - - - 0
delete "PAM_pwdb\\[$2\\]:"
次の例では、3 行目の '(sshd) session closed' の出力後、1, 2, 3 行目をメールで送信する。 'sshd\[([0-9]*)\]: Accepted password' - - - 0
open "PAM_pwdb\\[$2\\]:" - 5000 86400 0 ignore
'PAM_pwdb\[([0-9]*)\]: \(sshd\) session opened' - - - 0
rule before "PAM_pwdb\\[($2)\\]: \\(sshd\\) session closed" - '.*' - 86400
report "/bin/mail root -s \"sshd: session closed\"" "PAM_pwdb\\[$2\\]:"
'PAM_pwdb\[([0-9]*)\]: \(sshd\) session closed' - - - 0
delete "PAM_pwdb\\[$2\\]:"
自動起動の設定 †/etc/rc.d/rc.local から起動するように設定する。 # logsurfer
if [ -x /usr/local/bin/logsurfer ]; then
su - logadm -c '/usr/local/bin/logsurfer \
-c /etc/logsurfer/logsurfer.conf \
-p /var/run/logsurfer.pid \
-f -l `/usr/bin/wc -l /var/log/messages` &'
fi
logsurfer の仕様上、起動時にはログファイルを先頭から読み込みます。 ログのローテートが発生した場合、ローテートされた古いファイルを監視し続けるため、Logsurfer に HUP シグナルを送り再起動させる。 /etc/logrotate.d/syslog /var/log/messages {
create 0640 root logadm
postrotate
/usr/bin/killall -HUP syslogd
/usr/bin/killall -HUP logsurfer
endscript
}
ログファイルの集約 †これまでの説明では、複数のシステムログファイルを別々に監視するような形をとっていますが、これでは不便だと思いsyslogをすべて集約して1つのファイルに出力するようにして使用しています。 /etc/syslog.conf *.* /var/log/systemlog /etc/logrotate.d/syslog /var/log/systemlog {
rotate 1
create 0640 root logadm
postrotate
/bin/kill -HUP `cat /var/run/logsurfer.pid 2> /dev/null` 2> /dev/null || true
endscript
}
その他の部分は基本的には変わりません。読み取り元のファイルが変わるくらいです。 なお、この設定は他のログ監視ツールにおいても使用できますので便利に使用できています。 |