如何借助CloudWatch告警与SNS将Lambda错误信息推送至邮箱?
实现Lambda错误信息邮件接收+CloudWatch告警启停控制方案
一、调整SNS主题的订阅配置
你当前的流程里,SNS只触发了去Netcool的Lambda,没配置邮件订阅。要同时实现邮件接收和Netcool推送,得给SNS主题加两种订阅:
- 邮件订阅:创建SNS主题(比如
lambda-error-alerts)后,选Email协议,填收件邮箱,完成订阅确认。 - Lambda订阅:同样在这个主题下,选
AWS Lambda协议,关联你现有的那个调用Netcool API的Lambda函数。
这样CloudWatch告警触发后,SNS会同时给邮件和Lambda发消息,互不影响。
二、让CloudWatch告警携带错误日志到邮件
要让邮件里有具体的错误信息,得在CloudWatch告警配置里开启日志片段包含:
- 配置告警时,选Lambda的
Errors指标(命名空间AWS/Lambda,维度选你的目标Lambda),设置触发阈值(比如连续1次错误就告警)。 - 在告警的通知设置里,打开包含日志片段选项,指定你的Lambda对应的CloudWatch日志组,设置日志时间范围(比如告警触发前5分钟)。这样告警邮件里会直接附上错误发生时的具体日志内容。
- 要是用CLI或者CloudFormation配置,记得在
AlarmActions里指定SNS主题ARN,同时配置好日志片段相关参数。
三、优化中间Lambda的逻辑(可选)
如果你的中间Lambda需要处理错误信息再推Netcool,直接解析SNS事件里的Message字段就行——SNS发的告警消息里已经包含了错误指标和日志片段,Lambda可以直接拿这些内容调用Netcool API,完全不影响邮件的内容。
四、启停告警的操作方式
CloudWatch告警本身就支持一键启停,不用额外开发:
- 控制台操作:找到对应的告警,点状态下拉框选
启用或禁用。 - CLI操作:用
aws cloudwatch enable-alarms --alarm-names "你的告警名称"启用,disable-alarms命令禁用,还能批量操作多个告警。
排查小技巧
- 邮件没收到日志:检查告警是否开了日志片段包含,确认Lambda日志组的权限是否允许CloudWatch读取(默认是允许的)。
- Lambda没触发:检查Lambda执行角色有没有
SNS:ReceiveMessage权限,以及SNS主题的访问策略是否允许调用Lambda。
内容的提问来源于stack exchange,提问作者Bhasker Jha
相关产品推荐
相关产品推荐

