アラーム コンテキスト ツール (ACT) は、トラブルシューティングと分析に役立つ追加のコンテキストを提供することで、AWS CloudWatch アラームを強化します。このソリューションは、Lambda、CloudWatch、X-Ray、Amazon Bedrock などの AWS のサービスを活用することで、メトリクス、ログ、トレースを集約して分析し、有意義な洞察を生成します。 Amazon Bedrock の生成 AI 機能を使用して、調査結果を要約し、潜在的な根本原因を特定し、オペレーターがより効率的に問題を解決できるように関連するドキュメントのリンクを提供します。この実装は、展開と既存の可観測性パイプラインへの統合が容易になるように設計されており、応答時間が大幅に短縮され、根本原因分析が向上します。
リポジトリのクローンを作成します。
git clone https://github.com/aws-samples/alarm-context-tool
cd alarm-context-tool
IDE を使用してコード内の問題を検出する予定がある場合は、依存関係をインストールします。
pip install -r ./dependencies_layer/requirements.txt
pip install aws_lambda_powertools
一部の地域では、template.yaml のコロンの後にある Lambda Insights のレイヤー バージョンを変更する必要がある場合があります。 https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-extension-versionsx86-64.html を参照してください。
- !Sub arn:aws:lambda:${AWS::Region}:580247275435:layer:LambdaInsightsExtension:49
template.yaml ファイルを編集して、受信者の電子メール アドレスと送信者のアドレスを指定します。
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
必要に応じて追加の環境変数を更新します
CloudWatch アラームから通知を受け取る SNS トピックを更新します。
ガイド付きデプロイメントを使用して、以下のことから始めます。
sam build
sam deploy --guided
その後、次のコマンドを使用して、ビルド、デプロイ、テストを行うことができます。 テスト イベントは共有する必要があります。 「テスト」を参照
sam build ; sam deploy --no-confirm-changeset ; sam remote invoke --stack-name alarm-context-tool --region < aws-region > --test-event-name < test-event >
デプロイが完了すると、Lambda 関数は CloudWatch アラームにサブスクライブされた SNS トピックによってトリガーされます。この機能は、関連するメトリック、ログ、トレースなどの追加のコンテキストを使用してアラーム メッセージを強化します。 Amazon Bedrock を使用して収集されたデータを分析し、実用的な洞察を生成します。
別の AWS サービスの新しいハンドラーを作成するには、次の手順に従います。
新しいハンドラー ファイルの作成: handlers
ディレクトリに新しい Python ファイルを作成します。たとえば、 new_service_handler.py
です。
ハンドラー関数の定義: 既存のハンドラーと同様のハンドラー関数を実装します。テンプレートは次のとおりです。
import boto3
import botocore
from aws_lambda_powertools import Logger , Tracer
logger = Logger ()
tracer = Tracer ()
@ tracer . capture_method
def process_new_service ( dimensions , region , account_id , namespace , change_time , annotation_time , start_time , end_time , start , end ):
# Your implementation here
pass
ハンドラーを Lambda 関数に追加します。 lambda_function.py
更新して、トリガーに基づいて新しいハンドラーをインポートし、呼び出します。
テンプレートを更新する: template.yaml
変更して新しいハンドラーを組み込み、必要な権限を更新します。
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Policies :
- Statement :
- Effect : Allow
Action :
- new-service:Describe*
Resource : " * "
必要な権限を追加する: 上記のようにtemplate.yaml
ファイルを更新して、新しいハンドラーに必要な権限があることを確認します。
アラームをトリガーする: 次のコマンドを使用してアラームを手動でトリガーします。<alarm_name> はアラームの名前に置き換えます。
aws cloudwatch set-alarm-state --state-value ALARM --state-reason " Testing " --alarm-name " <alarm_name> "
ログに生成されたテストケースを使用する: メインの Lambda 関数は、Lambda コンソールで使用できるテストケースを生成します。 「コンソールまたはsam remote invoke
使用した Lambda 関数のテスト」を参照してください。
CloudWatch コンソールを開く
ナビゲーション ウィンドウで、 [ログ]を選択し、 [Logs Insights]を選択します。
[ログ グループの選択] ドロップダウンで、 /aws/lambda/alarm-context-tool-AlarmContextFunction-xxxxxxxxxxxxを選択します。
次のクエリを入力し、<alarm_name> をアラームの名前に置き換えます。
fields @timestamp, @message, @logStream, @log
| filter message = "test_case" AND Records.0.Sns.Message like /<alarm_name>/
「クエリの実行」を選択します
ログ エントリを展開し、 @messageフィールド全体をコピーします。
これを使用して、オンデマンドで Lambda 関数をテストできます。
Lambda 関数には次の環境変数を設定できます。
AWS_LAMBDA_LOG_LEVEL
: AWS Lambda ログのログ レベルを設定します (例: INFO、DEBUG)。デフォルトはINFO
です。ANTHROPIC_VERSION
: 使用する Anthropic モデルのバージョンを指定します。デフォルトはbedrock-2023-05-31
です。BEDROCK_MODEL_ID
: 使用する Amazon Bedrock モデルの ID。デフォルトはanthropic.claude-3-sonnet-20240229-v1:0
です。BEDROCK_REGION
: Bedrock モデルがデプロイされる AWS リージョン。デフォルトはus-east-1
です。BEDROCK_MAX_TOKENS
: Bedrock モデルで使用されるトークンの最大数。デフォルトは4000
です。METRIC_ROUNDING_PRECISION_FOR_BEDROCK
: Bedrock に送信する前にメトリクスを丸める精度。デフォルトは3
です。POWERTOOLS_LOG_LEVEL
: AWS Lambda Powertools ログのログ レベルを設定します (例: INFO、DEBUG)。デフォルトはINFO
です。POWERTOOLS_LOGGER_LOG_EVENT
: Lambda Powertools ログへの完全なイベントのログ記録を有効にします。デフォルトはTrue
です。POWERTOOLS_SERVICE_NAME
: Lambda Powertools で使用されるサービスの名前。デフォルトはAlarm
です。POWERTOOLS_TRACER_CAPTURE_RESPONSE
: トレースで応答をキャプチャするかどうかを制御します。デフォルトはFalse
です。RECIPIENT
: 通知を受信する電子メール アドレス。SENDER
: 通知の送信者の電子メール アドレス。USE_BEDROCK
: 生成 AI に対する Amazon Bedrock の使用を有効または無効にします。デフォルトはTrue
です。これらの変数を構成するには、 template.yaml
ファイルを更新します。
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
AWS_LAMBDA_LOG_LEVEL : INFO
ANTHROPIC_VERSION : bedrock-2023-05-31
BEDROCK_MODEL_ID : anthropic.claude-3-sonnet-20240229-v1:0
BEDROCK_REGION : us-east-1
BEDROCK_MAX_TOKENS : 4000
METRIC_ROUNDING_PRECISION_FOR_BEDROCK : 3
POWERTOOLS_LOG_LEVEL : INFO
POWERTOOLS_LOGGER_LOG_EVENT : " True "
POWERTOOLS_SERVICE_NAME : Alarm
POWERTOOLS_TRACER_CAPTURE_RESPONSE : " False "
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
USE_BEDROCK : " True "
functions_logs
)log_group_name
(文字列): ログ グループの名前。start_time
(文字列): クエリの開始時刻。end_time
(文字列): クエリの終了時刻。query
(文字列): Logs Insights クエリ。functions_metrics
)dashboard_metrics
(リスト): ダッシュボードのメトリクスのリスト。annotation_time
(str): ダッシュボードの注釈時間。start
(str): ダッシュボードの開始時刻。end
(str): ダッシュボードの終了時刻。region
(文字列): AWS リージョン。functions_xray
)trace_ids
(リスト): 処理するトレース ID のリスト。start_time
(str): トレース処理の開始時刻。end_time
(str): トレース処理の終了時刻。region
(文字列): AWS リージョン。 詳細については、「貢献」を参照してください。
このライブラリは、MIT-0 ライセンスに基づいてライセンスされています。 LICENSE ファイルを参照してください。