Redshift计划查询错误通知



我正在使用Redshift调度查询来运行UNLOAD命令。如果查询失败,我希望收到通知。我启用了SNS,但无论作业成功还是失败,消息都是一样的。只有在作业失败的情况下,我才能收到通知?

更新:我可以使用以下命令得到错误消息的响应。我如何设置CloudWatch或其他服务来对此进行监控并发送通知?

aws redshift-data describe-statement --id {id} --region us-west-2

有几个选项可供选择:

  • 您可以在boto3中使用lambda函数来检查红移上的查询是否成功运行

  • 您还可以使用lambda函数来检查cloudwatch中的日志

这可以使用AWS事件桥规则来完成。创建具有以下模式的规则:

{ "source": [ "aws.redshift-data" ], "detail-type": [ "Redshift Data Statement Status Change" ], "detail": { "state": [ "FAILED" ] } }

只要计划的查询失败,就会触发此规则。您可以将此规则的目标设置为SNS主题,该主题可以将事件负载转发到您的电子邮件。以下是在计划查询失败的情况下可以预期的示例负载:

{"版本":"0","id":"64207b01-e97e-b05a-c090-1ba0c3eee01f","细节类型":"红移数据语句状态"改变"源":"aws.redshift数据"账户":"xxxxxx"时间":"2023-04-13T11:04:38Z""区域":"eu-central-1"资源":["arn:aws:redshift:eu-central-1:xxxxxx:cluster:xxxx cluster"],";细节":{"主体":"arn:aws:sts::xxxx:假定角色/RedshiftScheduler/xxxxx","语句名称":"xxxxx"、"语句Id":"65ecdd43-5c0e-4507-841d-5857c6835b1f"、"redshiftQueryId":1.6043919E7、"状态":"失败"、"行";:-1.0,"expireAt":1.681642837E9}}

希望它能有所帮助。

我们在python lambda函数中实现的解决方案:

  1. 列出所有EventBridge规则:aws events list-rules
  2. 对于每个规则,获取目标并筛选那些具有Redshift集群目标的规则:aws events list-targets-by-rule
  3. 对于每个Redshfit目标,通过将SQL语句和CRON定义与列querytxtstarttime相匹配,尝试在STL_QUERY中找到它。您可以使用pyawscron将您的CRON转换为时间戳
  4. 如果记录不存在,则发出警报

此解决方案可以根据您的需要轻松增强。

便于在STL_QUERY中查找的提示:为您的计划查询使用特定的user

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新