2

我正在使用 AWS Lambda(每小时由 Cloudwatch 规则触发)来触发 EMR 集群的创建以执行作业。EMR 集群完成其步骤后,将结果文件写入 S3 存储桶。关键路径是一天中的小时

/bucket/2017/04/28/00/result.txt
/bucket/2017/04/28/01/result.txt
..
/bucket/2017/04/28/23/result.txt

我想发出一些警报,以防 EMR 作业由于某种原因未能在该小时内创建 result.txt。

我已经在 Lambda 调用计数和 lambda 错误计数上发出了一些警报,但我没有找到合适的警报来测试 EMR 是否确实正确地完成了它的工作。

请注意,Lambda 每小时每 3 分钟触发一次,大约需要 15 分钟才能完成。一个好的解决方案是创建一个其他 Lambda,每 30 分钟触发一次,并检查存储桶中是否存在正确的密钥?如果没有,那么将一些日志写入 cloudwatch,我可以监控并使用它们来创建警报?

我还有什么其他方法可以实现这种警报?

4

1 回答 1

2

S3 提供有关每个存储桶的对象计数的免费指标,但发布的频率不足以满足您的用例。

关于 S3 请求指标的 CloudWatch 警报

对于成本,您可以为 S3 请求启用 CloudWatch 指标,以启用以 1 分钟为周期写入数据的请求指标。例如,您可以针对以下 S3 CloudWatch 指标创建相关警报:

  • PutRequests sum <= 0每小时
  • 4xxErrors sum >= 1超过 1 分钟
  • 5xxErrors sum >= 1超过 1 分钟

HTTP 状态代码警报的间隔要短得多(低至 1 分钟),将在更接近这些故障发生时提供反馈。

放置事件的 CloudWatch 警报

如果您不想产生 S3 请求指标的成本,则可以改为配置事件以将消息发布到 S3 put 上的 SNS 主题。您可以使用 CloudWatch 设置针对已发布(或缺少)消息总数的警报。

然后,您可以根据未能发布消息的主题创建 CloudWatch 警报。

  • 维度: TopicName = YOURSNSTOPIC

  • 命名空间: AWS/SNS

  • 指标名称: NumberOfMessagesPublished

  • 阈值: NumberOfMessagesPublished <= 0 60 分钟(4 个周期)

  • 统计:总和

  • 时间: 15分钟

  • 将丢失的数据视为:违反

  • 操作:向另一个单独的 SNS 主题发送通知,该主题向您发送电子邮件/短信,或以其他方式发布到某些警报服务。

讨论

请注意,这两种 CloudWatch 解决方案都有一个警告,即它们不会在整点后 30 分钟触发警报,但它们会捕获您的整个监控周期。

您可以通过调整您的周期或cloudwatch 如何处理丢失的数据以获得更好的结果,从这些基本示例中进一步配置。

每小时 30 分钟触发(通过 cron 样式调度)以检查 S3 请求指标或 SNS 主题的“NumberOfMessagesPublished”指标而不是依赖 CloudWatch 警报的 lambda 也可以完成此操作。如果在整点后 30 分钟触发很重要,这可能是一个更好的选择,因为 CloudWatch 警报的触发时间不会那么精确。

延伸阅读

于 2017-04-28T15:28:00.343 回答