toto_1212

技術のログをツラツラ書きます。自分用ですが参考にしていただけたら嬉しいです。間違ってたらドンドン突っ込んでください。

CloudWatchでお手軽文字列監視

CloudWatchを使ってお気軽な監視通知として、ファイル内の文字列を拾ってCludWatchのカスタムメトリクスに登録して、SNSで通知する方法を書きます。

環境内に監視システムを入れるほどでもなく、リージョンの都合でCludWatchLogsが利用できないといった場合に使えるのかと思います。

ロジックは簡単で、ファイル内で任意の文字列を拾ってawscliのcloudwatchを使ってカスタムメトリクスに登録して、その値をトリガにSNSでメール通知するというものです。
インスタンスにはawscliが必須になります。
awscliの導入はこちらを参考に。

実行できればどこのディレクトリでも構いませんのでインスタンスに以下のシェルを置きます。
/var/log/messages内に“error”という文字列がある場合メールが届くような設定を例にします。
必要に応じて対象Logファイルやキーワードは変更して下さい。

vi /root/check_error.sh

#!/bin/bash

MESSAGE=$(cat /var/log/messages | grep error | wc -l)

INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`

aws cloudwatch put-metric-data --metric-name Message_Check --value $MESSAGE --namespace messages --dimensions InstanceId=$INSTANCE_ID

試しに文字列"error”を/var/log/message内に書きます。

echo error >> /var/log/messages

先ほどのシェルを実行します。(権限を適当に755とかにして下さい。)

./check_error.sh


CloudWatchでカスタムメトリクスとして登録されているかを確認します。
f:id:toatoshi:20140718153537j:plain

Cloudwatchの通知設定をします。
f:id:toatoshi:20140718153551j:plain

SNSで設定されたemailアドレスへ、メール通知されているかを確認します。
f:id:toatoshi:20140718153605j:plain

cronでシェルを回せばその間隔で監視することが可能になります。

お好みの間隔でcronに登録しておけばお手軽にログの文字列監視が可能となります。
但し、無償のCloudwatchでは監視間隔で問題があったり、監視する文字列が多かったりする場合には監視専用のソフトを導入するのがいいですね。
CloudWatch Logsが東京に来るのが待ち遠しいですねー。

【参考資料】
Amazon Web Services ブログ: 【AWS発表】 クラウド監視サービスAmazon CloudWatchでカスタムのメトリクスが使用可能に

cloudwatch — AWS CLI 1.3.23 documentation