(1/2)メールサーバの動作状況を知るうえで欠かせないログ。このログを効率的かつ的確に抽出・分析することが重要になる。ツールを導入して分析環境を整えよう。});前回のdaemontoolsの導入で、柔軟なプロセス管理と強力なロギング機能が実現しました。ログは、活用次第で単なるディスクの肥やしにもなれば、サーバ運営の潤滑剤にもなります。ログを取るのは不正アクセス対抗策の定石ですが、それを普段の運用に生かす技術を習得しなければなりません。前回は、daemontoolsに含まれるtai64nlocalコマンドでタイムスタンプを変換し、難解なTAI64N形式のログも目で追えるようになることを紹介しました。障害や不正アクセスが発生した日時を起点にログを順番に眺めていくことで、その形跡を見つけることができます。日常的に必要な統計情報を得る場合はどうでしょう。qmail-pop3dやqmail-smtpdの起動数やキューにたまっているメッセージの残数など、サーバを連続稼働させるうえで必要不可欠な情報も、ログの中に埋もれています。ログから必要な部分を抜き出し、計算させることで情報を引き出せるのは容易に想像できますが、それをどう実現するかとなると閉口しがちです。ログローテーションとAnalogの導入)。qmailにも、Analogのような解析ツールが用意されています。Bernstein氏による「qmailanalog」が望みをかなえてくれます(注)。注:wcなどのUNIXコマンドとshスクリプトを組み合わせてツールを自作することも可能です。Perlが使えれば、ほぼ意図する情報を手に入れられることでしょう。統計情報はqmailanalogで手軽に得ることができます。qmailanalogによるログ解析の流れqmailanalogをインストールすると、頭文字「z」の統計スクリプト群が使用可能になります。用途ごとにスクリプトが分かれているため、目的によって使い分ける必要があります。上記のスクリプトに、直接multilogで生成されたログファイルを流し込むことはできません。qmailanalogに含まれるmatchupコマンドでログを整形する必要があります。matchup実行時に統計を取る期間を指定できないため、スクリプトにログファイルを読み込ませる際に必要な期間の分を切り出しておかなければなりません。都合が悪いことに、multilogで生成されたログファイルのローテーションはサイズを基準としているため、例えば昨日1日分の統計情報が欲しい場合に、集計対象のログが複数に分割されてしまっている可能性があります。残念ながら、qmailanalogには特定の期間や時間のログだけを抜き出すスクリプトやコマンドはなく、自作するなど別途用意する必要があります。そこで、今回はPerlスクリプト「qlogselect」を用意することにします。qlogselectを使用することで、望みの日付や時間でログを抽出できるようになります。必要な処理をまとめてみましょう。↓3.一時保存したファイルを各スクリプト(頭文字zで始まるスクリプト)で使用し、必要な情報を収集する↓4.メールで管理者に報告こうした運用レポートをメールで受け取れるようにしておくと、後々日付ごとにレポートを整理したり過去のデータを呼び出すなどできるので、管理の面で大きく貢献します。Tips:プログラムを定期的に実行するには)で定期的に集計できるようにしておけば、これらの定型業務を自動化できます。そのためには、1から4までの処理を1つのスクリプトにまとめておくと便利です。qmailanalogのインストールhttp://cr.yp.to/qmailanalog.htmlからqmailanalog-0.70.tar.gzをダウンロードし、適当な作業ディレクトリに保存します。保存したらtarコマンドで展開し、生成されたディレクトリに移動します。qmailanalog-0.70デフォルトのインストール先は/usr/local/qmailanalogになり、この下にbin/、doc/、man/ディレクトリが作成されます。インストール先を変更したい場合は、conf-homeファイルを編集します。/usr/local/qmailanalogconf-homeファイル次に、makeを実行して各ファイルをインストールします。checkqlogtoolsのインストールとqlogselectの準備ここでログ解析ツール「qlogtools」をインストールします。http://untroubled.org/qlogtools/からqlogtools-3.1.tar.gzを入手し、展開とmakeを実行します。./installer正常にインストールできたかどうかは、instcheckコマンドで確認できます。何も表示されなければ成功です。どこにどのファイルがインストールされたかは、instshowコマンドで確認します。次にqlogselectを準備します。qlogselectはqlogtoolsの一部でしたが、最新のqlogtools-3.1には収録されていません。古いバージョンのqlogtoolsを入手することもできないため、qlogselectだけをhttp://www.qcc.sk.ca/~charlesc/software/misc/からダウンロードします。修正することはありませんが、実行可能とするためにパーミッションを変更します。変更したらqmailanalogのインストール先(例では/usr/local/qmailanalog/bin)に移動しておきます。しておくと、この後の実行スクリプト作成時にパス指定の手間を若干簡略化できます。次に、一連の処理を行うスクリプトを作成します。今回は、http://www.ornl.gov/its/archives/mailing-lists/qmail/2001/06/msg01283.htmlで公開されているものを少し手直しして(注)使用します。注:上記URLのスクリプトはメールを送る処理でmuttを使用していますが、今回はこれをqmail-injectに変更します。スクリプト(analog.sh)の中身は、20行目までが各値の宣言、それ以降が実際の処理になります。修正が必要な項目を簡単に説明します。説明のため、行番号を付けています(行番号なしのファイルはこちら)まず2行目のレポートの受け取り先と、3行目の送信者のメールアドレスは最低限修正が必要です。10〜18行目は集計対象とする期間を指定します。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として保存します。スクリプトに実行権を与えて実行します。./analog.sh次のような結果がレポートの受け取り先に届いていれば成功です。found」と出るようなら、4行目のコマンドパスが適切かどうか確認します。/var/log/qmailへの参照はroot権限が必要なため、rootユーザーで実行しないとエラーになります。deliveries(以下略)レポートのサンプルスクリプトの実行が確認できたら、crontabで1日1回実行されるように設定します。以上で、自動的にレポートを作成して決まった時間に受け取れるようになりました。syslogdで取ったログからでも同様のレポートが作成できます。具体的な方法についてはコラムを参照してください。syslogd環境でのレポート作成daemontoolsを導入せずにsyslogdを使っている場合は、/var/log/maillogなどsyslog.confで指定されたファイルにログが出力されています。このmaillogファイルを使ってレポートを作成するには、次のような手順で作業を行います。syslogdによって蓄えられたログには、各行の先頭に日付やホスト名など余分なフィールドがあるので削除します。matchupには整形の後のログを渡し、結果を一時ファイルとして/tmp/testに出力します。/tmp/test生成された/tmp/testを各集計コマンドに渡すことで、multilog使用時と同様のレポートを得ることができます。0.000211865ここまでの処理を自動化するには、http://www.emaillab.org/djb/qmailanalog/qmailanalog.htmlを参考にスクリプトを作成し、crontabに登録します。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。