以前、「ストレージ使用量が一定値を超えたらメールする方法」方法をご紹介しましたね。

今回は、「似たようなことをログでもできないか?」というお話。
例えば、CloudWatch Logsで収集しているログに”error”というような特定のキーワードが入っていたらメール送信する。
よくあるエンタープライズシステムの監視機能ですが、これが簡単にCloudWatch Logsを使ってできるんです!
本記事では、CloudWatch Logsから特定のキーワードを検出してメール送信する方法をご紹介します。
CloudWatch Logsからメール送信するまでの流れ
アラートを検知してメール送信する方法は、AWSではCloudWatchアラームとSNSを利用した方法が一般的です。
※CloudWatchアラームとSNSを利用した方法につきましては、冒頭で紹介したこちらの記事をご参照ください。
で、問題は「CloudWatchアラームをどうやって設定するか」です!
CloudWatchアラームは、メトリクスデータというものを対象に逐次監視し、
「この値は条件にひっかかるからアラート発報だ」「この値は条件にひっかからないから正常だ」
という風に判断をしてくれます。
メトリクスデータとは、例えばEC2のCPU使用率やディスク使用率といった時系列にまとめられたパフォーマンスデータとなるんですが、そのデータはCloudWatch Logsにはデフォルトで存在しません。
今回はどのようにしてCloudWatch Logsのメトリクスデータを作るかがキモになるわけなんです。
CloudWatch Logsでメトリクスデータができてしまえば、もう簡単。
以下の図のような流れとなります。
CloudWatch Logsからメトリクスを作成するには?
CloudWatch Logsではメトリクスデータがデフォルトでは存在しないとお話しましたが、
メトリクスデータを作ることは可能です。
それが、メトリクスフィルタと呼ばれるものとなります。
CloudWatch Logsは「ロググループ」と「ログストリーム」という2つの階層が存在しますが、
メトリクスフィルタはロググループ層での作成となります。
なので、ロググループに含まれるログストリームがすべてメトリクスフィルタの対象となりますので、ご注意ください。
CloudWatch Logsからメトリクスフィルタを作成する方法
それではCloudWatch Logsからメトリクスフィルタを作成する方法をご紹介致します。
(1)CloudWatchコンソール画面を開きます
(2)ナビゲーションペインより、[ログ]をクリックします
(3)メトリクスフィルタを作成したいロググループを選択し、[メトリクスフィルタの作成]をクリックします
(4)”フィルタパターン”欄に抽出するキーワードを入力します。
例えば”error”というキーワードでフィルタリングしたい場合は、以下の画像のようにerrorと入力してます
※その他の記入例は、入力欄の下にある”例の表示”をクリックすると表示されます
(5)[メトリクスの割り当て]をクリックします
(6)”フィルタの名前”欄と”メトリクス名”欄に任意の名前をつけて[フィルタの作成]をクリックします
(7)メトリクスフィルタが完成しました。
ちなみに、メトリクスフィルタでひっかかるログが過去に出力されていたとしても、メトリクスデータとして蓄積されません。
なので、過去に対象のログが出力されているからといって、メトリクスフィルタを作ってみても、まだメトリクスデータとしては何も無いというケースもございます。
メトリクスフィルタ作成後からのログに対してメトリクスデータが蓄積されるということを覚えておきましょう。
複数のキーワードを指定するフィルタパターンの書き方
上記では”error”という単一のキーワードのみを指定しましたが、
場合によっては、”error”や”alert”、”emergency”など、複数のキーワードを使ったフィルタリング設定を行いたいということもあると思います。
詳細については、こちらのAWSマニュアルを確認していただきたいのですが、今回はANDとORパターンの書き方についてご紹介したいと思います。
ANDパターン
ANDパターンとは、例えば”キーワード1″と”キーワード2″の両方が入ったログをフィルタリング
するということです。
書き方
1 |
キーワード1 キーワード2 |
※キーワードの間にスペースを入れます。
AWSマニュアルの抜粋となりますが、以下が活用例となります。
フィルターパターン
1 |
ERROR Exception |
フィルタリングできるログ例
1 2 |
[ERROR] Caught IllegalArgumentException [ERROR] Unhandled Exception |
※ERRORとExceptionが入っているログがフィルタリングされます
ORパターン
ORパターンとは、例えば”キーワード1″、”キーワード2″のどちらか、または両方が入ったログをフィルタリングするということです。
書き方
1 |
?キーワード1 ?キーワード2 |
※キーワードの前に?(はてなマーク)を入れ、間にスペースを入れます。
こちらもAWSマニュアルの抜粋となりますが、以下が活用例となります。
フィルターパターン
1 |
?ERROR ?WARN |
フィルタリングできるログ例
1 2 3 |
ERROR WARN message ERROR message WARN message |
注意事項
ANDパターン、ORパターン、どちらにも言えることですが、
キーワードにアルファベット文字、およびアンダースコア以外の文字が含まれる場合は、
キーワードを”(ダブルクォーテーション)で囲みましょう。
(例)キーワードがcomplete,
1 |
"complete," |
まとめ
いかがでしたでしょうか?
上記によってメトリクスができれば、
あとは作成したメトリクスに対してCloudWatchアラームやSNSを設定することで、
CloudWatch Logsに特定のキーワードが出力されたらメールが送信される仕組みが整います。
CloudWatchアラーム、SNSの設定につきましては、冒頭でもご紹介したこちらの記事をご参照くださいませ。
以上、hidesanでした!