LoginSignup
8
2

More than 1 year has passed since last update.

Amazon CloudWatch Logsからslackにエラーログを投稿する

Posted at

Amazon CloudWatch Logsからslackにエラーログを投稿する

今回は、うまく行った構成と、うまくいかなかった構成を記述しています。

目的

AWS上のアプリケーションが、エラーログを吐いたときに、Slackにエラー情報を通知し、運用の迅速化を図る。

準備

  • AWS上のアプリケーションがAmazon CloudWatch Logsに出力するように設定しておいてください。この部分は割愛します。
  • また、ログの出力をJSON形式で出力します。それにより、クエリが使用できるようになります。

うまくいかなかった構成

Amazon CloudWatch Alarmsの構成

Amazon CloudWatch Logs -> Amazon CloudWatch メトリクス -> Amazon CloudWatch Alarms -> Amazon SNS Topics -> AWS Chatbot Slack で通知するように設定してみました。
通知はできたのですが、エラーがあったことしか通知されず。
通知でありメッセージ投稿ではない。
メッセージのカスタマイズなど必要な情報を伝えることができませんでした。
そんな気が初めからしていましたが。

lambda to AWS Chatbot Slack

Amazon CloudWatch Logs -> Amazon CloudWatch サブスクリプションフィルタ -> AWS Lambda -> Amazon SNS Topics -> AWS Chatbot Slack

エラーログの内容が送れなかったので、サブスクリプションフィルタとLambdaを使用してみました。
しかし、Amazon SNS Topics -> AWS Chatbot Slackの部分は、上の通知には使用できるが、Lambdaから自由なメッセージの送信には現時点では対応しておらず、いろいろなパターンで出力してみましたが、ダメでした。

Event received is not supported (see https://docs.aws.amazon.com/chatbot/latest/adminguide/related-services.html ):

というメッセージがチャネルのログに出力されました。

うまく行った構成

Amazon CloudWatch Logs -> Amazon CloudWatch サブスクリプションフィルタ -> AWS Lambda -> Slack incoming webhook

AWS Chatbot Slack がうまくいかなかったので、直接Slackに送るようにしました。
AWSだけで完結したかったのですが。
それぞれの設定の資料は以下です。

Amazon CloudWatch サブスクリプションフィルタ

フィルターに

{ $.level= "ERROR" }

に設定する。ログレベルがERRORの場合に出力されるようになります。

AWS Lambda

Amazon CloudWatch サブスクリプションフィルタ
からエラーログを受け取り、整形し、
Slack incoming webhook
にわたす処理が必要です。

ログ受け取りは、base64とgzipを使用します。
下記参照

Slack

下記ページから設定し、
URLを取得し、
URLにメッセージを送れば連携が完成します。

8
2
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
8
2