*qmailanalogでできること [#lfc9f1d6]
-zdeferrals:deferrals(配送が先延ばし)されたときの理由の集計 
-zddist:メール遅送の集計 
-zfailures:失敗メールの確認 
-zoverall:基本的で最も重要な統計 
-zrecipients:受け取り先の統計 
-zrhosts:相手のホストの集計 
-zrxdelay:受け取り先の統計(遅れ具合でソート) 
-zsenders:差し出し元の集計 
-zsuccesses:成功時の理由の集計 
-zsuids:差し出し元のUID集計

qmailanalogにはmultilogから特定の期間を取り出して解析する機能はついてないので別途以下のような手順を踏む必要がある

+/var/log/qmail/ディレクトリ下のログファイルからqlogselectコマンドで指定のログを抽出する
+抽出したログをmatchupで整形し、一時ファイルに保存
+一時保存したファイルを各スクリプトで必要な情報を収集する
+メールで管理者に報告

*qmailanalogインストール [#a1df9d7c]
http://cr.yp.to/qmailanalog.html から qmailanalog-0.70.tar.gz をゲット

# tar xvfz qmailanalog-0.70.tar.gz
# cd qmailanalog-0.70
# make
# make setup check 
 # tar xvfz qmailanalog-0.70.tar.gz
 # cd qmailanalog-0.70
 # make
 # make setup check 
/usr/local/qmailanalog にインストールされる


qlogselectの準備
# wget http://www.qcc.sk.ca/~charlesc/software/misc/qlogselect
# chmod +x qlogselect
# mv qlogselect /usr/local/qmailanalog/bin 

実行スクリプトの作成
*qlogselectの準備 [#oba0a208]
 # wget http://www.qcc.sk.ca/~charlesc/software/misc/qlogselect
 # chmod +x qlogselect
 # mv qlogselect /usr/local/qmailanalog/bin 

*実行スクリプトの作成 [#k63f5636]
tai64n2tai コマンドがないので http://untroubled.org/qlogtools/ から qlogtools-3.1.tar.gz をゲットする

# tar xvzf qlogtools-3.1.tar.gz
# cd qlogtools-3.1
# make
# mv tai64n2tai /usr/local/qmailanalog/bin
# cd ..
# rm -fr qlogtools-3.1*
# vi /usr/local/qmailanalog/bin/analog.sh
#!/bin/sh
MAILTO=mailto@example.com
MAILFROM=mailfrom@example.com
export PATH="$PATH:/usr/local/qmailanalog/bin:/var/qmail/bin"
tmpdir=/tmp/qmail-cron.$$.$RANDOM
 # tar xvzf qlogtools-3.1.tar.gz
 # cd qlogtools-3.1
 # make
 # mv tai64n2tai /usr/local/qmailanalog/bin
 # cd ..
 # rm -fr qlogtools-3.1*
 # vi /usr/local/qmailanalog/bin/analog.sh

mkdir $tmpdir
pushd $tmpdir >/dev/null

s_year=`date -d '1 day ago' +%Y`
s_month=`date -d '1 day ago' +%m`
s_day=`date -d '1 day ago' +%d`
e_year=`date +%Y`
e_month=`date +%m`
e_day=`date +%d`

start="$s_year-$s_month-$s_day"
end="$e_year-$e_month-$e_day"

LOGDIR=/var/log/qmail

cat "$LOGDIR"/{"@",cur}* \
| tai64n2tai \
| qlogselect start $start end $end \
| matchup >logfile 5>/dev/null

for ana in zoverall zddist zdeferrals zfailures zrhosts zsuids zrxdelay; do
echo "" >>result
echo "-----------Result of $ana------------" >>result
$ana 2>/dev/null <logfile >>result
done
rm -f logfile

(echo "To: $MAILTO"
echo "From: $MAILFROM"
echo "Subject: mailstats for $s_year-$s_month-$s_day"
echo ""
cat result )| qmail-inject -f $MAILFROM
rm -f result
popd >/dev/null
rm -rf $tmpdir
 #!/bin/sh
 MAILTO=mailto@example.com
 MAILFROM=mailfrom@example.com
 export PATH="$PATH:/usr/local/qmailanalog/bin:/var/qmail/bin"
 tmpdir=/tmp/qmail-cron.$$.$RANDOM
 
 mkdir $tmpdir
 pushd $tmpdir >/dev/null
 
 s_year=`date -d '1 day ago' +%Y`
 s_month=`date -d '1 day ago' +%m`
 s_day=`date -d '1 day ago' +%d`
 e_year=`date +%Y`
 e_month=`date +%m`
 e_day=`date +%d`
 
 start="$s_year-$s_month-$s_day"
 end="$e_year-$e_month-$e_day"
 
 LOGDIR=/var/log/qmail
 
 cat "$LOGDIR"/{"@",cur}* \
 | tai64n2tai \
 | qlogselect start $start end $end \
 | matchup >logfile 5>/dev/null
 
 for ana in zoverall zddist zdeferrals zfailures zrhosts zsuids zrxdelay; do
 echo "" >>result
 echo "-----------Result of $ana------------" >>result
 $ana 2>/dev/null <logfile >>result
 done
 rm -f logfile
 
 (echo "To: $MAILTO"
 echo "From: $MAILFROM"
 echo "Subject: mailstats for $s_year-$s_month-$s_day"
 echo ""
 cat result )| qmail-inject -f $MAILFROM
 rm -f result
 popd >/dev/null
 rm -rf $tmpdir
2日間を対象にするなら「2 days ago」、1週間なら「1 week ago」

# chmod +x /usr/local/qmailanalog/bin/analog.sh
# /usr/local/qmailanalog/bin/analog.sh
 # chmod +x /usr/local/qmailanalog/bin/analog.sh
 # /usr/local/qmailanalog/bin/analog.sh
でメールが MAILTO 宛に届けばOK

crontabで実行するには

# crontab -e
30 4 * * * /usr/local/qmailanalog/bin/analog.sh 2>/dev/null

 # crontab -e
 30 4 * * * /usr/local/qmailanalog/bin/analog.sh 2>/dev/null
#exlink

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