

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 监控 EMR Serverless
<a name="metrics"></a>

本节介绍监控 Amazon EMR Serverless 应用程序和作业的方法。

**Topics**
+ [

# 监控 EMR Serverless 应用程序和作业
](app-job-metrics.md)
+ [

# 使用 Amazon Managed Service for Prometheus 监控 Spark 指标
](monitor-with-prometheus.md)
+ [

# EMR Serverless 用量指标
](monitoring-usage.md)

# 监控 EMR Serverless 应用程序和作业
<a name="app-job-metrics"></a>

借助 EMR Serverless 的 Amazon CloudWatch 指标，您可以接收 1 分钟的 CloudWatch 指标并访问 CloudWatch 控制面板，以访问 EMR 无服务器应用程序的 near-real-time操作和性能。

EMR Serverless 每分钟发送一次指标。 CloudWatch EMR Serverless 在应用程序级别以及作业、工作人员类型和级别发布这些指标。 capacity-allocation-type

要开始使用 EMR 无服务器存储库中提供的 EMR 无服务器 CloudWatch 仪表板模板并进行部[署](https://github.com/aws-samples/emr-serverless-samples/tree/main/cloudformation/emr-serverless-cloudwatch-dashboard/)。 GitHub 

**注意**  
[EMR Serverless 交互式工作负载](interactive-workloads.md)仅启用了应用程序级别监控，并具有新的工作线程类型维度 `Spark_Kernel`。要监控和调试交互式工作负载，请[在 EMR Studio Workspace 中](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-debug.html#emr-studio-debug-serverless)访问日志和 Apache Spark UI。

## 监控指标
<a name="app-job-metrics-versions"></a>

**重要**  
我们正在重组指标显示以添加 `ApplicationName` 和 `JobName` 作为维度。对于 7.10 及更高版本，旧指标将不再更新。对于 7.10 以下的 EMR 发行版，旧的指标仍然可用。

**当前维度**

下表描述了 `AWS/EMR Serverless` 命名空间中可用的 EMR Serverless 维度。


**EMR Serverless 指标的维度**  

| 维度 | 说明 | 
| --- | --- | 
| ApplicationId | 使用应用程序 ID 筛选 EMR Serverless 应用程序的所有指标。 | 
| ApplicationName | 使用名称筛选 EMR Serverless 应用程序的所有指标。如果未提供名称或包含非 ASCII 字符，则系统会将其发布为 **[未指定]**。 | 
| JobId | 筛选 EMR Serverless 作业运行 ID 的所有指标。 | 
| JobName | 使用名称筛选 EMR Serverless 作业运行的所有指标。如果未提供名称或包含非 ASCII 字符，则系统会将其发布为 **[未指定]**。 | 
| WorkerType | 筛选给定工作线程类型的所有指标。例如，您可以筛选 Spark 作业的 `SPARK_DRIVER` 和 `SPARK_EXECUTORS`。 | 
| CapacityAllocationType | 筛选给定容量分配类型的所有指标。例如，您可以筛选预初始化容量 `PreInitCapacity` 和其他容量 `OnDemandCapacity`。 | 

## 应用程序级别监控
<a name="app-level-metrics"></a>

您可以使用 Amazon 指标在 EMR 无服务器应用程序级别监控容量使用情况。 CloudWatch 您还可以设置单个显示器来监控 CloudWatch 仪表板中的应用程序容量使用情况。


**EMR Serverless 应用程序指标**  

| 指标 | 说明 | 单位 | 维度 | 
| --- | --- | --- | --- | 
| MaxCPUAllowed |  应用程序允许的最大 CPU 数。  | vCPU | ApplicationId, ApplicationName | 
| MaxMemoryAllowed |  应用程序允许的最大内存（GB）。  | 千兆字节（GB） | ApplicationId, ApplicationName | 
| MaxStorageAllowed |  应用程序允许的最大存储空间（GB）。  | 千兆字节（GB） | ApplicationId, ApplicationName | 
| CPUAllocated |  CPUs 分配的 v 的总数。  | vCPU | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| IdleWorkerCount |  空闲的工作线程总数。  | 计数 | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| MemoryAllocated |  分配的总内存（GB）。  | 千兆字节（GB） | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| PendingCreationWorkerCount |  待创建的工作线程总数。  | 计数 | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| RunningWorkerCount |  应用程序使用的工作线程总数。  | 计数 | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| StorageAllocated |  分配的总磁盘存储空间（GB）。  | 千兆字节（GB） | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 
| TotalWorkerCount |  可用的工作线程总数。  | 计数 | ApplicationId, ApplicationName, WorkerType, CapacityAllocationType | 

## 作业级别监控
<a name="job-level-metrics"></a>

Amazon EMR Serverless 每隔一分钟向 Amazon CloudWatch 发送以下作业级别指标。您可以按作业运行状态访问聚合作业运行的指标值。每个指标的单位是*计数*。


**EMR Serverless 作业级别指标**  

| 指标 | 说明 | 维度 | 
| --- | --- | --- | 
| SubmittedJobs | 处于“已提交”状态的作业数量。 | ApplicationId, ApplicationName | 
| PendingJobs | 处于“待定”状态的作业数量。 | ApplicationId, ApplicationName | 
| ScheduledJobs | 处于“已计划”状态的作业数量。 | ApplicationId, ApplicationName | 
| RunningJobs | 处于“运行中”状态的作业数量。 | ApplicationId, ApplicationName | 
| SuccessJobs | 处于“成功”状态的作业数量。 | ApplicationId, ApplicationName | 
| FailedJobs | 处于“失败”状态的作业数量。 | ApplicationId, ApplicationName | 
| CancellingJobs | 处于“取消中”状态的作业数量。 | ApplicationId, ApplicationName | 
| CancelledJobs | 处于“已取消”状态的作业数量。 | ApplicationId, ApplicationName | 

您可以使用特定于引擎的应用程序监控特定于引擎的指标，以了解正在运行和已完成的 EMR Serverless 作业。 UIs当您访问运行中作业的 UI 时，系统会显示具有实时更新的实时应用程序 UI。当您访问已完成作业的 UI 时，系统会显示持久性应用程序 UI。

**运行作业**

对于运行中的 EMR Serverless 作业，请访问提供特定于引擎的指标的实时界面。您可以使用 Apache Spark UI 或 Hive Tez UI 来监控和调试作业。要访问这些内容 UIs，请使用 EMR Studio 控制台或使用请求安全 URL 端点。 AWS Command Line Interface

**已完成作业**

对于已完成的 EMR Serverless 作业，请使用 Spark History Server 或 Persistent Hive Tez UI 访问 Spark 或 Hive 作业运行的作业详细信息、阶段、任务和指标。要访问这些内容 UIs，请使用 EMR Studio 控制台，或者使用请求安全 URL 端点。 AWS Command Line Interface

## 作业工作线程级别监控
<a name="job-worker-level-metrics"></a>

Amazon EMR Serverless 将`AWS/EMRServerless`命名空间和指标组中可用的以下作业工作人员级别的`Job Worker Metrics`指标发送给亚马逊。 CloudWatchEMR Serverless 在作业运行期间，在作业级别、工作人员类型和级别收集单个工作人员的数据点。 capacity-allocation-type您可以使用 `ApplicationId` 作为一个维度来监控属于同一应用程序的多个作业。

**注意**  
要查看 EMR Serverless 任务在 Amazon CloudWatch 控制台中查看指标时使用的 CPU 和内存总量，请使用统计数据作为总和，将周期设置为 1 分钟。


**EMR Serverless 作业工作线程级别指标**  

| 指标 | 说明 | 单位 | 维度 | 
| --- | --- | --- | --- | 
| WorkerCpuAllocated | 作业运行中分配给工作线程的 vCPU 核心总数。 | vCPU | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerCpuUsed | 作业运行中工作线程使用的 vCPU 核心总数。 | vCPU | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerMemoryAllocated | 作业运行中分配给工作线程的总内存（GB）。 | 千兆字节（GB） | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerMemoryUsed | 作业运行中工作线程使用的总内存（GB）。 | 千兆字节（GB） | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerEphemeralStorageAllocated | 作业运行中分配给工作线程的临时存储字节数。 | 千兆字节（GB） | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerEphemeralStorageUsed | 作业运行中工作线程使用的临时存储字节数。 | 千兆字节（GB） | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerStorageReadBytes | 作业运行中工作线程从存储中读取的字节数。 | 字节 | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 
| WorkerStorageWriteBytes | 作业运行中从工作线程写入存储的字节数。 | 字节 | JobId、JobName、ApplicationId、ApplicationName、WorkerType 和 CapacityAllocationType | 

下面的步骤介绍了如何访问各种类型的指标。

------
#### [ Console ]

**使用控制台访问应用程序 UI**

1. 按照[控制台入门](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/getting-started.html#gs-console)中的说明，导航到 EMR Studio 上的 EMR Serverless 应用程序。

1. 要访问特定于引擎的应用程序 UIs 和正在运行的作业的日志，请执行以下操作：

   1. 选择状态为 `RUNNING` 的作业。

   1. 在**应用程序详细信息**页面上选择作业，或导航到作业的**作业详细信息**页面。

   1. 在**显示 UI** 下拉菜单下，选择 **Spark UI** 或 **Hive Tez UI**，导航到适合您作业类型的应用程序 UI。

   1. 要访问 Spark 引擎日志，请导航到 Spark UI 中的**执行程序**选项卡，然后选择驱动程序的**日志**链接。要访问 Hive 引擎日志，请在 Hive Tez UI 中选择相应 DAG 的**日志**链接。

1. 要访问已完成作业的特定引擎应用程序 UIs 和日志，请执行以下操作：

   1. 选择状态为 `SUCCESS` 的作业。

   1. 在应用程序的**应用程序详细信息**页面上选择作业，或导航到作业的**作业详细信息**页面。

   1. 在**显示 UI** 下拉菜单下，选择 **Spark History Server** 或 **Persistent Hive Tez UI**，导航到适合您作业类型的应用程序 UI。

   1. 要访问 Spark 引擎日志，请导航到 Spark UI 中的**执行程序**选项卡，然后选择驱动程序的**日志**链接。要访问 Hive 引擎日志，请在 Hive Tez UI 中选择相应 DAG 的**日志**链接。

------
#### [ AWS CLI ]

**要使用访问您的应用程序用户界面 AWS CLI**
+ 要生成一个 URL 用于访问运行中和已完成作业的应用程序 UI，请调用 `GetDashboardForJobRun` API。

  ```
  aws emr-serverless get-dashboard-for-job-run /
  --application-id <application-id> /
  --job-run-id <job-id>
  ```

  生成的 URL 在 1 小时内有效。

------

# 使用 Amazon Managed Service for Prometheus 监控 Spark 指标
<a name="monitor-with-prometheus"></a>

在 Amazon EMR 7.1.0 及更高版本中，您可以将 EMR Serverless 与 Amazon Managed Service for Prometheus 集成，来收集 EMR Serverless 作业和应用程序的 Apache Spark 指标。当您使用 AWS 控制台、EMR Serverless API 或提交任务或创建应用程序时，即可使用此集成。 AWS CLI

## 先决条件
<a name="monitoring-with-prometheus-prereqs"></a>

在将 Spark 指标传输到 Amazon Managed Service for Prometheus 之前，应满足以下先决条件。
+ [创建 Amazon Managed Service for Prometheus Workspace](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-create-workspace.html)。此工作空间用作摄取端点。记下**端点 - 远程写入 URL**中显示的 URL。创建 EMR Serverless 应用程序时，您需要指定 URL。
+ 要授予作业对 Amazon Managed Service for Prometheus 的访问权限以进行监控，请将以下策略添加到作业执行角色。

  ```
  {
      "Sid": "AccessToPrometheus",
      "Effect": "Allow",
      "Action": ["aps:RemoteWrite"],
      "Resource": "arn:aws:aps:<AWS_REGION>:<AWS_ACCOUNT_ID>:workspace/<WORKSPACE_ID>"
  }
  ```

## 设置
<a name="monitoring-with-prometheus-setup"></a>

**使用 AWS 控制台创建与亚马逊 Prometheus 托管服务集成的应用程序**

1. 要创建应用程序，请参阅[开始使用 Amazon EMR Serverless](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/getting-started.html                             )。

1. 在创建应用程序时，选择**使用自定义设置**，然后在要配置的字段中指定信息来配置应用程序。

1. 在**应用程序日志和指标**下，选择**将引擎指标传输到 Amazon Managed Service for Prometheus**，然后指定远程写入 URL。

1. 指定所需的任何其他配置设置，然后选择**创建并启动应用程序**。

**使用 AWS CLI 或 EMR 无服务器 API**

在运行或命令时，您还可以使用 AWS CLI 或 EMR Serverless API 将您的 EMR 无服务器应用程序与适用于 Prometheus 的亚马逊托管服务集成。`create-application` `start-job-run`

------
#### [ create-application ]

```
aws emr-serverless create-application \
--release-label emr-7.1.0 \
--type "SPARK" \
--monitoring-configuration '{ 
    "prometheusMonitoringConfiguration": {
        "remoteWriteUrl": "https://aps-workspaces.<AWS_REGION>.amazonaws.com/workspaces/<WORKSPACE_ID>/api/v1/remote_write"
    }
}'
```

------
#### [ start-job-run ]

```
aws emr-serverless start-job-run \
--application-id <APPPLICATION_ID> \
--execution-role-arn <JOB_EXECUTION_ROLE> \
--job-driver '{
    "sparkSubmit": {
        "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi.py",
        "entryPointArguments": ["10000"],
        "sparkSubmitParameters": "--conf spark.dynamicAllocation.maxExecutors=10"
    }
}' \
--configuration-overrides '{
     "monitoringConfiguration": {
        "prometheusMonitoringConfiguration": {
            "remoteWriteUrl": "https://aps-workspaces.<AWS_REGION>.amazonaws.com/workspaces/<WORKSPACE_ID>/api/v1/remote_write"
        }
    }
}'
```

------

在命令中包含 `prometheusMonitoringConfiguration` 表示 EMR Serverless 必须使用代理运行 Spark 作业，该代理负责收集 Spark 指标并将其写入 Amazon Managed Service for Prometheus 的 `remoteWriteUrl` 端点。然后，您可以使用 Amazon Managed Service for Prometheus 中的 Spark 指标进行可视化、警报和分析。

## 高级配置属性
<a name="monitoring-with-prometheus-config-options"></a>

EMR Serverless 使用 Spark 中名为 `PrometheusServlet` 的组件来收集 Spark 指标，并将性能数据转换为与 Amazon Managed Service for Prometheus 兼容的数据。默认情况下，EMR Serverless 会在 Spark 中设置默认值，并在使用 `PrometheusMonitoringConfiguration` 提交作业时解析驱动程序和执行程序指标。

下表介绍了在提交 Spark 作业以将指标发送到 Amazon Managed Service for Prometheus 时配置的所有属性。


| Spark 属性 | 默认 值 | 说明 | 
| --- | --- | --- | 
| spark.metrics.conf.\$1.sink.prometheusServlet.class | org.apache.spark.metrics.sink。 PrometheusServlet | Spark 用来将指标发送到 Amazon Managed Service for Prometheus 的类。要覆盖默认行为，请指定您自己的自定义类。 | 
| spark.metrics.conf.\$1.source.jvm.class | org.apache.spark.metrics.source。 JvmSource | Spark 用来从底层 Java 虚拟机收集和发送关键指标的类。要停止收集 JVM 指标，可将该属性设置为空字符串（如 `""`），将其禁用。要覆盖默认行为，请指定您自己的自定义类。 | 
| spark.metrics.conf.driver.sink.prometheusServlet.path | /metrics/prometheus | Amazon Managed Service for Prometheus 用来从驱动程序收集指标的独特 URL。要覆盖默认行为，请指定您自己的路径。要停止收集驱动程序指标，可将该属性设置为空字符串（如 `""`），将其禁用。 | 
| spark.metrics.conf.executor.sink.prometheusServlet.path | /metrics/executor/prometheus | Amazon Managed Service for Prometheus 用来从执行程序收集指标的独特 URL。要覆盖默认行为，请指定您自己的路径。要停止收集执行程序指标，可将该属性设置为空字符串（如 `""`），将其禁用。 | 

有关 Spark 指标的更多信息，请参阅 [Apache Spark 指标](https://spark.apache.org/docs/3.5.0/monitoring.html#metrics)。

## 注意事项和限制
<a name="monitoring-with-prometheus-limitations"></a>

当使用 Amazon Managed Service for Prometheus 从 EMR Serverless 收集指标时，请考虑以下注意事项和限制。
+ 只有[当 Amazon Managed Service for Prometheus 在AWS 区域 中普遍可用](https://docs.aws.amazon.com/general/latest/gr/prometheus-service.html)的情况下，才支持将 Amazon Managed Service for Prometheus 与 EMR Serverless 结合使用。
+ 运行代理以在 Amazon Managed Service for Prometheus 上收集 Spark 指标时需要工作线程提供更多资源。如果选择较小的工作线程规模（例如 1 个 vCPU 工作线程），作业运行时间可能会增加。
+ 仅 Amazon EMR 7.1.0 及更高版本支持将 Amazon Managed Service for Prometheus 与 EMR Serverless 结合使用。
+ Amazon Managed Service for Prometheus 必须部署在运行 EMR Serverless 的同一账户中才能收集指标。

# EMR Serverless 用量指标
<a name="monitoring-usage"></a>

您可以使用 Amazon CloudWatch 使用量指标来了解您的账户使用的资源。使用这些指标在 CloudWatch 图表和仪表板上可视化您的服务使用情况。

EMR Serverless 用量指标与服务配额对应。您可以配置警报，以在用量接近服务配额时向您发出警报。有关更多信息，请参阅[服务配额*用户指南中的服务配额*和亚马逊 CloudWatch警报](https://docs.aws.amazon.com/servicequotas/latest/userguide/configure-cloudwatch.html)。

有关 EMR Serverless 服务配额的更多信息，请参阅[EMR Serverless 端点和配额](endpoints-quotas.md)。

## EMR Serverless 的服务配额用量指标
<a name="usage-metrics"></a>

EMR Serverless 在 `AWS/Usage` 命名空间中发布以下服务配额用量指标。


****  

| 指标 | 说明 | 
| --- | --- | 
| `ResourceCount`  | 账户中正在运行的指定资源的总数。资源由与指标关联的[维度](#usage-metrics-dimensions)定义。 | 

## EMR Serverless 服务配额用量指标的维度
<a name="usage-metrics-dimensions"></a>

您可以使用以下维度来细化 EMR Serverless 发布的用量指标。


****  

| 维度 | 值 | 说明 | 
| --- | --- | --- | 
|  `Service`  |  EMR Serverless  |  AWS 服务 包含资源的名称。 | 
|  `Type`  |  资源  | EMR Serverless 报告的实体类型。 | 
|  `Resource`  |  vCPU  | EMR Serverless 跟踪的资源类型。 | 
|  `Class`  |  无  | EMR Serverless 跟踪的资源类。 | 