0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSアラートにChatGPTで即時対応:Slackとメールにエラー原因を通知する仕組みを作った

Posted at

はじめに

普段の業務でAWSを用いた開発・運用をしています。
AWSの勉強を兼ねて、自分で手を動かしつつ普段のお困りごとを解消できる手立てを探るべく、システムでアラートが発生した際に役立つ仕組みを作ってみたのでまとめます。

記事の概要

  • AWS環境で発生したエラーに即座に対応するため、生成AI(ChatGPT)を活用した自動通知システムを構築
  • この記事では、CloudWatch Alarm、SNS、Lambdaを使って、エラーを検出し、その内容をChatGPTに確認してSlackやメールで担当者に通知する仕組みについて紹介
  • この記事は、システム障害やアラートの初動対応を自動化したい運用者やSRE、AWSを使いこなしている技術者向け

やりたいこと

  • アラート発生時にChatGPTを使って自動的にエラーの概要と対処法を取得し、通知する
  • 通知はメールとSlackを利用する

構成概要

  • 主要AWSサービス:
    • Amazon CloudWatch Alarm
    • Amazon SNS(Simple Notification Service)
    • AWS Lambda
  • 生成AI:OpenAI API (ChatGPT)
  • 通知:SNSを使ってメール通知、WebhookでSlack通知

全体の流れ:

  1. CloudWatch AlarmでLambdaのエラーを検知
  2. LambdaがSNSに通知を送信
  3. SNSからLambdaをトリガーし、エラー詳細をCloudWatch Logsから抽出
  4. OpenAI APIにエラー内容を送信し、エラー概要と対処法を取得
  5. 得られた結果をSNSでメール通知、SlackにWebhookで通知

実装詳細

1. CloudWatch Alarmの設定

  • アラーム対象: Lambda関数で発生するエラー
  • 設定手順:
    • AWSマネジメントコンソールでCloudWatchに移動
    • 「アラーム」を作成し、Lambdaエラーのメトリクスを選択
    • 通知先としてSNSを設定

2. 通知先のLambdaトリガー

  • Lambdaの役割:
    • CloudWatch Alarmが発生した際にSNSから通知を受け取り、エラーの詳細をCloudWatch Logsから抽出
    • OpenAI APIにリクエストを送り、エラーの概要と解消方法を取得
    • SNSを通じて、担当者にメール通知およびSlack通知を送信

3. Lambdaで実行する処理

  • CloudWatch Logsからエラーの抽出:
    • Lambda関数内で、CloudWatch Logsからエラーメッセージをパースして抽出
  • OpenAI APIへのリクエスト:
    • エラー内容を元に生成AI(ChatGPT)に問い合わせ、エラー概要と解消方法を取得
    • プロンプトの例:
      エラー内容: {エラーメッセージ}
      解決策を教えてください。
      
  • 結果の整形:
    • 得られた回答をパースし、メールやSlackで通知できる形式に整形

4. 通知の仕組み

  • メール通知(SNS経由):
    • SNSトピックを通じて、エラーの概要と解消方法を担当者にメールで通知
  • Slack通知(Webhook):
    • Webhookを利用して、Slackにエラーメッセージと解決策を通知

実行例

例:エラー発生時のログ

  • エラー発生時のCloudWatch Logsから抽出されたエラー内容:
    Error: Lambda function failed due to timeout.

例:ChatGPTの回答

  • OpenAI APIから得られたエラー概要と解決策:
    エラー概要: Lambda関数がタイムアウトして失敗しました。 解決策: タイムアウト時間を延長するか、関数の処理時間を短縮するためにコードの最適化を行う必要があります。

例:Slack通知

  • 通知内容(Slackスクリーンショット例):
    【エラー発生】Lambdaタイムアウト エラー概要: Lambda関数がタイムアウトしました。 解決策: タイムアウト時間を延長または処理時間の短縮が必要です。

工夫したポイント・ハマりどころ

  • エラー抽出の制限:
    • CloudWatch Logsの中でも、特定のロググループに絞ってエラーを検出するようにした
    • 大量にエラーが発生しているときに全てをAPIで投げるとコストや性能に影響するため、直近○件のエラーなど件数に制限をつけた
  • ChatGPTへのプロンプト:
    • 抽出したエラーの中からエラー文言を整形して適切なプロンプトを設計し、明確な回答が得られるよう調整した
  • 通知内容の整形:
    • Slackやメールでの通知が見やすく、わかりやすい形式になるようにフォーマットを整えた

今後の展望

  • DBへのエラーデータ保存:
    • 今後は、エラー詳細や解決策をデータベースに保存し、後から振り返りや再利用できるようにする予定
    • 過去の似たエラーとその解消方法を蓄えていくことでより迅速な対応を可能にしたい
  • 通知する先を自動で識別:
    • エラー文言やその対処法をもとに、通知先を自動で変える仕組みを導入
    • より的確な対応を取れる担当者にいち早く知らせたい

まとめ

本記事では、AWS CloudWatch AlarmとLambda、そしてOpenAI APIを使って、システム運用におけるエラー検知から通知までの自動化を実現しました。生成AIを活用することで、システム運用の初動対応が迅速化され、より効率的な運用が可能となります。

感想

普段は実装まですることがないので、コーディングだけでなくマネコンでの設定方法やレイヤーの使い方など、文章でやり方を勉強することがほとんどでした。
今回実際にやってみたというところまで経験できたことで、AWSサービスそれぞれの理解が深まりましたし、今後の開発業務でもどの工程でどんなことに困るのか想像しやすくなりました。
今後も継続的に自分の手で試していきます。

Lambdaのコードやその他AWSサービス利用時のマネコンでの設定などは別記事でまとめます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?