我想要為狀態變更建立 Amazon CloudWatch 警示通知,以包含觸發警示的日誌事件。
簡短描述
您可以設定指標篩選器以符合特定的日誌事件,例如包含 AccessDenied 或 UnauthorizedOperations 錯誤的 AWS CloudTrail 事件。然後,使用 CloudWatch Logs 取得指標。若要監控指標,請建立 CloudWatch 警示。
預設情況下,使用 Amazon Simple Notification Service (Amazon SNS) 的 CloudWatch 警示會傳送包含警示和指標詳細資訊的預先格式化通知。若要確定導致狀態變更的原因,您可以將觸發 CloudWatch 警示的日誌事件合併到通知中。
若要在警示狀態改變時呼叫 AWS Lambda 函式,請使用 CloudWatch 警示的直接 Lambda 整合。然後,Lambda 函式可以發佈包含相關日誌事件的自訂通知。
解決方法
**先決條件:**確保您有現有的 CloudWatch 警示,可以監控來自指標篩選器的自訂指標。如需詳細資訊,請參閱根據靜態閾值建立 CloudWatch 警示。
建立 AWS Lambda 函式
設定 Lambda 函式以執行下列動作:
-
剖析 CloudWatch 警示事件詳細資訊,例如警示名稱、描述、時間戳記和狀態改變的原因。您可以將詳細資訊合併到自訂訊息中。
-
使用 CloudWatch Logs Insights 分析相關 CloudWatch 日誌群組中的日誌資料。
當警示改變狀態時,Lambda 函式會發出 StartQuery API 呼叫來針對日誌群組執行查詢。以下範例查詢總結了因 AccessDenied 或 UnauthorizedOperation 錯誤而失敗的 CloudTrail API 呼叫:
filter (errorCode="AccessDenied" or errorCode="UnauthorizedOperation")
| stats count(*) as Hits by errorCode, errorMessage, sourceIPAddress, userIdentity.arn
| sort Hits desc
-
使用 GetQueryResults 來擷取對應的結果。
-
使用 Amazon SNS Publish API,傳遞包含警示詳細資訊和 CloudWatch Logs Insights 查詢結果的自訂訊息。
相關資訊
如何自訂預設的 Amazon SNS 電子郵件主旨行?