0
0

failure-analysis-assistant (FA2) で AIops を実現する

Last updated at Posted at 2024-08-05

FA2

  • AI/ML を活用した障害分析の効率化を行います
  • 従来の手動分析の課題を克服するために、LLM を使用して、ログやトレースなどのテレメトリデータを分析し、迅速な障害特定と原因究明を実現します

Slack App 版と Chatbot Custom Action 版

  • Failure Analysis Assistant (FA2) Slack App 版

  • Failure Analysis Assistant (FA2) AWS Chatbot Custom Action 版

Slack App 版と Chatbot Custom Action 版の 2 つが存在する。
それぞれ、Git の構成図を見ればわかるが、
 前者は API Gateway 経由でリクエスト・レスポンスを返し、SLack へ送る。
 後者は Slack から Lamaba を呼び出し、回答内容は SNS トピック経由で、Chatbot を通じ、Slack に送られる。

回答内容はいずれも変わらない。今回は前者の方法で実装する。

サンプルアプリケーションの作成

サンプルアプリケーションの作成は本題ではありませんので、基本的にドキュメントを参考にします。
既に Slack に通知するワークフローが存在する場合は不要です。

サーバレスアプリケーションの作成

今回はテスト用に適当な SAM アプリケーションを準備しておきました。
sam init 「1 - AWS Quick Start Templates」 の 「7 - Serverless API」です。
API Gateway + Lambda + DynamoDB のお決まりパターンです。

$ sam init

You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.

Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Data processing
        3 - Hello World Example with Powertools for AWS Lambda
        4 - Multi-step workflow
        5 - Scheduled task
        6 - Standalone function
        7 - Serverless API
        8 - Infrastructure event management
        9 - Lambda Response Streaming
        10 - Serverless Connector Hello World Example
        11 - Multi-step workflow with Connectors
        12 - GraphQLApi Hello World Example
        13 - Full Stack
        14 - Lambda EFS example
        15 - DynamoDB Example
        16 - Machine Learning
Template: 7

SNS トピックの作成

Chatbot と連携するための SNS トピックを作成しておきます。

Chatbot の作成

Chatbot 作成し、先程作成した SNS トピックとサブスクライブします。

CloudAlarm の作成

AWS/ApiGateway で 5XXError が発生した場合にアラートを出すように CloudAlarm を作成し、アクションには先程作成した SNS トピックを指定します。

Chatbot から Slack にアラームへの通知確認

念の為、Chatbot から Slack にアラームの通知が来ていることを確認しておきましょう。

スクリーンショット 2024-08-01 18.32.46.png

これで、サンプルアプリケーションの準備が整いました。

Athena テーブル

データベースの作成

「aiops_db」というデータベースを作成しておきます。

CREATE DATABASES aiops_db;

ALB テーブルの作成

DDL で「alb_access_logs」というテーブルを作成しておきます。

CloudTrail テーブルの作成

DDL で「cloud_trail_logs」というテーブルを作成しておきます。

API Gateway の準備

API Gateway での CloudWatch ログ記録

AWS re:Post にある「解決策」を参考に、
[CloudWatch へのログ記録用の IAM ロールを作成する]と
[API ゲートウェイコンソールに IAM ロールを追加する]
を実施し、API Gateway が CloudWatch にログを送れるようにしておきます。

Bedrock の準備

Bedrock モデルアクセスの有効化

モデルアクセスを追加しておきます。

Git では、「Claude v3 Sonnet のアクセス許可をしていること」と書かれていますが、2024/08/01 現在、東京リージョンでは Claude v3 Sonnet に未対応となりますので、Claude v2.1 を使います。

Slack App 設定 1

Slack App の登録

Git の手順にある通り Slack App の登録を行います。

パラメータ

parameter.ts の設定

parameter.ts を自身の環境に合わせて修正していきます。
modelId は先に説明した通り、Claude v2.1 を使いますので、Claude v2.1 の modelId にします。
cwLogsLogGroups は Lamnda と API Gateway の CloudWatch ログを指定しました。

parameter.ts
export const devParameter: AppParameter = {
  env: {
    account: "<アカウントID>",
    region: "ap-northeast-1",
  },
  language: "ja",
  envName: "Development",
  modelId: "anthropic.claude-v2:1",
  cwLogsLogGroups: [
    "/aws/lambda/aiops-app-putItemFunction-H1cPrneg0xhR", 
    "/apigateway/aiops-app",   
  ],
  // It's just sample query. Please you optimize to your situation.
  cwLogsInsightQuery: "fields @message | limit 100",
  databaseName: "aiops_db",
  albAccessLogTableName: "alb_access_logs",
  cloudTrailLogTableName: "cloud_trail_logs",
  xrayTrace: true,
};

デプロイ

cdk deploy

通常の CDK のデプロイと同じようにデプロイします

$ npm install
$ npx cdk deploy --all --require-approval never

Slack App 設定 2

Slack App の設定

Git の手順にある通り Slack App の設定を行います。

Slack App を Slack チャネルに追加

Git の手順にはありませんでしたが、Slack App を Slack チャネルに参加させる必要があります。該当のチャンネルで、<@アプリ名>を入力させることで参加させることができます。

スクリーンショット 2024-08-02 18.47.24.png

テスト

テストシナリオ

CloudWatch アラームを発生させるために Dynamo DB に対してProvisionedThroughputExceededException エラーを意図的に発生させました。

CloudWatch アラーム

CloudWatch アラームを発生させ、Slack に通知がきたことを確認します。これは、API Gateway で 5XXエラーが発生したことを意味します。

スクリーンショット 2024-08-02 18.23.46.png

リクエスト

「エラーの通知内容(アラーム)の内容」を入力し、「ログ取得の開始時間」を入力します。「ログ取得の開始時間」は Slack に通知された時間が自動入力されるのでそのままで良いでしょう。

スクリーンショット 2024-08-02 14.17.58.png

レスポンス

「FA2 によるエラーの原因の仮説」で意図した回答が得られました。
CloudWatch ログは CloudWatchLogs Insight を利用して、
S3 は Athena を利用して情報が収集されます。
スクリーンショット 2024-08-02 18.26.15.png
スクリーンショット 2024-08-02 18.26.59.png
スクリーンショット 2024-08-02 18.27.18.png

セキュリティ

Git に書かれている通り、Slack のエンドポイントはパブリックに公開されているため、攻撃対象となる可能性があります。 そのため、API Gateway に対し、WAF をアタッチするなど考慮する必要があります。

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