我想为状态更改创建一个 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 电子邮件主题行?