CloudWatch LogsメトリクスフィルターでWバイト文字(日本語)のアラーム通知

CloudWatch Logsのメトリクスフィルターで、Wバイト文字(日本語)を指定したアラーム通知を実施してみました。
2020.04.26

CloudWatch LogsメトリクスフィルターでWバイト文字(日本語)を指定することが可能です。ドキュメントの通りですが、アルファベット文字以外を利用する際は、二重引用符("")で囲む必要があります。

アルファベット文字およびアンダースコア以外の文字を含むメトリクスフィルターの語句は二重引用符 ("") で囲む必要があります。

本エントリでは、CloudWatch Alarm含むメトリクスフィルターの作成手順と、実際にWバイト文字をロギングしてアラーム通知(メール)を実施してみたいと思います。ここでは、CloudWatch LogsへのロギングにLambda Functionを利用します。

構成

Lambda Function

CloudWatch LogsにロギングするためのLambda Functionを作成します。ここではランタイムにPython 3.8を利用しました。ロギングする文言は任意です。ここでは、以下のコードでLambda Functionを作成しました。

testCloudWatchLogsFilter

import logging
logger = logging.getLogger()

def lambda_handler(event, context):
    logger.error('検索処理でエラーが発生しました')
    logger.error('データが存在しません')

CloudWatch Logsへログ出力するためにテスト実行しました。

処理が終わるとCloudWatch LogsにLambda Functionのロググループ(/aws/lambda/<Lambda Function名>)が作成されます。

ログを確認するとLambda Functionで出力したメッセージがロギングされています。

CloudWatch

CloudWatch Logsメトリクスフィルターでは、定義したフィルターパターンに合致すると、CloudWatchメトリクスの値が増分されます。該当のメトリクスに対してCloudWatch Alarmを設定することで、キーワード監視の仕組みが実現できます。メトリクスフィルターを設定したいロググループ(ここでは/aws/lambda/testCloudWatchLogsFilter)を選択し、メトリクスフィルターをクリックします。

「メトリクスフィルターの追加」をクリックします。

フィルターパターンに検出したい文字を二重引用符で囲んで設定します。ここでは、Wバイト文字をフィルターパターンにしたいので「"エラー"」を指定しました。

こちらのフィルタパターンにより、Lambda Functionにて出力した「検索処理でエラーが発生しました」に合致する想定です。「パターンのテスト」をクリックして確認します。

想定どおり該当のメッセージがパターンに合致しました。CloudWatchメトリクスを作成しますので「メトリクスの割当」をクリックします。

任意の値でメトリクスフィルター名および、メトリクス名を指定します。「フィルターの作成」をクリックします。

作成したメトリクスに対して、CloudWatch Alarmの設定をしますので「アラームの作成」をクリックします。

メトリクスの条件指定では以下を設定しました。この後設定します、アクション(ここではSNS)のトリガーは、CloudWatch Alarmの状態が変わり、指定した期間にわたって持続している必要があります。

ここでは期間を1分にしていますが、1分未満とする場合は高解像度メトリクスとなり、より迅速に状態を把握できますが、料金に影響がでてきますので要件にあわせ設定ください。

CloudWatch Alarmの状態が変化したときにSNSトピックを介して通知されるよう、以下アクションの設定を行いました。

任意のAlarm名を指定します。

指定内容を確認し、問題なければ「アラームの作成」をクリックします。

CloudWatch Alarmが作成されました。

動作確認

動作確認を行います。先に作成したCloudWatch LogsにロギングするLambda Functionsをテスト実行します。

CloudWatch Logsのフィルタパターンに合致するメッセージがロギングされました。

これにより、LambdaErrorMetricsが増分され、CloudWatch Alarmの条件(1 > 0)を満たし、Alamの状態が変わりました。

Alarmに指定したSNSに、イベントが発行されメール通知が行われました。通知される内容はCloudWatch Alarmの状態変化といった内容になります。そのため、CloudWatch Logsにロギングされたメッセージについてはメールからは確認できませんのご留意ください。

さいごに

今回は単一語句("エラー")で動作確認などを行いましたが、複数語句など条件を指定することも可能ですので、要件にあわせて設定してください。