LoginSignup
1
0

More than 1 year has passed since last update.

CloudWatch Logs に特定の文言が出力されていたら通知する方法

Posted at

CloudWatch Logs に保存したログに特定の文言が出力されていたら通知する方法を調べていたら、CloudWatch Logs のサブスクリプションフィルタという機能を使えば実現できることが分かったので、メモとして残しておきたいと思います。

構成

構成としては、CloudWatch Logs のサブスクリプションフィルタという機能を使い、サブスクリプションフィルタで検知したログの内容を Lambda に送り、Lambda から SNS トピックにパブリッシュするという構成になっています。

image.png

ロググループごとに、最大2つのサブスクリプションフィルタを設定することができるようです。
また、今回は、Lambda に送っていますが、Amazon Kinesis や Amazon KinesisData Firehose などへ送ることもできるようです。
サブスクリプションを使用したログデータのリアルタイム処理 - Amazon CloudWatch Logs

構築

AWS CDK(v2) を使って構築を行います。
CDK コード一式は こちら から取得できますので、必要に応じてご利用ください。

デプロイすると、「SNSトピックとサブスクリプション」「Lambda」「サブスクリプションフィルタ」が作成されます。
サブスクリプションフィルタを設定する CloudWatch ロググループは、CDK で作成するのではなく(別の手段で作成した)既存のモノを使用するようにしています。
もしも、CDK で新規作成する場合は、以下のようなコードになります。

const logGroupNew = new LogGroup(this, 'SubscriptionFilterLogGroup', {
    logGroupName: 'your-log-group-name',
    retention: RetentionDays.THREE_MONTHS
})

今回はログデータに「Start」「START」「start」いずれかの文言が出力されていたら、通知が上がるように設定しています。

new SubscriptionFilter(this, 'LogSubscriptionFilter', {
  logGroup,
  destination: new LambdaDestination(logProcessingFunction),
  filterPattern: FilterPattern.anyTerm('Start', 'START', 'start')
});

デプロイ

cdk deploy コマンドを実行する際に、-c オプションを使って、「通知メッセージを受けるメールアドレス」と「サブスクリプションフィルタを設定する(既存の)ロググループ名」を指定します。

cdk deploy -c notification_email="<your-mail-address>" -c log_group_name="<your-log-group>"

-c オプションについてはこちらの AWS 公式ページに記載があります。
Get a value from a context variable - AWS Cloud Development Kit (AWS CDK) v2 (amazon.com)

動作確認

デプロイが完了すると、おなじみの SNS サブスクリプションの確認メールが届くので、Confirm subscription をクリックします。

image.png

サブスクリプションフィルタを設定したロググループ に、「Start」「START」「start」のいずれかの文言を含むログが出力されると、指定したメールアドレス宛に通知メッセージが届きます。

・CloudWatch Logs の内容
image.png

・通知メールの内容
image.png

後始末

後始末は cdk destroy コマンドで行います。
デプロイ時と同じ様に、-c を付与して実行します。

cdk destroy -c notification_email="<your-mail-address>" -c log_group_name="<your-log-group>"

参考ページ

今回の記事を書くにあたって以下のページを参考にしました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0