警報上下文工具 (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 許可證獲得許可。請參閱許可證文件。