全体の流れ
大まなか流れは以下の感じでしょうか。
- Lambdaを書く(テストしてログの連携を確認する)
- CloudWatchのルール設定(Lambda関数が定期実行されるようにする)
- CloudWatchでメトリクス設定(ログ中のError文字列を検出する)
- CloudWatchでアラート設定(メールで通知する)
監視と通知の仕様
Lambda関数で特定のURLにリクエストを投げ、statusCodeが200ならOK、それ以外ならErrorとする。
Errorの場合はメールに通知する。
Lambdaを書く
まず、Lambda関数を用意します。
Webの監視コードを書く
webStatusCheckという名前で関数を作成します。
http/httpsモジュールは標準で使えるので、それを利用します。単に、リクエストを投げて、statusCodeを取得しているだけ。
const https = require('http');
exports.handler = (event, context, callback) => {
//URL
var url = 'http://www.bluecode.jp/lambda/';
const req = https.request(url,(response)=>{
//statusCode取得
var code = response.statusCode;
if(code == 200){
//OK
console.log("OK " + code);
}else{
//Error
console.log("Status Error " + code)
}
});
//リクエスト自体がエラー
req.on('error',(error)=>{
console.log("Fatal Error "+error.message);
});
req.end();
};
複雑なことをやりたければ、レスポンスをパースするなどして、もっと詳細なステータスを見ればよいでしょう。
CloudWatchとの連携
console.log("")で出力するだけで、CloudWatchに連携されるので特に何もすることはありません。
[テスト]をして、ログがCloudWatchに出力されていることを確認しておきます(下記は正常と異常時のチェックをしています)。
なお、Lambdaのコードが変わると、ログのストリームが変更されるので注意が必要です。
ルール・メトリクス・アラームの設定
ルールの設定
では、まずルールの設定を行います。
先ほど作成したLambda関数を1分毎に実行するように設定します。
メトリクスの設定
次にメトリクスの設定をします。
メトリクスはログに対して設定するため、ログのメニューから[メトリクスフィルタの作成]を選択して作成します。
ここではログに"Error"という文字列が含まれていたら反応するメトリクスを設定します。
正規表現などは利用できないようです。
アラームの設定
メトリクスの作成途中で、アラートも設定します。
Errorが起こるとしきい値が1となるようなので、条件を >0 と設定し、欠落データの処理方法を[適正]とします。
更に間隔を1分間隔に、エラー発生時の通知先を設定します。
メールは新規の場合、確認メールが送られるようなのでConfirmする必要があります。
設定が終われば監視がスタートします。
最初は[不足」となっていますが、しばらく立つとOKになります(適正と設定したので)。
アラームのテスト
一通り設定が完了したのでテストをしてみます。
監視先URLのファイルを削除してみます。
アラートが検出されました。
メールも届きました。
障害が復旧した場合、自動的に元に戻るようです。
以上。