1
1

More than 3 years have passed since last update.

【AWS】「CloudWatch Logsを文字列検知してログ内容をメールを送信してみた」をやってみた

Posted at

はじめに

CloudWatch Logs を文字列検知してログ内容をメールを送信してみた」について、キャプチャがなくて戸惑ったり一部やり方を変えて行ったので、備忘録として残したい。

手順

SNSトピックの作成

SNS>トピック>トピックの作成を選択する。名前と表示名(オプション)を入力する。
スクリーンショット 2020-09-02 17.57.00.png
トピックの作成を選択する。
スクリーンショット 2020-09-02 17.57.07.png
SNS>サブスクリプション>サブスクリプションの作成を選択する。
スクリーンショット 2020-09-02 17.57.38.png
下記の内容を選択・入力する。
プロトコル:Eメール
エンドポイント:自身のメールアドレス
選択できたら、サブスクリプションの作成を選択する。
スクリーンショット 2020-09-02 17.58.22.png
しばらくすると下記のようなメールが送られてくるので、確認の上Confiem subscriptionを選択する。
スクリーンショット 2020-09-02 17.59.25.png

Lambda関数の作成

Lambda>関数>関数の作成を選択する。
スクリーンショット 2020-09-02 18.01.48.png
下記内容を選択・入力する。
オプション:一から作成
関数名:任意の名前を入力
ランタイム:Python3.7

関数の作成を選択する。
スクリーンショット 2020-09-02 18.02.37.png

関数コードに以下のコードを貼り付ける。

import base64
import json
import zlib
import datetime
import os
import boto3
from botocore.exceptions import ClientError

print('Loading function')


def lambda_handler(event, context):
    data = zlib.decompress(base64.b64decode(event['awslogs']['data']), 16+zlib.MAX_WBITS)
    data_json = json.loads(data)
    log_json = json.loads(json.dumps(data_json["logEvents"][0], ensure_ascii=False))

    print(log_json)

    try:
        sns = boto3.client('sns')

        #SNS Publish
        publishResponse = sns.publish(
            TopicArn = os.environ['SNS_TOPIC_ARN'],
            Message = log_json['message'],
            Subject = os.environ['ALARM_SUBJECT']
        )

    except Exception as e:
        print(e)

スクリーンショット 2020-09-02 18.03.57.png

環境変数に以下の内容を入力する。
SNS_TOPIC_ARN:前の手順で作成したメール通知用トピック ARN(ARNはSNS>トピック>該当のトピックで選択する。)
ALARM_SUBJECT:SNS で通知される際の件名
スクリーンショット 2020-09-02 18.06.59.png

スクリーンショット 2020-09-02 18.07.33.png

基本設定でタイムアウトは私の場合デフォルトで0分3秒になっているが、1分に変える。
保存を選択する。
スクリーンショット 2020-09-02 18.08.02.png

スクリーンショット 2020-09-02 18.08.50.png
アクセス権限タブを選択する。
スクリーンショット 2020-09-02 18.12.39.png
実行ロールという項目のロール名を選択する。
スクリーンショット 2020-09-02 18.13.15.png
アクセス権限タブ>ポリシーをアタッチしますを選択する。
スクリーンショット 2020-09-02 18.13.35.png
AmazonSNSFullAccessにチェックをつけて、ポリシーのアタッチを選択する。
スクリーンショット 2020-09-02 18.14.00.png

サブスクリプションフィルタの作成

Cloudwatch>CloudWatch Logs>アクション>Lambda サブスクリプションフィルターを作成を選択する。
スクリーンショット 2020-09-02 18.19.37.png

スクリーンショット 2020-09-02 18.20.07.png

以下の内容を入力する。
Lambda 関数:前の手順で作成した関数
ログの形式:出力されるログに合わせた形式を選択
サブスクリプションフィルターのパターン:検出する文字列・パターンを入力

スクリーンショット 2020-09-02 18.30.40.png
ストリーミングを開始を選択する。
スクリーンショット 2020-09-02 18.26.52.png

テスト

CloudWatch Logsのダッシュボードの対象ロググループを選択し、ログストリームのタブから対象のログストリームを選択する。
スクリーンショット 2020-09-03 17.18.50.png
アクション>Create log eventsを選択する。
スクリーンショット 2020-09-03 17.23.15.png
テスト用に送信したいメッセージを入力し、作成を選択する。
スクリーンショット 2020-09-03 17.26.09.png

参考
https://dev.classmethod.jp/articles/cloudwatch-logs-put-test-log/

1
1
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
1