监控任务 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

监控任务

通过 Amazon CloudWatch Events 监控任务

当任务运行状态发生变化时,Amazon EMR on EKS 会发出事件。每个事件都提供事件发生日期及时间等信息,以及有关事件的更多详情,如受影响的虚拟集群 ID 和任务运行 ID。

您可以使用事件来跟踪在虚拟集群上运行的任务活动及其运行状况。当任务运行生成与您指定的模式匹配的事件时,您还可以使用 Amazon CloudWatch Events 来定义要采取的操作。事件对于在任务运行的生命周期中监控特定事件非常有用。例如,您可以监控任务运行的状态何时从 submitted 更改为 running。有关 CloudWatch Events 的更多信息,请参阅 Amazon CloudWatch Events 用户指南

下表列出了 Amazon EMR on EKS 事件,以及事件指示的状态或状态更改、事件的严重性和事件消息。每个事件都以 JSON 对象表示,后者会自动发送到事件流。JSON 对象包含有关事件的更多详情。当您设置规则以使用 CloudWatch Events 进行事件处理时,JSON 对象特别重要,因为规则需要在此 JSON 对象中查找匹配模式。有关更多信息,请参阅《Amazon CloudWatch Events 用户指南》中的事件和事件模式和 Amazon EMR on EKS 事件。

任务运行状态更改事件
状态 严重性 Message
SUBMITTED INFO 任务运行 JobRunIdJobRunName)已于 UTC Time 成功提交到虚拟集群 VirtualClusterId
RUNNING (正在运行) INFO 虚拟集群 VirtualClusterId 中的任务运行 JobRunIdJobRunName)已于 Time 开始运行。
COMPLETED INFO 虚拟集群 VirtualClusterId 中的任务运行 jobRunIdJobRunName)已于 Time 完成。此任务运行于 Time 开始运行,花费 Num 分钟时间完成。
CANCELLED WARN 虚拟集群 VirtualClusterId 中的任务运行 JobRunIdJobRunName)取消请求已于 Time 完成,任务运行现已取消。
FAILED ERROR (错误) 虚拟集群 VirtualClusterId 中的任务运行 JobRunIdJobRunName)于 Time 取消。

使用 CloudWatch Events 自动化 Amazon EMR on EKS

您可以使用 Amazon CloudWatch Events 自动化您的Amazon服务,以响应系统事件,例如应用程序可用性问题或资源更改。来自Amazon服务的事件几乎实时传输到 CloudWatch Events。您可以编写简单规则来指示您关注的事件,并指示要在事件匹配规则时执行的自动化操作。可自动触发的操作包括:

  • 调用 Amazon Lambda 函数

  • 调用 Amazon EC2 Run Command

  • 将事件中继到 Amazon Kinesis Data Streams

  • 激活 Amazon Step Functions 状态机

  • 通知 Amazon Simple Notification Service(SNS)主题或 Amazon Simple Queue Service(SQS)队列

一些将 CloudWatch Events 与 Amazon EMR on EKS 结合使用的示例如下:

  • 当任务运行成功时激活 Lambda 函数

  • 当任务运行失败时通知 Amazon SNS 主题

detail-type:”、“EMR Job Run State Change”的 CloudWatch Events 由 Amazon EMR on EKS 生成,针对 SUBMITTEDRUNNINGCANCELLEDFAILEDCOMPLETED 的状态更改。

示例:设置调用 Lambda 的规则

使用以下步骤设置 CloudWatch Events 规则,该规则在发生“EMR 任务运行状态更改”事件时调用 Lambda。

aws events put-rule \ --name cwe-test \ --event-pattern '{"detail-type": ["EMR Job Run State Change"]}'

添加您拥有的 Lambda 函数作为新目标,并授予 CloudWatch Events 调用 Lambda 函数的权限,如下所示。将 123456789012 替换为您的账户 ID。

aws events put-targets \ --rule cwe-test \ --targets Id=1,Arn=arn:aws:lambda:us-east-1:123456789012:function:MyFunction
aws lambda add-permission \ --function-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com
注意

您不能编写取决于通知事件的顺序或存在的程序,因为它们可能是乱序或缺失的。尽最大努力发出事件。