
第10回 ツールを使った効率的なログ分析術
メールサーバの動作状況を知るうえで欠かせないログ。このログを効率的かつ的確に抽出・分析することが重要になる。ツールを導入して分析環境を整えよう。
鶴長 鎮一
2002/6/22
前回のdaemontoolsの導入で、柔軟なプロセス管理と強力なロギング機能が実現しました。ログは、活用次第で単なるディスクの肥やしにもなれば、サーバ運営の潤滑剤にもなります。ログを取るのは不正アクセス対抗策の定石ですが、それを普段の運用に生かす技術を習得しなければなりません。
qmailanalogの利用
前回は、daemontoolsに含まれるtai64nlocalコマンドでタイムスタンプを変換し、難解なTAI64N形式のログも目で追えるようになることを紹介しました。障害や不正アクセスが発生した日時を起点にログを順番に眺めていくことで、その形跡を見つけることができます。
では、日常的に必要な統計情報を得る場合はどうでしょう。qmail-pop3dやqmail-smtpdの起動数やキューにたまっているメッセージの残数など、サーバを連続稼働させるうえで必要不可欠な情報も、ログの中に埋もれています。ログから必要な部分を抜き出し、計算させることで情報を引き出せるのは容易に想像できますが、それをどう実現するかとなると閉口しがちです。
Apacheでは、強力でしかも無料で使用できるアクセスログ解析ツールAnalogを使用することが広く知られています(「ApacheによるWebサーバ構築」第14回 ログローテーションとAnalogの導入)。qmailにも、Analogのような解析ツールが用意されています。qmailの作者であるD. J. Bernstein氏による「qmailanalog」が望みをかなえてくれます(注)。
| 注:wcなどのUNIXコマンドとshスクリプトを組み合わせてツールを自作することも可能です。さらにPerlが使えれば、ほぼ意図する情報を手に入れられることでしょう。しかし、大抵の統計情報はqmailanalogで手軽に得ることができます。 |
■qmailanalogによるログ解析の流れ
qmailanalogをインストールすると、頭文字「z」の統計スクリプト群が使用可能になります。用途ごとにスクリプトが分かれているため、目的によって使い分ける必要があります。
- zdeferrals:deferrals(配送が先延ばし)されたときの理由の集計
- zddist:メール遅送の集計
- zfailures:失敗メールの確認
- zoverall:基本的で最も重要な統計
- zrecipients:受け取り先の統計
- zrhosts:相手のホストの集計
- zrxdelay:受け取り先の統計(遅れ具合でソート)
- zsenders:差し出し元の集計
- zsuccesses:成功時の理由の集計
- zsuids:差し出し元のUID集計
上記のスクリプトに、直接multilogで生成されたログファイルを流し込むことはできません。qmailanalogに含まれるmatchupコマンドでログを整形する必要があります。また、matchup実行時に統計を取る期間を指定できないため、スクリプトにログファイルを読み込ませる際に必要な期間の分を切り出しておかなければなりません。さらに都合が悪いことに、multilogで生成されたログファイルのローテーションはサイズを基準としているため、例えば昨日1日分の統計情報が欲しい場合に、集計対象のログが複数に分割されてしまっている可能性があります。
残念ながら、qmailanalogには特定の期間や時間のログだけを抜き出すスクリプトやコマンドはなく、自作するなど別途用意する必要があります。そこで、今回はPerlスクリプト「qlogselect」を用意することにします。qlogselectを使用することで、望みの日付や時間でログを抽出できるようになります。
必要な処理をまとめてみましょう。
| 1. | /var/log/qmail/ディレクトリ下のログファイルからqlogselectコマンドで指定のログを抽出する | |
|
↓
|
||
| 2. | 抽出したログをmatchupで整形し、一時ファイルに保存 | |
|
↓
|
||
| 3. | 一時保存したファイルを各スクリプト(頭文字zで始まるスクリプト)で使用し、必要な情報を収集する | |
|
↓
|
||
| 4. | メールで管理者に報告 | |
こうした運用レポートをメールで受け取れるようにしておくと、後々日付ごとにレポートを整理したり過去のデータを呼び出すなどできるので、管理の面で大きく貢献します。さらに、crontab(Linux Tips:プログラムを定期的に実行するには)で定期的に集計できるようにしておけば、これらの定型業務を自動化できます。そのためには、1から4までの処理を1つのスクリプトにまとめておくと便利です。
■qmailanalogのインストール
http://cr.yp.to/qmailanalog.htmlからqmailanalog-0.70.tar.gzをダウンロードし、適当な作業ディレクトリに保存します。保存したらtarコマンドで展開し、生成されたディレクトリに移動します。
# tar xvfz qmailanalog-0.70.tar.gz |
デフォルトのインストール先は/usr/local/qmailanalogになり、この下にbin/、doc/、man/ディレクトリが作成されます。インストール先を変更したい場合は、conf-homeファイルを編集します。
/usr/local/qmailanalog |
| conf-homeファイル |
次に、makeを実行して各ファイルをインストールします。
# make |
■qlogtoolsのインストールとqlogselectの準備
ここでログ解析ツール「qlogtools」をインストールします。http://untroubled.org/qlogtools/からqlogtools-3.1.tar.gzを入手し、展開とmakeを実行します。
# tar xvfz qlogtools-3.1.tar.gz |
正常にインストールできたかどうかは、instcheckコマンドで確認できます。特に何も表示されなければ成功です。また、どこにどのファイルがインストールされたかは、instshowコマンドで確認します。
次にqlogselectを準備します。qlogselectはqlogtoolsの一部でしたが、最新のqlogtools-3.1には収録されていません。また、古いバージョンのqlogtoolsを入手することもできないため、qlogselectだけをhttp://www.qcc.sk.ca/~charlesc/software/misc/からダウンロードします。特に修正することはありませんが、実行可能とするためにパーミッションを変更します。変更したらqmailanalogのインストール先(例では/usr/local/qmailanalog/bin)に移動しておきます。こうしておくと、この後の実行スクリプト作成時にパス指定の手間を若干簡略化できます。
# chmod +x qlogselect |
■実行スクリプトの作成
次に、一連の処理を行うスクリプトを作成します。今回は、http://www.ornl.gov/its/archives/mailing-lists/qmail/2001/06/msg01283.htmlで公開されているものを少し手直しして(注)使用します。
| 注:上記URLのスクリプトはメールを送る処理でmuttを使用していますが、今回はこれをqmail-injectに変更します。 |
スクリプト(analog.sh)の中身は、20行目までが各値の宣言、それ以降が実際の処理になります。修正が必要な項目を簡単に説明します。
1 #!/bin/sh |
| リストanalog.sh 説明のため、行番号を付けています(行番号なしのファイルはこちら) |
まず2行目のレポートの受け取り先と、3行目の送信者のメールアドレスは最低限修正が必要です。10〜18行目は集計対象とする期間を指定します。サンプルでは1日を対象にしていますが、2日間に変更する場合は「1 day ago」を「2 days ago」に、1週間にする場合は「1 week ago」のようにします。ここで宣言したstart/end変数は、qlogselectの引数に指定します。qlogselectは、指定されたstartとendでログの抽出を行います(注)。
| 注:ログの抽出で長い期間を指定する場合は、その期間以上のログが蓄えられている必要があります。 |
また、インストール環境によっては20行目の修正が必要な場合があります。ここでは、multilogで生成されるログファイルの保存先を指定します。次に、27行目で必要な情報を集計するコマンドを指定します。サンプルではzoverall、zddist、zdeferrals、zfailures、zrhosts、zsuids、zrxdelayの7つのコマンドが指定されていますが、大抵はzoverallだけでも十分な集計結果が得られるはずです。必要に応じてコマンドリストを削ります。
作成したスクリプトは、/usr/local/qmailanalog/bin/analog.shとして保存します。スクリプトに実行権を与えて実行します。
# mv analog.sh /usr/local/qmailanalog/bin/analog.sh |
次のような結果がレポートの受け取り先に届いていれば成功です。もし「command not found」と出るようなら、4行目のコマンドパスが適切かどうか確認します。また、/var/log/qmailへの参照はroot権限が必要なため、rootユーザーで実行しないとエラーになります。
-----------Result of zoverall------------ |
| レポートのサンプル |
スクリプトの実行が確認できたら、crontabで1日1回実行されるように設定します。
# crontab -e |
| 0時1分に起動する場合 |
以上で、自動的にレポートを作成して決まった時間に受け取れるようになりました。
また、syslogdで取ったログからでも同様のレポートが作成できます。具体的な方法についてはコラムを参照してください。
| コラム syslogd環境でのレポート作成 | ||
| daemontoolsを導入せずにsyslogdを使っている場合は、/var/log/maillogなどsyslog.confで指定されたファイルにログが出力されています。このmaillogファイルを使ってレポートを作成するには、次のような手順で作業を行います。 まず、syslogdによって蓄えられたログには、各行の先頭に日付やホスト名など余分なフィールドがあるので削除します。matchupには整形の後のログを渡し、結果を一時ファイルとして/tmp/testに出力します。
生成された/tmp/testを各集計コマンドに渡すことで、multilog使用時と同様のレポートを得ることができます。
ここまでの処理を自動化するには、http://www.emaillab.org/djb/qmailanalog/qmailanalog.htmlを参考にスクリプトを作成し、crontabに登録します。 |
|
1/2
|
|
||||
|
||||
| 連載 実用qmailサーバ運用・管理術 |
| Linux Squareフォーラム サーバ構築・運用関連記事 |
| 連載:Heartbeatでかんたんクラスタリング(連載中) オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します |
|
| 特集:Apache 2.2でWebサイトをパフォーマンスアップ! 最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する |
|
| 連載:実用 Apache 2.0運用・管理術(全8回) 本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える |
|
| 連載:実用
BIND 9で作るDNSサーバ(全15回) 本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく |
|
| 連載:実用qmailサーバ運用・管理術(全14回) 本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで |
|
| 特集:Samba
3.0の全貌 改訂版 Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する |
|
|
TechTargetジャパン
- OSSライセンスの採用傾向に「変化」あり (2012/5/21)
OSS普及の一翼を担ってきたライセンス、GPLファミリー採用の割合が減少傾向にあるそうです。いったいどうして? - ここからFirefoxの反撃が始まる (2012/3/12)
2月のLinux SquareのランキングではFirefoxの記事がダントツのページビューを集め、トップに立ちました - CMakeでMySQLをビルドしてみる (2012/3/8)
ここまでの作業でCMakeを使う準備が整いました。今回はひとまずMySQLをビルドしてみます - MySQLのビルドに欠かせないCMakeを準備する (2012/3/2)
今回は、MySQLをビルドするために欠かせないツール「CMake」をインストールし、使う準備をします
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
