メイン

2011年07月28日

ログ自動監視ツールSwatchとlogmonのエスケープ処理

アンタスの運用保守サービスでは、ログの自動監視ツールとしてSwatchを使用しています。
システム関連ログ /var/log/messages やアプリケーションログなど、指定したログファイルに検知したい文字列が出力された際に、指定した宛先にアラートメールを即座に送信してくれるので、ハードウェアやアプリケーションの障害検知に役立てています。

ですがこのSwatch、下記の点で設定や運用管理が少々手間なのです。


  • インストールが少々面倒。CentOSやRHELに含まれていない依存関係のあるPerlのパッケージをEPELなどから取得しなければならない。また、自動起動スクリプトを自前で用意しなければならない。
  • 監視対象のログファイルを追加する場合は、起動スクリプトも書き換えなければいけない。

そこで最近、これらの問題を解決できそうな、Swatchによく似たlogmonというIBM製の監視ツールを見つけたので社内で評価してみました。
インストール手順や設定方法は下記を参照してください。

・IBM Systems Directorで利用できるログファイル監視用スクリプト
http://www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-00057580

・ログ監視ツールをswatchからlogmonに切り替えた
http://www.glidenote.com/archives/1023

※「IBM Systems Directorで利用できる〜」とありますが、IBM製サーバ以外のサーバでもこのツールを独立して使用できます。

評価したところ、機能的にはSwatchとほぼ同じでインストールは簡単、監視対象のログファイルが複数でも設定ファイルはひとつにまとめられるので運用管理も楽、ということで、先述のSwatchの問題点が解消されました。

ただし、下記の問題があることがわかりました。
「検知した文字列を含む行全体をメールで通知する機能を使用した場合、指定した行にダブルクォート(")を含むと、メールで通知されない。」

特にApacheのログでは、ダブルクォート(")やシングルクォート(')を含む行が出力されるので、これでは困りますね。
しくみとしては、configの記述で下記のようにechoコマンドの引数として行全体を与えて、mailコマンドに渡しています。
確かにこれではダメでエスケープ処理が必要です。

echo "<行全体>" | mail -s "Apache Error was found" root

せっかくの便利なツールがこれではもったいないので、logmonのPerlプログラムに簡単なエスケープ処理を施します。
方針としては、logmonのconfigにおけるechoコマンドのダブルクォート(")を、シングルクォート(')に変更し、メタ文字を解釈しないようにします。
このままだと、ダブルクォート問題は解決できますが、検知したログ行にシングルクォートが含まれると同じ問題が発生してしまうので、取得したログ行のうちシングルクォート(')があれば、全角クォート(’)に置換します。
(置換後の文字は何でもよいのですが、保守の際の視認性という意味では見た目が似ている文字が一番よいと思い、単純に全角にしました。)

具体的には下記のとおり。
・logmonのconfigにおけるechoコマンドのダブルクォート(")を、シングルクォート(')に変更

-- /etc/logmon/logmon.conf 変更前
:/var/log/httpd/error_log
(error)
echo "<%%%%>" | mail -s "Apache Error was found" root
--

-- /etc/logmon/logmon.conf 変更後
:/var/log/httpd/error_log
(error)
echo '<%%%%>' | mail -s "Apache Error was found" root
--

・取得したログ行のうちシングルクォート(')があれば、全角クォート(’)に置換

/etc/logmon/logmon.pl の watch_for 関数にて。
76行目、ローカル変数 $line を追加します。

-- /etc/logmon/logmon.pl 変更前 76行目
my ( $tail_num, $target, $message, $action, $new_action );
--

-- /etc/logmon/logmon.pl 変更後
my ( $tail_num, $target, $message, $action, $new_action, $line );
--

87行目、シングルクォートの置換処理を追加します。
(置換後の文字はお好みで)

-- /etc/logmon/logmon.pl 変更前 87行目
$new_action =~ s/<%%%%>/$_/g;
--

-- /etc/logmon/logmon.pl 変更後
$line = $_;
$line =~ s/\'/’/g;
$new_action =~ s/<%%%%>/$line/g;
--

これで、検知したログ行にダブルクォート(")やシングルクォート(')、その他メタ文字が含まれていても、問題なくメールで通知されるようになります。
logmonはまだ本番環境では使用していませんが、運用保守チームとともにもう少し評価して、問題なければ本番環境に投入してみたいと思っています。


なお、このlogmonというツールは「プロのためのLinuxシステム構築・運用技術(Software Design plus) 中井 悦司 (著) 」という書籍で知りました。

Linuxのブートの仕組みからサーバ運用管理の考え方、ストレージ管理、ネットワーク管理、Linuxの内部構造と問題判別の考え方など、Linuxサーバエンジニアとして理解しておくべき内容がわかりやすく書かれています。
とても勉強になりました。

・プロのためのLinuxシステム構築・運用技術(Software Design plus) 中井悦司 (著)
http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE-Linux%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%A7%8B%E7%AF%89%E3%83%BB%E9%81%8B%E7%94%A8%E6%8A%80%E8%A1%93-Software-Design-plus/dp/4774145017/

ネットワーク管理編もあります。

・プロのためのLinuxシステムネットワーク管理技術(Software Design plus) 中井悦司 (著)
http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE-Linux%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%BB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E7%AE%A1%E7%90%86%E6%8A%80%E8%A1%93-Software-Design-plus/dp/4774146757/

2011年06月24日

アンタスの運用保守サービスメニューができました。

アンタスでは、業務としてシステムの企画・提案と設計・開発、サービスの運用保守などを行っていますが、最近、運用保守のサービスメニューが公開されたので紹介します。

・アンタス マネージドサービスの特徴
http://antas.jp/ssd/managed1.html

・アンタス マネージドサービスの詳細と価格表
http://antas.jp/ssd/servicemenu.html#managed

詳細は上記ページおよびリンクを参照していただきたいのですが、サイト運営やシステム開発を担当される方が本来の業務に集中できるよう、サーバ・システムを見守り、障害発生時の対応を行います。
(実際、運用保守担当メンバーのおかげで、インフラ構築担当の僕も、夜間や休日にゆっくり休むことができています。)
土日祝の休日と深夜のみの対応など、サポート内容や時間帯も柔軟に対応可能です。
運用保守のみ、インフラ構築・サーバ設定のみのご用件も承ります。

ご相談、お問い合わせは下記フォームよりお願いいたします。

・アンタス 営業・サービスのお問い合わせ
https://ssl.antas.jp/modules/liaise/index2.html


※MSP(Management Service Provider)...サーバやネットワークの運用・監視・保守などを請け負う事業者、という言葉を最近知りました。