如何配置Redshift Scheduled queries执行失败的错误告警
定时SQL任务仅执行失败触发告警落地方案
直接给Scheduled Queries绑定SNS做通知默认会推送全状态的执行事件,没法原生做失败场景过滤,按下面的方案配置即可,不用修改现有SQL任务逻辑:
方案1:零代码过滤(最推荐,5分钟即可配置完成)
用EventBridge事件规则做状态过滤,不需要编写额外代码:
- 先删掉原来Scheduled Query上直接绑定的SNS通知配置,避免全量状态推送冗余消息
- 在EventBridge控制台新建自定义事件规则,事件源选择对应服务的事件(Athena定时查询选
aws.athena,Redshift定时查询选aws.redshift-data) - 配置事件匹配规则,只筛选执行失败/异常取消的状态,参考匹配规则如下:
{ "source": ["aws.athena"], "detail-type": ["Query Execution State Change"], "detail": { "currentState": ["FAILED", "CANCELLED"], "scheduledQueryName": ["替换为你的每日定时SQL任务名称"] } }
- 规则的触发目标直接选择你之前建好的、用来发告警邮件的SNS主题,保存生效即可。
该配置下只有SQL执行状态匹配失败/取消时,EventBridge才会把事件推给SNS发邮件,执行成功的事件会被规则直接过滤,不会触发通知。如果需要更细的过滤(比如只过滤特定错误原因、执行超时的场景),直接在匹配规则的detail块里加对应字段的匹配条件就行。
方案2:自定义告警内容(适合需要精细化告警信息的场景)
如果觉得默认事件推送的内容太生硬、全是JSON字段不方便排查,可以在过滤层和SNS之间加一层Lambda函数:
- EventBridge规则仍按上述逻辑配置,只匹配失败状态的事件,但是触发目标改成Lambda函数
- 在Lambda里写简单的处理逻辑:根据事件里带的查询ID,拉取本次执行的具体错误信息、SQL片段、执行时长、报错位置等内容,组装成易读的告警文本
- Lambda处理完内容之后,再调用SNS/SES发送邮件给对应负责人,排查问题时无需跳转控制台查日志。
配置注意事项
- 配完规则一定要做验证:手动触发一次带语法错误的测试SQL,确认能收到失败告警;再跑一次正常可执行成功的SQL,确认不会收到通知,避免规则配置错漏
- 如果有多个定时SQL任务,可以在同一个EventBridge规则里批量配置要监控的任务名,不用给每个任务单独建规则
- 怕告警轰炸的话,可以给SNS主题加静默策略,同一个任务短时间内连续失败只发一次告警,避免刷邮箱
内容的提问来源于stack exchange,提问作者eliorb
相关产品推荐
相关产品推荐

