警报上下文工具 (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 控制台
在导航窗格中,选择日志,然后选择日志见解。
在选择日志组下拉列表中,选择/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
:启用或禁用 Amazon Bedrock 用于生成 AI。默认为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
(str):日志组的名称。start_time
(str):查询的开始时间。end_time
(str):查询的结束时间。query
(str):Logs Insights 查询。functions_metrics
)dashboard_metrics
(列表):仪表板的指标列表。annotation_time
(str):仪表板的注释时间。start
(str):仪表板的开始时间。end
(str):仪表板的结束时间。region
(str):AWS 区域。functions_xray
)trace_ids
(list):要处理的跟踪 ID 列表。start_time
(str):跟踪处理的开始时间。end_time
(str):跟踪处理的结束时间。region
(str):AWS 区域。 请参阅贡献以获取更多信息。
该库根据 MIT-0 许可证获得许可。请参阅许可证文件。