

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

# 使用 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 的同一账户中才能收集指标。