我使用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分钟才能完成。一个好的解决方案是创建另一个每小时30分钟触发的Lambda并检查存储桶中是否存在正确的密钥?如果没有,那么将一些日志写入我可以监控的云监视并使用它们来创建我的警报?
我可以通过其他方式实现此警报?
答案 0 :(得分:2)
S3提供有关每个存储桶的对象计数的免费指标,但不会经常发布您的用例。
对于费用,您可以enable CloudWatch metrics for S3 requests启用在1分钟内写入数据的请求指标。例如,您可以在以下S3 CloudWatch指标上创建相关警报:
PutRequests sum <= 0
4xxErrors sum >= 1
超过1分钟5xxErrors sum >= 1
超过1分钟HTTP状态代码以更短的间隔(低至1分钟)发出警报,将在发生这些故障时提供更接近的反馈。
如果您不想承担S3请求指标的费用,您可以改为将事件配置为在S3 put上向SNS主题发布消息。您可以使用CloudWatch设置发布消息(或缺少消息)的警报。
然后,您可以根据此主题创建CloudWatch警报,但无法发布消息。
尺寸:主题名称= YOURSNSTOPIC
命名空间: AWS / SNS
指标名称: NumberOfMessagesPublished
阈值: NumberOfMessagesPublished&lt; = 0 60分钟(4个时段)
统计信息:汇总
时段: 15分钟
将缺失的数据视为:违反
操作:向另一个单独的SNS主题发送通知,该主题向您发送电子邮件/短信,或以其他方式发布给某些警报服务。
请注意,两个CloudWatch解决方案都有一个警告,即他们不会在一小时后的30分钟准确发出警报,但它们将捕获整个监控期。
您可以通过调整期间或how cloudwatch treats missing data来从这些基本示例进一步配置,以获得更好的结果。
一个lambda,触发一小时后30分钟(via cron-style scheduling)来检查S3请求指标或SNS主题&#34; NumberOfMessagesPublished&#34;度量而不是依赖CloudWatch警报也可以实现此目的。如果CloudWatch闹钟的发射时间不准确,那么如果在一小时后正好发射30分钟,这可能是一个更好的选择。