

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

# 使用 Prometheus 实例作为收集器
<a name="AMP-ingest-with-prometheus"></a>

您可以使用在*代理*模式下运行的 Prometheus 实例（称为 *Prometheus 代理*）来抓取指标并将其发送到您的 Amazon Managed Service for Prometheus 工作区。

以下主题描述了设置在代理模式下运行的 Prometheus 实例作为指标收集器的不同方法。

**警告**  
创建 Prometheus 代理时，您需要负责其配置和维护。通过[启用安全特征](https://prometheus.io/docs/prometheus/latest/configuration/https/)，避免将 Prometheus 抓取端点暴露给公共互联网。

如果您设置了多个 Prometheus 实例来监控同一组指标，并将其发送到单个 Amazon Managed Service for Prometheus 工作区以实现高可用性，则需要设置重复数据删除。如果您未按照步骤设置重复数据删除，则将向发送至 Amazon Managed Service for Prometheus 的所有数据样本（包括重复样本）收取费用。有关设置重复数据删除的说明，请参阅 [对发送到 Amazon Managed Service for Prometheus 的高可用性指标进行重复数据删除](AMP-ingest-dedupe.md)。

**Topics**
+ [使用 Helm 设置从新 Prometheus 服务器进行摄取](AMP-onboard-ingest-metrics-new-Prometheus.md)
+ [在 EC2 上的 Kubernetes 中设置从现有 Prometheus 服务器进行摄取](AMP-onboard-ingest-metrics-existing-Prometheus.md)
+ [在 Fargate 上的 Kubernetes 中设置从现有 Prometheus 服务器进行摄取](AMP-onboard-ingest-metrics-existing-Prometheus-fargate.md)

# 使用 Helm 设置从新 Prometheus 服务器进行摄取
<a name="AMP-onboard-ingest-metrics-new-Prometheus"></a>

本部分中的说明有助于您快速启动并运行 Amazon Managed Service for Prometheus。您在 Amazon EKS 集群中设置了一台新的 Prometheus 服务器，新服务器使用默认配置向 Amazon Managed Service for Prometheus 发送指标。本方法包含以下先决条件：
+ 您必须有一个 Amazon EKS 集群，新的 Prometheus 服务器将从该集群收集指标。
+ Amazon EKS 集群必须安装 [Amazon EBS CSI 驱动程序](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html)（Helm 要求）。
+ 您必须使用 Helm CLI 3.0 或更高版本。
+ 您必须使用 Linux 或 macOS 计算机来执行以下各部分中的步骤。

## 步骤 1：添加新的 Helm 图表存储库
<a name="AMP-onboard-new-Prometheus-HelmRepo"></a>

输入以下命令以添加新的 Helm 存储库。有关这些命令的更多信息，请参阅 [Helm 存储库](https://helm.sh/docs/helm/helm_repo/)。

```
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics
helm repo update
```

## 步骤 2：创建 Prometheus 命名空间
<a name="AMP-onboard-new-Prometheus-namespace"></a>

输入以下命令，为 Prometheus 服务器和其它监控组件创建 Prometheus 命名空间。*prometheus-namespace*替换为你想要的这个命名空间的名称。

```
kubectl create namespace prometheus-namespace
```

## 步骤 3：设置服务账户的 IAM 角色。
<a name="AMP-onboard-new-Prometheus-IRSA"></a>

要使用我们记录的这种入门方法，您需要为运行 Prometheus 服务器的 Amazon EKS 集群中的服务账户使用 IAM 角色。

通过服务账户的 IAM 角色，您可以将 IAM 角色与 Kubernetes 服务账户关联。然后，此服务账户可向使用它的任意 Pod 中的容器提供 AWS 权限。有关更多信息，请参阅[服务账户的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)。

如果您尚未设置这些角色，请按照 [设置服务角色从 Amazon EKS 集群中摄取指标](set-up-irsa.md#set-up-irsa-ingest) 中的说明设置角色。该部分中的说明要求使用 `eksctl`。有关更多信息，请参阅 [Amazon Elastic Kubernetes Service 入门 – `eksctl`](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)。

**注意**  
如果您不在 EKS 上，或者仅使用访问密钥 AWS 和私有密钥访问适用于 Prometheus 的亚马逊托管服务，则无法使用基于的 Sigv4。`EKS-IAM-ROLE`

## 步骤 4：设置新服务器并开始摄取指标
<a name="AMP-onboard-ingest-metrics-new-Prometheus-Helm"></a>

要安装将指标发送到您 Amazon Managed Service for Prometheus 工作区的新 Prometheus 服务器，请按照以下步骤操作。

**安装新的 Prometheus 服务器以将指标发送到 Amazon Managed Service for Prometheus 工作区**

1. 使用文本编辑器创建名为 `my_prometheus_values_yaml` 的文件，其中包含以下内容。
   + *IAM\$1PROXY\$1PROMETHEUS\$1ROLE\$1ARN*替换为您在中创建**amp-iamproxy-ingest-role**的 ARN。[设置服务角色从 Amazon EKS 集群中摄取指标](set-up-irsa.md#set-up-irsa-ingest)
   + *WORKSPACE\$1ID*替换为适用于 Prometheus 的亚马逊托管服务工作空间的 ID。
   + *REGION*替换为适用于 Prometheus 的亚马逊托管服务工作区的区域。

   ```
   ## The following is a set of default values for prometheus server helm chart which enable remoteWrite to AMP
   ## For the rest of prometheus helm chart values see: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml
   ##
   serviceAccounts:
     server:
       name: amp-iamproxy-ingest-service-account
       annotations: 
         eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
   server:
     remoteWrite:
       - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
         sigv4:
           region: ${REGION}
         queue_config:
           max_samples_per_send: 1000
           max_shards: 200
           capacity: 2500
   ```

1. 输入以下命令以创建 Prometheus 服务器。
   + 将 *prometheus-chart-name* 替换为您的 Prometheus 版本名称。
   + *prometheus-namespace*替换为您的 Prometheus 命名空间的名称。

   ```
   helm install prometheus-chart-name prometheus-community/prometheus -n prometheus-namespace \
   -f my_prometheus_values_yaml
   ```
**注意**  
您可以通过多种方式自定义 `helm install` 命令。有关更多信息，请参阅 Helm 文档**中的 [Helm 安装](https://helm.sh/docs/helm/helm_install/)。

# 在 EC2 上的 Kubernetes 中设置从现有 Prometheus 服务器进行摄取
<a name="AMP-onboard-ingest-metrics-existing-Prometheus"></a>

Amazon Managed Service for Prometheus 支持从在 Amazon EKS 上运行的集群中以及在 Amazon EC2 上运行的自行管理 Kubernetes 集群中摄取指标。本部分中的详细说明适用于 Amazon EKS 集群中的 Prometheus 服务器。对于 Amazon EC2 上的自行管理 Kubernetes 集群，步骤相同，唯一的不同是，您需要在 Kubernetes 集群中自己为服务账户设置 OIDC 提供商和 IAM 角色。

本部分中的说明使用 Helm 作为 Kubernetes 软件包管理器。

**Topics**
+ [步骤 1：设置服务账户的 IAM 角色。](#AMP-onboard-existing-Prometheus-IRSA)
+ [步骤 2：使用 Helm 升级现有的 Prometheus 服务器](#AMP-onboard-ingest-metrics-existing-remotewrite)

## 步骤 1：设置服务账户的 IAM 角色。
<a name="AMP-onboard-existing-Prometheus-IRSA"></a>

要使用我们记录的这种入门方法，您需要为运行 Prometheus 服务器的 Amazon EKS 集群中的服务账户使用 IAM 角色。此类角色又称*服务角色*。

借助服务角色，将 IAM 角色与 Kubernetes 服务账户关联。然后，该服务帐号可以为使用该服务帐号的任何 Pod 中的容器提供 AWS 权限。有关更多信息，请参阅[服务账户的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)。

如果您尚未设置这些角色，请按照 [设置服务角色从 Amazon EKS 集群中摄取指标](set-up-irsa.md#set-up-irsa-ingest) 中的说明设置角色。

## 步骤 2：使用 Helm 升级现有的 Prometheus 服务器
<a name="AMP-onboard-ingest-metrics-existing-remotewrite"></a>

本部分中的说明包括设置远程写入和 sigv4 以进行身份验证，并授权 Prometheus 服务器远程写入到您的 Amazon Managed Service for Prometheus 工作区。

### 使用 Prometheus 版本 2.26.0 或更高版本
<a name="AMP-onboard-ingest-metrics-Helm13"></a>

如果您使用的是带有 2.26.0 或更高版本 Prometheus 服务器映像的 Helm 图表，请按照以下步骤操作。

**使用 Helm 图表从 Prometheus 服务器设置远程写入**

1. 在您的 Helm 配置文件中创建一个新的远程写入部分：
   + `${IAM_PROXY_PROMETHEUS_ROLE_ARN}`替换为您在中创建**amp-iamproxy-ingest-role**的 ARN。[步骤 1：设置服务账户的 IAM 角色。](#AMP-onboard-existing-Prometheus-IRSA)角色 ARN 的格式应为 `arn:aws:iam::your account ID:role/amp-iamproxy-ingest-role`。
   + 将 `${WORKSPACE_ID}` 替换为您的 Amazon Managed Service for Prometheus 工作区 ID。
   + 将 `${REGION}` 替换为 Amazon Managed Service for Prometheus 工作区的区域（如 `us-west-2`）。

   ```
   ## The following is a set of default values for prometheus server helm chart which enable remoteWrite to AMP
       ## For the rest of prometheus helm chart values see: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus/values.yaml
       ##
       serviceAccounts:
         server:
           name: amp-iamproxy-ingest-service-account
           annotations: 
             eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
       server:
         remoteWrite:
           - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
             sigv4:
               region: ${REGION}
             queue_config:
               max_samples_per_send: 1000
               max_shards: 200
               capacity: 2500
   ```

1. 使用 Helm 更新您现有的 Prometheus 服务器配置：
   + 将 `prometheus-chart-name` 替换为您的 Prometheus 版本名称。
   + 将 `prometheus-namespace` 替换为安装了 Prometheus 服务器的 Kubernetes 命名空间。
   + 将 `my_prometheus_values_yaml` 替换为 Helm 配置文件的路径。
   + 将 `current_helm_chart_version` 替换为当前版本的 Prometheus 服务器 Helm 图表。您可以使用 [helm list](https://helm.sh/docs/helm/helm_list/) 命令找到当前的图表版本。

   ```
   helm upgrade prometheus-chart-name prometheus-community/prometheus \
          -n prometheus-namespace \
          -f my_prometheus_values_yaml \
          --version current_helm_chart_version
   ```

### 使用早期版本的 Prometheus
<a name="AMP-onboard-ingest-metrics-Helm8"></a>

如果您使用的是低于 2.26.0 的 Prometheus 版本，请按照以下步骤操作。这些步骤使用边车方法，因为早期版本的 Prometheus 本身不 AWS 支持签名版本 4 签名过程 (Sigv4)。AWS 

这些说明假设您使用 Helm 部署 Prometheus。

**从 Prometheus 服务器设置远程写入**

1. 在您的 Prometheus 服务器上，创建新的远程写入配置。首先，创建一个新的更新文件。我们将调用文件 `amp_ingest_override_values.yaml`。

   向 YAML 文件添加以下值。

   ```
   serviceAccounts:
           server:
               name: "amp-iamproxy-ingest-service-account"
               annotations:
                   eks.amazonaws.com/role-arn: "${SERVICE_ACCOUNT_IAM_INGEST_ROLE_ARN}"
       server:
           sidecarContainers:
               - name: aws-sigv4-proxy-sidecar
                 image: public.ecr.aws/aws-observability/aws-sigv4-proxy:1.0
                 args:
                 - --name
                 - aps
                 - --region
                 - ${REGION}
                 - --host
                 - aps-workspaces.${REGION}.amazonaws.com
                 - --port
                 - :8005
                 ports:
                 - name: aws-sigv4-proxy
                   containerPort: 8005
           statefulSet:
               enabled: "true"
           remoteWrite:
               - url: http://localhost:8005/workspaces/${WORKSPACE_ID}/api/v1/remote_write
   ```

   将 `${REGION}` 替换为 Amazon Managed Service for Prometheus 工作区的区域。

   `${SERVICE_ACCOUNT_IAM_INGEST_ROLE_ARN}`替换为您在中创建**amp-iamproxy-ingest-role**的 ARN。[步骤 1：设置服务账户的 IAM 角色。](#AMP-onboard-existing-Prometheus-IRSA)角色 ARN 的格式应为 `arn:aws:iam::your account ID:role/amp-iamproxy-ingest-role`。

   将 `${WORKSPACE_ID}` 替换为您的工作区 ID。

1. 升级您的 Prometheus Helm 图表。首先，输入以下命令，找到您的 Helm 图表名称。在此命令的输出中，查找名称包含 `prometheus` 的图表。

   ```
   helm ls --all-namespaces
   ```

   然后，输入以下命令。

   ```
   helm upgrade --install prometheus-helm-chart-name prometheus-community/prometheus -n prometheus-namespace -f ./amp_ingest_override_values.yaml
   ```

   *prometheus-helm-chart-name*替换为上一个命令中返回的 Prometheus 头盔图的名称。将 *prometheus-namespace* 替换为命名空间的名称。

#### 下载 Helm 图表
<a name="AMP-onboard-ingest-downloadHelm"></a>

如果您尚未在本地下载 Helm 图表，则可以使用以下命令下载。

```
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm pull prometheus-community/prometheus --untar
```

# 在 Fargate 上的 Kubernetes 中设置从现有 Prometheus 服务器进行摄取
<a name="AMP-onboard-ingest-metrics-existing-Prometheus-fargate"></a>

Amazon Managed Service for Prometheus 支持从在 Fargate 上运行的自行管理 Kubernetes 集群中的 Prometheus 服务器摄取指标。要从 Fargate 上运行的 Amazon EKS 集群中的 Prometheus 服务器摄取指标，请覆盖名为 amp\$1ingest\$1override\$1values.yaml 的配置文件中的默认配置，如下所示：

```
prometheus-node-exporter:
        enabled: false
    
    alertmanager:
        enabled: false
    
    serviceAccounts:
      server:
        name: amp-iamproxy-ingest-service-account
        annotations: 
          eks.amazonaws.com/role-arn: ${IAM_PROXY_PROMETHEUS_ROLE_ARN}
    
    server:
      persistentVolume:
        enabled: false
      remoteWrite:
        - url: https://aps-workspaces.${REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
          sigv4:
            region: ${REGION}
          queue_config:
            max_samples_per_send: 1000
            max_shards: 200
            capacity: 2500
```

通过以下命令使用覆盖安装 Prometheus：

```
helm install prometheus-for-amp prometheus-community/prometheus \
                   -n prometheus \
                   -f amp_ingest_override_values.yaml
```

请注意，在 Helm 图表配置中，我们禁用了 Node Exporter 和 Alertmanager，并运行了 Prometheus 服务器部署。

您可以使用以下示例测试查询来验证安装。

```
$ awscurl --region region --service aps "https://aps-workspaces.region_id.amazonaws.com/workspaces/workspace_id/api/v1/query?query=prometheus_api_remote_read_queries"
    {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"prometheus_api_remote_read_queries","instance":"localhost:9090","job":"prometheus"},"value":[1648461236.419,"0"]}]}}21
```