ログ監視ツール "qmailanalog" を用いたサーバ管理


1. はじめに

ログファイルは大変膨大なためログを見て異常を発見することはかなり骨の折 れる作業である.そこでメールサーバではログファイルに書かれてある内容を 整理してもう少し見やすい形にするために qmailanalog というログ統計処理 ツールを用いる.

1. /etc/cron.daily/sysklogd の修正

slink では一週間分のメールログが /var/log/mail.log.0 に書き込まれるのだが, potato からはメールログが 2MB を越える場合,一日毎にログファイルが mail.log.1,mail.log.2...のように作成される.したがって一週間分のメールログを 作成させるためには 2MB の制限を外さなければならない.作成されるログファイルを 表示する Perl スクリプト /usr/sbin/syslogd-listfiles には以下のように オプションが書いてある(赤字で示してあるのが 2MB の制限を外すオプション).

Usage: syslogd-listfiles      
Options: -f file        specifies another syslog.conf file    
         -a | --all     list all files (including news)       
         --auth         list all files containing auth.   
	 --ignore-size  don't rotate files which got too large (default: 2MB)  
         --news         include news logfiles, too 
         -w | --weekly  use weekly pattern instead of daily 

一日毎にログファイルを作成するのは /etc/cron.daily/sysklogd である, この中で syslogd-listfiles が呼び出されている./etc/cron.daily/sysklogdを修正する.

# vim /etc/cron.daily/sysklogd

以下のように修正してオプションを追加する(赤字部分を追加する).

cd /var/log

logs=$(syslogd-listfiles --ignore-size)

このようにすることで一週間分のメールログが一 つのファイルに書き込まれる.

3. qmailanalog のインストール

ソースの取得・展開

# cd /usr/local/src/
# wget http://www.emaillab.org/djb/qmailanalog/qmailanalog-0.70.tar.gz
# tar zxvf qmailanalog-0.70.tar.gz 
# make
# make setup check

エラーが出る場合qmailanalog-0.70.errno.patchを充てる.

# cd /usr/local/src/qmailanalog-0.70
# wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2011/dvlop/script/qmailanalog-0.70.errno.patch
# patch > qmailanalog-0.70.errno.patch

make する

# make
# make setup check

設定

senders の編集

文献1 によると "メーリングリストプログラム ezmlm を使用している場合, 分析結果が長くなってしまうため, senders ファイルを編集すること" とある.

/usr/local/qmailanalog/bin/senders を編集する.

# vim /usr/local/qmailanalog/bin/senders

sender = $10"/"$8
の行の下に以下の一行を挿入する

sub("-return-.*=.*@","@",sender)

また,
sender = $10"/"$7
の行の下に以下の一行を挿入する

sub("-return-.*=.*@","@",sender)

つまり以下のようになっていればよい

#!/bin/sh
# WARNING: This file was auto-generated. Do not edit!
awk '
/^m/ {
sender = $10"/"$8
sub("-return-.*=.*@","@",sender)
...
...
/^d/ {
sender = $10"/"$7
sub("-return-.*=.*@","@",sender)

log ファイルの確認

/etc/syslog.conf をみて mail.log が単独で出力されるかを確かめる.

crontab の編集

毎週 1 回 解析されたログファイルをメールで管理者に流すようにする.

qmailanalog にログファイルを解析させるスクリプト /usr/local/sbin/mail.log-analog を編集し, crontab で 毎週日曜日の 07:30 に実行させる.

mail.log-analog

# wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2011/dvlop/script/mail.log-analog
# mv mail.log-analog /usr/local/sbin/
# chmod 755 /usr/local/sbin/mail.log-analog

実行許可(755)を与えるのを忘れないこと。

crontab を 編集する

# crontab -e

エディタが立ち上がって以下の内容を一行で書き込む. もしエディタが上がらない場合は環境変数 EDITOR を emacs , vi などで指定する ($ export EDITOR=vi(emacs)).

30 7 * * 7 ( echo "To: postmaster@ep.sci.hokudai.ac.jp" ; echo "From: mail@ep.sci.hokudai.ac.jp" ; echo "Subject: mail.log" ; echo  "" ; /usr/local/sbin/mail.log-analog ) | /var/qmail/bin/qmail-inject -f epmail@ep.sci.hokudai.ac.jp

(このページの最後に載せた) mail.log-analog は http://www.ne.jp/asahi/cyber/taki/djb/qmailanalog/qmailanalog.html に書かれたスクリプトの一部を書き換えて EP メールサーバで使用しているも のです. 本 EP サーバでのログ解析は全体の配送量などを知るのみとしてエラ ーメッセージや各構成員へのメール配送数など細かい解析は自動的に送らない とした(下のスクリプトでコメントアウトした部分を実際に実行するとサイズ の大きなメールとなって結局管理者が読み飛ばしてしまうから).

#!/bin/sh
#
# taken from http://www.ne.jp/asahi/cyber/taki/server/qmail/qmailanalog.html
# modified by Kyoma TAK and Yasuhiro C. Murata 2000/03/17
# 2000/03/18
#
PATH=/bk/usr/local/qmailanalog/bin:/var/qmail/bin:/usr/bin
MAILLOG="/var/log/mail.log.0"
QMAILLOG="/tmp/qmail.$$"
QMAILLOG2="/tmp/qmail.$$2"
/usr/bin/awk '{$1="";$2="";$3="";$4="";$5="";print}'\
< $MAILLOG | matchup > $QMAILLOG 5 > QMAILLOG2
zoverall < $QMAILLOG
#zfailures < $QMAILLOG
#zdeferrals < $QMAILLOG
#zrecipients < $QMAILLOG
#/usr/bin/perl -pe 's/-return-.*=.*@/@/g' < $QMAILLOG | zsenders)
/bin/rm -f $QMAILLOG
/bin/rm -f $QMAILLOG2

matchup を manpath に通す

man を通す.

# vim /etc/manpath.config

#MANDATORY_MANPATH
のところに以下を追加する

MANDATORY_MANPATH	/usr/local/qmailanalog/man

# *PATH* *MANPATH*
のところに以下を追加

MANPATH_MAP	/usr/local/qmailanalog/man	/usr/local/qmailanalog/man

# *PATH* *CATPATH*
のところに以下を追加

MANDB_MAP	/usr/local/qmailanalog/man	/usr/local/qmailanalog/man

つまり以下のようになっていればよい

#MANDATORY_MANPATH/usr/src/pvm3/man
......
MANDATORY_MANPATH/usr/local/man
MANDATORY_MANPATH/var/qmail/man
MANDATORY_MANPATH/usr/local/qmailanalog/man
...
#*PATH**MANPATH*
.........
MANPATH_MAP/opt/sbin/opt/man
MANPATH_MAP/var/qmail/bin/var/qmail/man
MANPATH_MAP/usr/local/qmailanalog/man/usr/local/qmailanalog/man
...
#*PATH**CATPATH*
.........
MANDB_MAP/opt/man/var/cache/man/opt
MANDB_MAP/var/qmail/man/var/qmail/man
MANDB_MAP/usr/local/qmailanalog/man/usr/local/qmailanalog/man

参考文献

  1. ログの統計情報ツール qmailanalog



最終更新日: 2012/10/02(三上 峻) Copyright © 2012 epcore