

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

# 将指标摄取到 Amazon Managed Service for Prometheus 工作区
<a name="AMP-ingest-methods"></a>

必须先将指标摄取到 Amazon Managed Service for Prometheus 工作区，然后才能对这些指标进行查询或发出警报。本部分介绍如何设置将指标摄取到工作区。

**注意**  
摄取到工作区的指标默认存储 150 天，然后自动删除。您可以通过将工作区配置为最长 1095 天（三年）来调整保留期。有关更多信息，请参阅[配置您的工作区](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-workspace-configuration.html)。

有两种方法可以将指标摄取到 Amazon Managed Service for Prometheus 工作区。
+ **使用 AWS 托管收集器** — 适用于 Prometheus 的亚马逊托管服务提供了一个完全托管、无代理的抓取工具，可以自动*从*您的亚马逊 Elastic Kubernetes Service (Amazon EKS) 集群中抓取指标。抓取会自动从与 Prometheus 兼容的端点中提取指标。
+ **使用客户托管收集器** - 您可以通过多种方式管理自己的收集器。最常用的两个收集器是安装你自己的 Prometheus 实例，在代理模式下运行，或者使用 Distro AWS OpenTelemetry 以下部分详细介绍了这些内容。

  收集器使用 Prometheus 远程写入功能，将指标发送到 Amazon Managed Service for Prometheus。您可以使用 Prometheus 远程写入功能在您自己的应用程序中，将指标直接发送到 Amazon Managed Service for Prometheus。有关直接使用远程写入的更多详细信息，请参阅 Prometheus 文档中的 [remote\$1write](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write)。

**Topics**
+ [使用 AWS 托管收集器摄取指标](AMP-collector.md)
+ [客户托管收集器](self-managed-collectors.md)

# 使用 AWS 托管收集器摄取指标
<a name="AMP-collector"></a>

Amazon Managed Service for Prometheus 的常见使用案例是监控由 Amazon Elastic Kubernetes Service（Amazon EKS）管理的 Kubernetes 集群。Kubernetes 集群以及在 Amazon EKS 中运行的许多应用程序会自动导出其指标以供兼容 Prometheus 的抓取程序访问。

**注意**  
Amazon EKS 在集群中公开 API 服务器指标、`kube-controller-manager` 指标和 `kube-scheduler` 指标。在 Kubernetes 环境中运行的许多其他技术和应用程序都提供与 Prometheus 兼容的指标。有关明确记录的导出器的列表，请参阅 Prometheus 文档中的 [Exporters and integrations](https://prometheus.io/docs/instrumenting/exporters/)。

Amazon Managed Service for Prometheus 提供完全托管式无代理抓取器或*收集器*，可自动发现和提取与 Prometheus 兼容的指标。您无需管理、安装、修补或维护代理/抓取程序。Amazon Managed Service for Prometheus 收集器为您的 Amazon EKS 集群提供可靠、稳定、高度可用、可自动扩展的指标集合。Amazon Managed Service for Prometheus 托管收集器可与 Amazon EKS 集群（包括 EC2 和 Fargate）配合使用。

Amazon Managed Service for Prometheus 收集器为在创建抓取程序时指定的每个子网创建一个弹性网络接口（ENI）。收集器通过这些指标抓取指标 ENIs，然后使用 VPC 终端节点将数据推送`remote_write`到适用于 Prometheus 的亚马逊托管服务工作空间。抓取的数据永远不会在公共互联网上传输。

以下主题提供了有关如何在您的 Amazon EKS 集群中使用 Amazon Managed Service for Prometheus 收集器以及所收集的指标的更多信息。

**Topics**
+ [为 Amazon EKS 设置托管式收集器](AMP-collector-how-to.md)
+ [为 Amazon MSK 设置托管式 Prometheus 收集器](prom-msk-integration.md)
+ [与 Prometheus 兼容的指标有哪些？](prom-compatible-metrics.md)
+ [使用已出售日志监控收集器](AMP-collector-vended-logs.md)

# 为 Amazon EKS 设置托管式收集器
<a name="AMP-collector-how-to"></a>

要使用 Amazon Managed Service for Prometheus 收集器，应创建一个抓取器来发现和提取 Amazon EKS 集群中的指标。还可以创建与 Amazon Managed Streaming for Apache Kafka 集成的抓取器。有关更多信息，请参阅[与 Amazon MSK 集成](https://docs.aws.amazon.com/prometheus/latest/userguide/prom-msk-integration.html)。
+ 您可以在创建 Amazon EKS 集群的过程中创建抓取程序。有关创建 Amazon EKS 集群（包括创建抓取程序）的更多信息，请参阅《Amazon EKS 用户指南》**中的[创建 Amazon EKS 集群](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)。
+ 您可以使用 AWS API 以编程方式创建自己的抓取工具，也可以使用. AWS CLI

Amazon Managed Service for Prometheus 收集器会抓取与 Prometheus 兼容的指标。有关与 Prometheus 兼容的指标的更多信息，请参阅[与 Prometheus 兼容的指标有哪些？](prom-compatible-metrics.md)。Amazon EKS 集群会公开 API 服务器的指标。Kubernetes 版本 `1.28` 或更高版本的 Amazon EKS 集群还公开 `kube-scheduler` 和 `kube-controller-manager` 的指标。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[获取 Prometheus 格式的控制面板原始指标](https://docs.aws.amazon.com/eks/latest/userguide/view-raw-metrics.html#scheduler-controller-metrics)。

**注意**  
从集群中抓取指标可能会产生网络使用费。优化这些成本的方法之一是配置您的 `/metrics` 端点，对提供的指标进行压缩（例如使用 gzip），从而减少必须在网络上传输的数据。如何做到这一点，取决于提供指标的应用程序或库。有些库默认使用 gzip 压缩。

以下主题介绍如何创建、管理和配置抓取程序。

**Topics**
+ [创建抓取程序](#AMP-collector-create)
+ [配置 Amazon EKS 集群](#AMP-collector-eks-setup)
+ [查找和删除抓取程序](#AMP-collector-list-delete)
+ [抓取程序配置](#AMP-collector-configuration)
+ [排查抓取程序配置问题](#AMP-collector-troubleshoot)
+ [抓取程序限制](#AMP-collector-limits)

## 创建抓取程序
<a name="AMP-collector-create"></a>

Amazon Managed Service for Prometheus 收集器由一个抓取程序组成，用于发现和收集 Amazon EKS 集群中的指标。Amazon Managed Service for Prometheus 为您管理抓取程序，为您提供所需的可扩展性、安全性和可靠性，无需您自行管理任何实例、代理或抓取程序。

可通过三种方式创建抓取器：
+ 当您[通过 Amazon EKS 控制台创建 Amazon EKS 集群](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)并选择开启 Prometheus 指标时，系统会自动为您创建抓取器。
+ 您可以从 Amazon EKS 控制台为现有集群创建抓取器。在 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)中打开集群，然后在**可观测性**选项卡上，选择**添加抓取器**。

  有关可用设置的更多详细信息，请参阅《Amazon EKS 用户指南》**中的[开启 Prometheus 指标](https://docs.aws.amazon.com/eks/latest/userguide/prometheus.html#turn-on-prometheus-metrics)。
+ 您可以使用 AWS API 或. 创建抓取工具 AWS CLI。

  以下过程中描述了这些选项。

创建您自己的抓取程序时有以下几个先决条件：
+ 您必须创建了 Amazon EKS 集群。
+ 必须将 Amazon EKS 集群的[集群端点访问控制](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html)设置为包括私有访问。它可以包括私有和公有访问，但必须包括私有访问。
+ Amazon EKS 集群所在的 Amazon VPC 必须[启用了 DNS](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html)。

**注意**  
集群将通过其 Amazon 资源名称（ARN）与抓取器相关联。如果删除一个集群，然后创建一个同名的新集群，新集群将重新使用 ARN。因此，抓取器将尝试收集新集群的指标。[删除抓取器](#AMP-collector-list-delete)与删除集群是分开的。

------
#### [ AWS API ]

**使用 AWS API 创建抓取程序**

使用 `CreateScraper` API 操作使用 AP AWS I 创建抓取工具。以下示例在 `us-west-2` 区域中创建抓取程序。您需要将工作空间 AWS 账户、安全和 Amazon EKS 集群信息替换为自己的信息 IDs，并提供用于抓取器的配置。

**注意**  
安全组和子网应设置为所连接集群的安全组和子网。  
您必须在至少两个可用区中至少包括两个子网。

`scrapeConfiguration` 是一个采用 base64 编码的 Prometheus 配置 YAML 文件。您可以通过 `GetDefaultScraperConfiguration` API 操作下载通用配置。有关 `scrapeConfiguration` 格式的更多信息，请参阅[抓取程序配置](#AMP-collector-configuration)。

```
POST /scrapers HTTP/1.1
Content-Length: 415 
Authorization: AUTHPARAMS
X-Amz-Date: 20201201T193725Z
User-Agent: aws-cli/1.18.147 Python/2.7.18 Linux/5.4.58-37.125.amzn2int.x86_64 botocore/1.18.6

{
    "alias": "myScraper",
    "destination":  {
        "ampConfiguration": {
            "workspaceArn": "arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id"
        }
    },
    "source": {
        "eksConfiguration": {
            "clusterArn": "arn:aws:eks:us-west-2:account-id:cluster/cluster-name",
            "securityGroupIds": ["sg-security-group-id"],
            "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"]
        }
    },
    "scrapeConfiguration": {
        "configurationBlob": <base64-encoded-blob>
    }
}
```

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

**使用 AWS CLI创建抓取程序**

通过 AWS CLI使用 `create-scraper` 命令创建抓取器。以下示例在 `us-west-2` 区域中创建抓取程序。您需要将工作空间 AWS 账户、安全和 Amazon EKS 集群信息替换为自己的信息 IDs，并提供用于抓取器的配置。

**注意**  
安全组和子网应设置为所连接集群的安全组和子网。  
您必须在至少两个可用区中至少包括两个子网。

`scrape-configuration` 是一个采用 base64 编码的 Prometheus 配置 YAML 文件。您可以使用 `get-default-scraper-configuration` 命令下载通用配置。有关 `scrape-configuration` 格式的更多信息，请参阅[抓取程序配置](#AMP-collector-configuration)。

```
aws amp create-scraper \
  --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:account-id:cluster/cluster-name', securityGroupIds=['sg-security-group-id'],subnetIds=['subnet-subnet-id-1', 'subnet-subnet-id-2']}" \
  --scrape-configuration configurationBlob=<base64-encoded-blob> \
  --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id'}"
```

------

以下是您可以与 AWS API 一起使用的抓取程序操作的完整列表：
+ 使用 [CreateScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_CreateScraper.html) API 操作创建抓取程序。
+ 使用 [ListScrapers](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListScrapers.html) API 操作列出您现有的抓取程序。
+ 使用 [UpdateScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_UpdateScraper.html)API 操作更新抓取器的别名、配置或目的地。
+ 使用 [DeleteScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) API 操作删除抓取程序。
+ 通过 [DescribeScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DescribeScraper.html) API 操作获取有关抓取程序的更多详细信息。
+ 通过 [GetDefaultScraperConfiguration](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_GetDefaultScraperConfiguration.html) API 操作获取抓取程序的通用配置。

**注意**  
必须将您要抓取的 Amazon EKS 集群配置为允许 Amazon Managed Service for Prometheus 访问这些指标。下一个主题介绍如何配置集群。

### 跨账户设置
<a name="cross-account-remote-write"></a>

要在 Amazon EKS 集群和 Amazon Managed Service for Prometheus 工作区位于不同的账户中时创建跨账户抓取器，请使用以下过程。例如，您有一个包含 Amazon EKS 集群的源账户 `account_id_source` 和一个包含 Amazon Managed Service for Prometheus 工作区的目标账户 `account_id_target`。

**在跨账户设置中创建抓取器**

1. 在源账户中，创建角色 `arn:aws:iam::account_id_source:role/Source` 并添加以下信任策略。

   ```
   {
       "Effect": "Allow",
       "Principal": {
       "Service": [
           "scraper.aps.amazonaws.com"
        ]
       },
       "Action": "sts:AssumeRole",
       "Condition": {
           "ArnEquals": {
               "aws:SourceArn": "scraper_ARN"
           },
           "StringEquals": {
               "AWS:SourceAccount": "account_id"
           }
       }
   }
   ```

1. 在源（Amazon EKS 集群）和目标（适用于 Prometheus 的亚马逊托管服务工作空间）的每种组合上，您需要创建一个`arn:aws:iam::account_id_target:role/Target`角色并添加以下具有权限的信任策略。[AmazonPrometheusRemoteWriteAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html)

   ```
   {
     "Effect": "Allow",
     "Principal": {
        "AWS": "arn:aws:iam::account_id_source:role/Source"
     },
     "Action": "sts:AssumeRole",
     "Condition": {
        "StringEquals": {
           "sts:ExternalId": "scraper_ARN"
         }
     }
   }
   ```

1. 使用 `--role-configuration` 选项创建抓取器。

   ```
   aws amp create-scraper \
     --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:account-id_source:cluster/xarw,subnetIds=[subnet-subnet-id]}" \
     --scrape-configuration configurationBlob=<base64-encoded-blob> \
     --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id_target:workspace/ws-workspace-id'}"\
     --role-configuration '{"sourceRoleArn":"arn:aws:iam::account-id_source:role/Source", "targetRoleArn":"arn:aws:iam::account-id_target:role/Target"}'
   ```

1. 验证抓取器创建。

   ```
   aws amp list-scrapers
   {
       "scrapers": [
           {
               "scraperId": "scraper-id",
               "arn": "arn:aws:aps:us-west-2:account_id_source:scraper/scraper-id",
               "roleArn": "arn:aws:iam::account_id_source:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraperInternal_cc319052-41a3-4",
               "status": {
                   "statusCode": "ACTIVE"
               },
               "createdAt": "2024-10-29T16:37:58.789000+00:00",
               "lastModifiedAt": "2024-10-29T16:55:17.085000+00:00",
               "tags": {},
               "source": {
                   "eksConfiguration": {
                       "clusterArn": "arn:aws:eks:us-west-2:account_id_source:cluster/xarw",
                       "securityGroupIds": [
                           "sg-security-group-id",
                           "sg-security-group-id"
                       ],
                       "subnetIds": [
                           "subnet-subnet_id"
                       ]
                   }
               },
               "destination": {
                   "ampConfiguration": {
                       "workspaceArn": "arn:aws:aps:us-west-2:account_id_target:workspace/ws-workspace-id"
                   }
               }
           }
       ]
   }
   ```

### 在 RoleConfiguration 和服务相关角色之间切换
<a name="changing-roles"></a>

当您想要切换回服务相关角色而不是 `RoleConfiguration` 以写入 Amazon Managed Service for Prometheus 工作区时，必须更新 `UpdateScraper` 并提供一个与抓取器位于相同账户中的工作区（不需要 `RoleConfiguration`）。系统将从抓取器中移除 `RoleConfiguration`，并将使用服务相关角色。

当您要更改与抓取器位于相同账户中的工作区并且想要继续使用 `RoleConfiguration` 时，必须再次在 `UpdateScraper` 上提供 `RoleConfiguration`。

### 为启用了客户自主管理型密钥的工作区创建抓取器
<a name="setup-customer-managed-keys"></a>

要创建抓取器以便将指标摄取到具有[客户自主管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)的 Amazon Managed Service for Prometheus 工作区，请使用 `--role-configuration` 并将源和目标都设置为同一个账户。

```
aws amp create-scraper \
  --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:account-id:cluster/xarw,subnetIds=[subnet-subnet_id]}" \
  --scrape-configuration configurationBlob=<base64-encoded-blob> \
  --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id'}"\
  --role-configuration '{"sourceRoleArn":"arn:aws:iam::account_id:role/Source", "targetRoleArn":"arn:aws:iam::account_id:role/Target"}'
```

### 创建抓取器时的常见错误
<a name="AMP-collector-create-errors"></a>

以下是尝试创建新抓取器时最常见的问题。
+ 所需 AWS 资源不存在。指定的*安全组*、*子网*和 *Amazon EKS 集群*必须存在。
+ IP 地址空间不足。在传入 `CreateScraper` API 的每个子网中必须至少有一个可用的 IP 地址。

## 配置 Amazon EKS 集群
<a name="AMP-collector-eks-setup"></a>

必须将 Amazon EKS 集群配置为允许抓取程序访问指标。此配置有两个选项：
+ 使用 Amazon EKS *访问条目*自动提供 Amazon Managed Service for Prometheus 收集器对集群的访问权限。
+ 手动配置 Amazon EKS 集群，以便进行托管指标抓取。

以下主题将对每个主题进行详细介绍。

### 将 Amazon EKS 配置为使用访问条目进行抓取器访问
<a name="AMP-collector-eks-access-entry-setup"></a>

使用 Amazon EKS 的访问条目是让 Amazon Managed Service for Prometheus 从集群中抓取指标的最简单方法。

必须将您要抓取的 Amazon EKS 集群配置为支持 API 身份验证。集群身份验证模式必须设置为 `API` 或 `API_AND_CONFIG_MAP`。这可在 Amazon EKS 控制台的集群详细信息的**访问配置**选项卡上查看。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[支持 IAM 角色或用户访问 Amazon EKS 集群上的 Kubernetes 对象](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)。

您可以在创建集群时或在创建集群之后创建抓取器：
+ **创建集群时** – 您可以在[通过 Amazon EKS 控制台创建 Amazon EKS 集群](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)时配置此访问权限（按照说明创建作为集群一部分的抓取器），然后将自动创建访问条目策略，使 Amazon Managed Service for Prometheus 能够访问集群指标。
+ **创建集群后添加**：如果 Amazon EKS 集群已经存在，则将身份验证模式设置为 `API` 或 `API_AND_CONFIG_MAP`，您[通过 Amazon Managed Service for Prometheus API 或 CLI](#AMP-collector-create) 或通过 Amazon EKS 控制台创建的任何抓取器会自动为您创建正确的访问条目策略，而抓取器将有权访问您的集群。

**已创建访问条目策略**

当您创建抓取器并让 Amazon Managed Service for Prometheus 为您生成访问条目策略时，它会生成以下策略。有关访问条目的更多信息，请参阅《Amazon EKS 用户指南》**中的[支持 IAM 角色或用户访问 Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)。

```
{
    "rules": [
        {
            "effect": "allow",
            "apiGroups": [
                ""
            ],
            "resources": [
                "nodes",
                "nodes/proxy",
                "nodes/metrics",
                "services",
                "endpoints",
                "pods",
                "ingresses",
                "configmaps"
            ],
            "verbs": [
                "get",
                "list",
                "watch"
            ]
        },
        {
            "effect": "allow",
            "apiGroups": [
                "extensions",
                "networking.k8s.io"
            ],
            "resources": [
                "ingresses/status",
                "ingresses"
            ],
            "verbs": [
                "get",
                "list",
                "watch"
            ]
        },
        {
            "effect": "allow",
            "apiGroups": [
                "metrics.eks.amazonaws.com"
            ],
            "resources": [
                "kcm/metrics",
                "ksh/metrics"
            ],
            "verbs": [
                "get"
            ]
        },
        {
            "effect": "allow",
            "nonResourceURLs": [
                "/metrics"
            ],
            "verbs": [
                "get"
            ]
        }
    ]
}
```

### 手动配置 Amazon EKS 以进行抓取器访问
<a name="AMP-collector-eks-manual-setup"></a>

如果您更喜欢使用 `aws-auth ConfigMap` 来控制对 kubernetes 集群的访问，您仍然可以让 Amazon Managed Service for Prometheus 抓取器访问您的指标。以下步骤将支持 Amazon Managed Service for Prometheus 从您的 Amazon EKS 集群抓取指标。

**注意**  
有关 `ConfigMap` 和访问条目的更多信息，请参阅《Amazon EKS 用户指南》**中的[支持 IAM 角色或用户访问 Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)。

此过程使用`kubectl`和 AWS CLI。有关安装 `kubectl` 的信息，请参阅《Amazon EKS 用户指南》**中的[安装 kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。

**手动配置 Amazon EKS 集群以进行托管指标抓取**

1. 使用以下文本创建名为 `clusterrole-binding.yml` 的文件：

   ```
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRole
   metadata:
     name: aps-collector-role
   rules:
     - apiGroups: [""]
       resources: ["nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods", "ingresses", "configmaps"]
       verbs: ["describe", "get", "list", "watch"]
     - apiGroups: ["extensions", "networking.k8s.io"]
       resources: ["ingresses/status", "ingresses"]
       verbs: ["describe", "get", "list", "watch"]
     - nonResourceURLs: ["/metrics"]
       verbs: ["get"]
     - apiGroups: ["metrics.eks.amazonaws.com"]
       resources: ["kcm/metrics", "ksh/metrics"]
       verbs: ["get"]
   ---
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRoleBinding
   metadata:
     name: aps-collector-user-role-binding
   subjects:
   - kind: User
     name: aps-collector-user
     apiGroup: rbac.authorization.k8s.io
   roleRef:
     kind: ClusterRole
     name: aps-collector-role
     apiGroup: rbac.authorization.k8s.io
   ```

1. 在集群中运行以下命令。

   ```
   kubectl apply -f clusterrole-binding.yml
   ```

   这将创建集群角色绑定和规则。此示例使用 `aps-collector-role` 作为角色名称，使用 `aps-collector-user` 作为用户名。

1. 以下命令为您提供有关带有 ID 的抓取器的信息*scraper-id*。这是您使用上一节中的命令创建的抓取程序。

   ```
   aws amp describe-scraper --scraper-id scraper-id
   ```

1. 从 `describe-scraper` 的结果中找到 `roleArn`。其格式如下所示：

   ```
   arn:aws:iam::account-id:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraper_unique-id
   ```

   Amazon EKS 要求此 ARN 采用不同的格式。您必须调整返回的 ARN 的格式，以便在下一步中使用。对其进行编辑以匹配以下格式：

   ```
   arn:aws:iam::account-id:role/AWSServiceRoleForAmazonPrometheusScraper_unique-id
   ```

   例如，此 ARN：

   ```
   arn:aws:iam::111122223333:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-56ef-7
   ```

   必须重新编写为：

   ```
   arn:aws:iam::111122223333:role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-56ef-7
   ```

1. 使用上一步中修改过的 `roleArn` 以及您的集群名称和区域，在集群中运行以下命令：

   ```
   eksctl create iamidentitymapping --cluster cluster-name --region region-id --arn roleArn --username aps-collector-user
   ```

   这允许抓取程序使用您在 `clusterrole-binding.yml` 文件中创建的角色和用户访问集群。

## 查找和删除抓取程序
<a name="AMP-collector-list-delete"></a>

您可以使用 AWS API 或列 AWS CLI 出您账户中的抓取器或将其删除。

**注意**  
请确保您使用的是 AWS CLI 或 SDK 的最新版本。最新版本为您提供最新的特征和功能，以及安全更新。或者，使用 [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)，它可以自动提供始终使用 up-to-date命令行体验。

要列出您账户中的所有抓取程序，请使用 [ListScrapers](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListScrapers.html) API 操作。

或者，使用 AWS CLI，拨打：

```
aws amp list-scrapers --region aws-region
```

`ListScrapers` 返回您账户中的所有抓取程序，例如：

```
{
    "scrapers": [
        {
            "scraperId": "s-1234abcd-56ef-7890-abcd-1234ef567890",
            "arn": "arn:aws:aps:us-west-2:123456789012:scraper/s-1234abcd-56ef-7890-abcd-1234ef567890",
            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-2931",
            "status": {
                "statusCode": "DELETING"
            },
            "createdAt": "2023-10-12T15:22:19.014000-07:00",
            "lastModifiedAt": "2023-10-12T15:55:43.487000-07:00",
            "tags": {},
            "source": {
                "eksConfiguration": {
                    "clusterArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-cluster",
                    "securityGroupIds": [
                        "sg-1234abcd5678ef90"
                    ],
                    "subnetIds": [
                        "subnet-abcd1234ef567890", 
                        "subnet-1234abcd5678ab90"
                    ]
                }
            },
            "destination": {
                "ampConfiguration": {
                    "workspaceArn": "arn:aws:aps:us-west-2:123456789012:workspace/ws-1234abcd-5678-ef90-ab12-cdef3456a78"
                }
            }
        }
    ]
}
```

要删除抓取程序，请使用 `ListScrapers` 操作查找要删除的抓取程序的 `scraperId`，然后使用 [DeleteScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) 操作将其删除。

或者，使用 AWS CLI，拨打：

```
aws amp delete-scraper --scraper-id scraperId
```

## 抓取程序配置
<a name="AMP-collector-configuration"></a>

您可以使用兼容 Prometheus 的抓取程序配置来控制抓取程序如何发现和收集指标。例如，您可以更改将指标发送到工作区的时间间隔。您还可以使用重新标记来动态重写指标的标签。抓取程序配置是一个 YAML 文件，是抓取程序定义的一部分。

创建新的抓取程序时，您需通过在 API 调用中提供 base64 编码的 YAML 文件来指定配置。您可以在 Amazon Managed Service for Prometheus API 中通过 `GetDefaultScraperConfiguration` 操作下载通用配置文件。

要修改抓取器的配置，您可以使用 `UpdateScraper` 操作。如果您需要更新指标的源（例如，更新到不同的 Amazon EKS 集群），则必须删除抓取器，然后使用新的源重新创建它。

**支持的配置**

有关抓取器配置格式的信息，包括可能值的详细明细，请参阅 Prometheus 文档中的 [Configuration](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)。全局配置选项和 `<scrape_config>` 选项描述了最常用的选项。

由于 Amazon EKS 是唯一受支持的服务，因此唯一受支持的服务发现配置（`<*_sd_config>`）是 `<kubernetes_sd_config>`。

支持的配置部分的完整列表：
+ `<global>`
+ `<scrape_config>`
+ `<static_config>`
+ `<relabel_config>`
+ `<metric_relabel_configs>`
+ `<kubernetes_sd_config>`

这些部分的限制列在示例配置文件之后。

**示例配置文件**

以下是抓取间隔为 30 秒的 YAML 配置文件示例。此示例包括对 kube API 服务器指标的支持， kube-controller-manager以及对 kube-scheduler 指标的支持。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[获取 Prometheus 格式的控制面板原始指标](https://docs.aws.amazon.com/eks/latest/userguide/view-raw-metrics.html#scheduler-controller-metrics)。

```
global:
   scrape_interval: 30s
   external_labels:
     clusterArn: apiserver-test-2
scrape_configs:
  - job_name: pod_exporter
    kubernetes_sd_configs:
      - role: pod
  - job_name: cadvisor
    scheme: https
    authorization:
      type: Bearer
      credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    kubernetes_sd_configs:
      - role: node
    relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - replacement: kubernetes.default.svc:443
        target_label: __address__
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
  # apiserver metrics
  - scheme: https
    authorization:
      type: Bearer
      credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    job_name: kubernetes-apiservers
    kubernetes_sd_configs:
    - role: endpoints
    relabel_configs:
    - action: keep
      regex: default;kubernetes;https
      source_labels:
      - __meta_kubernetes_namespace
      - __meta_kubernetes_service_name
      - __meta_kubernetes_endpoint_port_name
  # kube proxy metrics
  - job_name: kube-proxy
    honor_labels: true
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - action: keep
      source_labels:
      - __meta_kubernetes_namespace
      - __meta_kubernetes_pod_name
      separator: '/'
      regex: 'kube-system/kube-proxy.+'
    - source_labels:
      - __address__
      action: replace
      target_label: __address__
      regex: (.+?)(\\:\\d+)?
      replacement: $1:10249
  # Scheduler metrics
  - job_name: 'ksh-metrics'
    kubernetes_sd_configs:
    - role: endpoints
    metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics
    scheme: https
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
    - source_labels:
      - __meta_kubernetes_namespace
      - __meta_kubernetes_service_name
      - __meta_kubernetes_endpoint_port_name
      action: keep
      regex: default;kubernetes;https
  # Controller Manager metrics
  - job_name: 'kcm-metrics'
    kubernetes_sd_configs:
    - role: endpoints
    metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics
    scheme: https
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
    - source_labels:
      - __meta_kubernetes_namespace
      - __meta_kubernetes_service_name
      - __meta_kubernetes_endpoint_port_name
      action: keep
      regex: default;kubernetes;https
```

以下是 AWS 托管收集器特有的限制：
+ **抓取间隔**：抓取程序配置无法将抓取间隔指定为小于 30 秒。
+ **目标**：必须将 `static_config` 中的目标指定为 IP 地址。
+ **DNS 解析** – 与目标名称相关，此配置中唯一可识别的服务器名称是 Kubernetes api 服务器 `kubernetes.default.svc`。所有其他计算机名称必须通过 IP 地址指定。
+ **授权** - 如果不需要授权，则省略。如果需要，则授权必须是 `Bearer`，并且必须指向文件 `/var/run/secrets/kubernetes.io/serviceaccount/token`。换句话说，如果使用，授权部分必须如下所示：

  ```
      authorization:
        type: Bearer
        credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  ```
**注意**  
`type: Bearer` 是默认值，因此可以省略。

## 排查抓取程序配置问题
<a name="AMP-collector-troubleshoot"></a>

Amazon Managed Service for Prometheus 收集器可自动发现和抓取指标。但是，当您在 Amazon Managed Service for Prometheus 工作区中看不到预期的指标时，如何排查问题呢？

**重要**  
验证已为 Amazon EKS 集群启用私有访问。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[集群私有端点](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html#cluster-endpoint-private)。

`up` 指标是一种有用的工具。对于 Amazon Managed Service for Prometheus 收集器发现的每个端点，它都会自动提供此指标。此指标有三种状态，可以帮助您对收集器内部发生的问题进行排查。
+ `up` 不存在 - 如果某个端点没有 `up` 指标，则表示收集器找不到该端点。

  在确定端点存在的前提下，有若干原因可能导致收集器无法找到端点。
  + 可能需要调整抓取配置。可能需要调整发现 `relabel_config`。
  + 用于发现的 `role` 可能存在问题。
  + Amazon EKS 集群使用的 Amazon VPC 可能未[启用 DNS](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html)，这会使收集器无法找到端点。
+ `up` 存在，但始终为 0 - 如果 `up` 存在，但为 0，则表示收集器能够发现端点，但找不到任何与 Prometheus 兼容的指标。

  在这种情况下，您可以尝试直接对端点使用 `curl` 命令。您可以验证详细信息是否正确，例如使用的协议（`http` 或 `https`）、端点或端口。您还可以检查端点是否以有效的 `200` 响应进行响应，并遵循 Prometheus 格式。最后，响应正文不能大于支持的最大大小。（有关 AWS 托管收集器的限制，请参阅以下部分。）
+ `up` 存在且大于 0 - 如果 `up` 存在且大于 0，则表示指标将发送到 Amazon Managed Service for Prometheus。

  检查您在 Amazon Managed Service for Prometheus（或您的备用控制面板，例如 Amazon Managed Grafana）中查找的指标是否正确。您可以再次使用 curl 来检查 `/metrics` 端点中的预期数据。还需检查您是否没有超过其他限制，例如每个抓取程序的端点数量。您可以使用 `count(up)`，通过检查 `up` 指标计数来检查正在抓取的指标端点的数量。

## 抓取程序限制
<a name="AMP-collector-limits"></a>

Amazon Managed Service for Prometheus 提供的完全托管的抓取程序几乎没有限制。
+ **区域**：您的 EKS 集群、托管抓取程序和 Amazon Managed Service for Prometheus 工作区必须全部位于同一个 AWS 区域。
+ **收集器**：每个区域每个账户最多可以有 10 个 Amazon Managed Service for Prometheus 抓取程序。
**注意**  
您可以通过[请求增加配额](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase)，请求提高此限额。
+ **指标响应**：来自任何一个 `/metrics` 端点请求的响应正文不能超过 50 兆字节（MB）。
+ **每个抓取程序的端点**：一个抓取程序最多可以抓取 3 万个 `/metrics` 端点。
+ **抓取间隔**：抓取程序配置无法将抓取间隔指定为小于 30 秒。

# 为 Amazon MSK 设置托管式 Prometheus 收集器
<a name="prom-msk-integration"></a>

要使用 Amazon Managed Service for Prometheus 收集器，您必须创建一个抓取器，用于发现和提取 Amazon Managed Streaming for Apache Kafka 集群中的指标。还可以创建与 Amazon Elastic Kubernetes Service 集成的抓取器。有关更多信息，请参阅[集成 Amazon EKS](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html)。

## 创建抓取程序
<a name="prom-msk-create-scraper"></a>

Amazon Managed Service for Prometheus 收集器由一个抓取器组成，该抓取器用于发现和收集 Amazon MSK 集群中的指标。Amazon Managed Service for Prometheus 为您管理抓取程序，为您提供所需的可扩展性、安全性和可靠性，无需您自行管理任何实例、代理或抓取程序。

您可以使用 AWS API 或按以下步骤 AWS CLI 所述创建抓取器。

创建您自己的抓取程序时有以下几个先决条件：
+ 您必须先创建 Amazon MSK 集群。
+ 将 Amazon MSK 集群的安全组配置为支持 Amazon VPC 内的端口 **11001（JMX 导出程序）**和 **11002（节点导出程序）**上的入站流量，因为抓取器需要访问这些 DNS 记录才能收集 Prometheus 指标。
+ Amazon MSK 集群所在的 Amazon VPC 必须[启用了 DNS](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html)。

**注意**  
集群将通过其 Amazon 资源名称（ARN）与抓取器相关联。如果删除一个集群，然后创建一个同名的新集群，新集群将重新使用 ARN。因此，抓取器将尝试收集新集群的指标。[删除抓取器](#prom-msk-delete-scraper)与删除集群是分开的。

------
#### [ To create a scraper using the AWS API ]

使用 `CreateScraper` API 操作使用 AP AWS I 创建抓取工具。以下示例在美国东部（弗吉尼亚州北部）区域中创建抓取器。将*example*内容替换为您的 Amazon MSK 集群信息，并提供您的抓取器配置。

**注意**  
配置安全组和子网以匹配您的目标集群。至少包含跨两个可用区的两个子网。

```
                POST /scrapers HTTP/1.1
Content-Length: 415 
Authorization: AUTHPARAMS
X-Amz-Date: 20201201T193725Z
User-Agent: aws-cli/1.18.147 Python/2.7.18 Linux/5.4.58-37.125.amzn2int.x86_64 botocore/1.18.6

{
    "alias": "myScraper",
    "destination":  {
        "ampConfiguration": {
            "workspaceArn": "arn:aws:aps:us-east-1:123456789012:workspace/ws-workspace-id"
        }
    },
    "source": {
        "vpcConfiguration": {
            "securityGroupIds": ["sg-security-group-id"],
            "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"]
        }
    },
    "scrapeConfiguration": {
        "configurationBlob": base64-encoded-blob
    }
}
```

在示例中，`scrapeConfiguration` 参数需要一个 base64 编码的 Prometheus 配置 YAML 文件，该文件指定 MSK 集群的 DNS 记录。

每个 DNS 记录都代表特定可用区域中的代理终端节点，允许客户端连接到分布在您选择 AZs 的代理以实现高可用性。

MSK 集群属性中的 DNS 记录数量与集群配置中代理节点和可用区的数量相对应：
+ **默认配置**-3 个 DNS 记录中的 3 个代理节点 AZs = 3 个 DNS 记录
+ **自定义配置** — 2 个 Broker 节点，跨越 AZs 2 个 DNS 记录

[要获取 MSK 集群的 DNS 记录，请在家中打开 MSK 控制台？https://console.aws.amazon.com/msk/ region=us](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/)-east-1\$1/home/。转到 MSK 集群。选择**属性**、**代理**和**端点**。

您可以通过两个选项将 Prometheus 配置为从 MSK 集群中抓取指标：

1. **集群级 DNS 解析（推荐）**：使用集群的基本 DNS 名称来自动发现所有代理。如果代理端点为 `b-1.clusterName.xxx.xxx.xxx`，请将 `clusterName.xxx.xxx.xxx` 用作 DNS 记录。这可让 Prometheus 自动抓取集群中的所有代理。

   **各个代理端点**：单独指定每个代理端点以进行精细控制。在配置中使用完整的代理标识符（b-1、b-2）。例如：

   ```
   dns_sd_configs:
     - names:
       - b-1.clusterName.xxx.xxx.xxx
       - b-2.clusterName.xxx.xxx.xxx  
       - b-3.clusterName.xxx.xxx.xxx
   ```

**注意**  
使用 AWS 控制`clusterName.xxx.xxx.xxx`台中的实际 MSK 集群终端节点替换。

有关更多信息，请参阅 *Prometheus* 文档中的 [<dns\$1sd\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#dns_sd_config)。

下面是抓取器配置文件的示例：

```
global:
  scrape_interval: 30s
  external_labels:
    clusterArn: msk-test-1

scrape_configs:
  - job_name: msk-jmx
    scheme: http
    metrics_path: /metrics
    scrape_timeout: 10s
    dns_sd_configs:
      - names:
          - dns-record-1
          - dns-record-2
          - dns-record-3
        type: A
        port: 11001
    relabel_configs:
      - source_labels: [__meta_dns_name]
        target_label: broker_dns
      - source_labels: [__address__]
        target_label: instance
        regex: '(.*)'
        replacement: '${1}'

  - job_name: msk-node
    scheme: http
    metrics_path: /metrics
    scrape_timeout: 10s
    dns_sd_configs:
      - names:
          - dns-record-1
          - dns-record-2
          - dns-record-3
        type: A
        port: 11002
    relabel_configs:
      - source_labels: [__meta_dns_name]
        target_label: broker_dns
      - source_labels: [__address__]
        target_label: instance
        regex: '(.*)'
        replacement: '${1}'
```

运行以下命令之一来将 YAML 文件转换为 base64。也可以使用任何在线 base64 转换器来转换文件。

**Example Linux/macOS**  

```
echo -n scraper config updated with dns records | base64 
```

**Example 窗户 PowerShell**  

```
[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(scraper config updated with dns records))
```

------
#### [ To create a scraper using the AWS CLI ]

通过 AWS Command Line Interface使用 `create-scraper` 命令创建抓取器。以下示例在美国东部（弗吉尼亚州北部）区域中创建抓取器。将*example*内容替换为您的 Amazon MSK 集群信息，并提供您的抓取器配置。

**注意**  
配置安全组和子网以匹配您的目标集群。至少包含跨两个可用区的两个子网。

```
aws amp create-scraper \
 --source vpcConfiguration="{securityGroupIds=['sg-security-group-id'],subnetIds=['subnet-subnet-id-1', 'subnet-subnet-id-2']}" \ 
--scrape-configuration configurationBlob=base64-encoded-blob \
 --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:123456789012:workspace/ws-workspace-id'}"
```

------
+ 以下是您可以与 AWS API 一起使用的抓取器操作的完整列表：

  使用 [CreateScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_CreateScraper.html) API 操作创建抓取程序。
+ 使用 [ListScrapers](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListScrapers.html) API 操作列出您现有的抓取程序。
+ 使用 [UpdateScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_UpdateScraper.html)API 操作更新抓取器的别名、配置或目的地。
+ 使用 [DeleteScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) API 操作删除抓取程序。
+ 通过 [DescribeScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DescribeScraper.html) API 操作获取有关抓取程序的更多详细信息。

## 跨账户设置
<a name="prom-msk-cross-account"></a>

要在跨账户设置中创建抓取器，而您要从中收集指标的 Amazon MSK 集群与 Amazon Managed Service for Prometheus 收集器位于不同的账户中，请使用以下过程。

例如，当您有两个账户时，第一个账户是 Amazon MSK 所在的源账户 `account_id_source`，另一个是 Amazon Managed Service for Prometheus 工作区所在的目标账户 `account_id_target`。

**在跨账户设置中创建抓取器**

1. 在源账户中，创建角色 `arn:aws:iam::111122223333:role/Source` 并添加以下信任策略。

   ```
   {
       "Effect": "Allow",
       "Principal": {
       "Service": [
           "scraper.aps.amazonaws.com"
        ]
       },
       "Action": "sts:AssumeRole",
       "Condition": {
           "ArnEquals": {
               "aws:SourceArn": "arn:aws:aps:aws-region:111122223333:scraper/scraper-id"
           },
           "StringEquals": {
               "AWS:SourceAccount": "111122223333"
           }
       }
   }
   ```

1. 在源（Amazon MSK 集群）和目标（适用于 Prometheus 的亚马逊托管服务工作空间）的每种组合上，您都需要创建一个`arn:aws:iam::444455556666:role/Target`角色并添加以下具有权限的信任策略。[AmazonPrometheusRemoteWriteAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html)

   ```
   {
     "Effect": "Allow",
     "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/Source"
     },
     "Action": "sts:AssumeRole",
     "Condition": {
        "StringEquals": {
           "sts:ExternalId": "arn:aws:aps:aws-region:111122223333:scraper/scraper-id"
         }
     }
   }
   ```

1. 使用 `--role-configuration` 选项创建抓取器。

   ```
   aws amp create-scraper \ --source vpcConfiguration="{subnetIds=[subnet-subnet-id], "securityGroupIds": ["sg-security-group-id"]}" \ --scrape-configuration configurationBlob=<base64-encoded-blob> \ --destination ampConfiguration="{workspaceArn='arn:aws:aps:aws-region:444455556666:workspace/ws-workspace-id'}"\ --role-configuration '{"sourceRoleArn":"arn:aws:iam::111122223333:role/Source", "targetRoleArn":"arn:aws:iam::444455556666:role/Target"}'
   ```

1. 验证抓取器创建。

   ```
   aws amp list-scrapers
   {
       "scrapers": [
           {
               "scraperId": "s-example123456789abcdef0",
               "arn": "arn:aws:aps:aws-region:111122223333:scraper/s-example123456789abcdef0": "arn:aws:iam::111122223333:role/Source",
               "status": "ACTIVE",
               "creationTime": "2025-10-27T18:45:00.000Z",
               "lastModificationTime": "2025-10-27T18:50:00.000Z",
               "tags": {},
               "statusReason": "Scraper is running successfully",
               "source": {
                   "vpcConfiguration": {
                       "subnetIds": ["subnet-subnet-id"],
                       "securityGroupIds": ["sg-security-group-id"]
                   }
               },
               "destination": {
                   "ampConfiguration": {
                       "workspaceArn": "arn:aws:aps:aws-region:444455556666:workspace/ws-workspace-id'"
                   }
               },
               "scrapeConfiguration": {
                   "configurationBlob": "<base64-encoded-blob>"
               }
           }
       ]
   }
   ```

## 在 RoleConfiguration 和服务相关角色之间切换
<a name="prom-msk-changing-roles"></a>

当您想要切换回服务相关角色而不是 `RoleConfiguration` 以写入 Amazon Managed Service for Prometheus 工作区时，必须更新 `UpdateScraper` 并提供一个与抓取器位于相同账户中的工作区（不需要 `RoleConfiguration`）。系统将从抓取器中移除 `RoleConfiguration`，并将使用服务相关角色。

当您更改与抓取器位于相同账户中的工作区并且想要继续使用 `RoleConfiguration` 时，必须再次提供在 `UpdateScraper` 上提供 `RoleConfiguration`。

## 查找和删除抓取程序
<a name="prom-msk-delete-scraper"></a>

您可以使用 AWS API 或列 AWS CLI 出您账户中的抓取器或将其删除。

**注意**  
请确保您使用的是 AWS CLI 或 SDK 的最新版本。最新版本为您提供最新的特征和功能，以及安全更新。或者，使用 [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)，它可以自动提供始终使用 up-to-date命令行体验。

要列出您账户中的所有抓取程序，请使用 [ListScrapers](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListScrapers.html) API 操作。

或者，使用 AWS CLI，拨打：

```
aws amp list-scrapers
```

`ListScrapers` 返回您账户中的所有抓取程序，例如：

```
{
    "scrapers": [
        {
            "scraperId": "s-1234abcd-56ef-7890-abcd-1234ef567890",
            "arn": "arn:aws:aps:aws-region:123456789012:scraper/s-1234abcd-56ef-7890-abcd-1234ef567890",
            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-2931",
            "status": {
                "statusCode": "DELETING"
            },
            "createdAt": "2023-10-12T15:22:19.014000-07:00",
            "lastModifiedAt": "2023-10-12T15:55:43.487000-07:00",
            "tags": {},
            "source": {
                "vpcConfiguration": {
                   "securityGroupIds": [
                        "sg-1234abcd5678ef90"
                    ],
                    "subnetIds": [
                        "subnet-abcd1234ef567890", 
                        "subnet-1234abcd5678ab90"
                    ]
                }
            },
            "destination": {
                "ampConfiguration": {
                    "workspaceArn": "arn:aws:aps:aws-region:123456789012:workspace/ws-1234abcd-5678-ef90-ab12-cdef3456a78"
                }
            }
        }
    ]
}
```

要删除抓取程序，请使用 `ListScrapers` 操作查找要删除的抓取程序的 `scraperId`，然后使用 [DeleteScraper](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) 操作将其删除。

或者，使用 AWS CLI，拨打：

```
aws amp delete-scraper --scraper-id scraperId
```

## 从 Amazon MSK 收集的指标
<a name="prom-msk-metrics"></a>

当与 Amazon MSK 集成时，Amazon Managed Service for Prometheus 收集器会自动抓取以下指标：

### 指标：jmx\$1exporter 和 pod\$1exporter 作业
<a name="broker-metrics"></a>


| 指标 | 描述/用途 | 
| --- | --- | 
|  jmx\$1config\$1reload\$1failure\$1total  |  JMX 导出程序未能重新加载其配置文件的总次数。  | 
|  jmx\$1scrape\$1duration\$1seconds  |  在当前收集周期内抓取 JMX 指标所花费的时间（以秒为单位）。  | 
|  jmx\$1scrape\$1error  |  指示在 JMX 指标抓取期间是否出现错误（1 = 错误，0 = 成功）。  | 
|  java\$1lang\$1memory\$1 \$1used HeapMemoryUsage  |  JVM 当前使用的堆内存量（以字节为单位）。  | 
|  java\$1lang\$1memory\$1 \$1max HeapMemoryUsage  |  可用于内存管理的最大堆内存量（以字节为单位）。  | 
|  java\$1lang\$1memory\$1 \$1used NonHeapMemoryUsage  |  JVM 当前使用的非堆内存量（以字节为单位）。  | 
|  kafka\$1cluster\$1Partition\$1Value  |  与 Kafka 集群分区相关的当前状态或值，按分区 ID 和主题细分。  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1assigned\$1partitions  |  当前分配给该使用者的分区数。  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1commit\$1latency\$1avg  |  提交偏移量所花费的平均时间（以毫秒为单位）。  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1commit\$1rate  |  每秒的偏移量提交次数。  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1failed\$1rebalance\$1total  |  失败的使用者组重新平衡总数。  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1last\$1heartbeat\$1seconds\$1ago  |  自上次向协调器发送检测信号以来的秒数。  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1rebalance\$1latency\$1avg  |  使用者组重新平衡所花费的平均时间（以毫秒为单位）。  | 
|  kafka\$1consumer\$1consumer\$1coordinator\$1metrics\$1rebalance\$1total  |  使用者组重新平衡总数。  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1bytes\$1consumed\$1rate  |  使用者每秒使用的平均字节数。  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1fetch\$1latency\$1avg  |  提取请求所花费的平均时间（以毫秒为单位）。  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1fetch\$1rate  |  每秒的提取请求数。  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1records\$1consumed\$1rate  |  每秒使用的平均记录数。  | 
|  kafka\$1consumer\$1consumer\$1fetch\$1manager\$1metrics\$1records\$1lag\$1max  |  最大滞后，以该使用者中的任何分区的记录数表示。  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1connection\$1count  |  当前活动的连接数。  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1incoming\$1byte\$1rate  |  每秒从所有服务器接收的平均字节数。  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1last\$1poll\$1seconds\$1ago  |  自上次使用者 poll() 调用以来的秒数。  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1request\$1rate  |  每秒发送的请求数。  | 
|  kafka\$1consumer\$1consumer\$1metrics\$1response\$1rate  |  每秒接收的响应数。  | 
|  kafka\$1con ConsumerLagMetrics sumer\$1group\$1 \$1Val  |  使用者组的当前使用者滞后值，表示使用者落后的程度。  | 
|  kafka\$1con KafkaController troller\$1 \$1Val  |  Kafka 控制器的当前状态或值（1 = 活动控制器，0 = 不活动）。  | 
|  kafka\$1con ControllerEventManager troller\$1 \$1Cou  |  已处理的控制器事件总数。  | 
|  kafka\$1con ControllerEventManager troller\$1 \$1Me  |  处理控制器事件所花费的平均时间。  | 
|  kafka\$1con ControllerStats troller\$1 \$1 MeanRate  |  每秒控制器统计操作的平均速率。  | 
|  kafka\$1协调器\$1group\$1 \$1Valu GroupMetadataManager e  |  使用者组的组元数据管理器的当前状态或值。  | 
|  kafka\$1l LogFlushStats og\$1 \$1Count  |  日志刷新操作总数。  | 
|  kafka\$1l LogFlushStats og\$1 \$1Mean  |  日志刷新操作所花费的平均时间。  | 
|  kafka\$1l LogFlushStats og\$1 \$1 MeanRate  |  每秒日志刷新操作的平均速率。  | 
|  kafka\$1network\$1 \$1 RequestMetrics Cou  |  已处理的网络请求总数。  | 
|  kafka\$1network\$1 \$1 RequestMetrics Me  |  处理网络请求所花费的平均时间。  | 
|  kafka\$1network\$1 \$1 RequestMetrics MeanRate  |  每秒网络请求的平均速率。  | 
|  kafka\$1network\$1accept MeanRate  |  每秒接受的连接的平均速率。  | 
|  kafka\$1server\$1Fetch\$1queue\$1size  |  提取请求队列的当前大小。  | 
|  kafka\$1server\$1Produce\$1queue\$1size  |  生产请求队列的当前大小。  | 
|  kafka\$1server\$1Request\$1queue\$1size  |  常规请求队列的当前大小。  | 
|  kafka\$1 BrokerTopicMetrics server\$1 \$1count  |  代理主题操作（消息in/out, bytes in/out）的总数。  | 
|  kafka\$1 BrokerTopicMetrics server\$1 \$1 MeanRate  |  每秒代理主题操作的平均速率。  | 
|  kafka\$1 BrokerTopicMetrics server\$1 \$1 OneMinuteRate  |  代理主题操作的一分钟移动平均速率。  | 
|  kafka\$1 DelayedOperationPurgatory server\$1 \$1Valu  |  处于等待状态（等待完成）的延迟操作的当前数量。  | 
|  kafka\$1 DelayedFetchMetrics server\$1 \$1 MeanRate  |  每秒延迟提取操作的平均速率。  | 
|  kafka\$1 FetcherLagMetrics server\$1 \$1Valu  |  副本提取器线程的当前滞后值（落后于领导者线程的程度）。  | 
|  kafka\$1 FetcherStats server\$1 \$1 MeanRate  |  每秒提取器操作的平均速率。  | 
|  kafka\$1 ReplicaManager server\$1 \$1Valu  |  副本管理器的当前状态或值。  | 
|  kafka\$1 ReplicaManager server\$1 \$1 MeanRate  |  每秒副本管理器操作的平均速率。  | 
|  kafka\$1 LeaderReplication server\$1 \$1byte\$1rate  |  对于此代理作为领导者的分区，每秒复制的字节速率。  | 
|  kafka\$1server\$1group\$1coordinator\$1metrics\$1group\$1completed\$1rebalance\$1count  |  完成的使用者组重新平衡的总数。  | 
|  kafka\$1server\$1group\$1coordinator\$1metrics\$1offset\$1commit\$1count  |  偏移量提交操作的总数。  | 
|  kafka\$1server\$1group\$1coordinator\$1metrics\$1offset\$1commit\$1rate  |  每秒偏移量提交操作的速率。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1connection\$1count  |  当前活动的连接数。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1connection\$1creation\$1rate  |  每秒新建连接的速率。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1connection\$1close\$1rate  |  每秒连接关闭的速率。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1failed\$1authentication\$1total  |  失败的身份验证尝试总数。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1incoming\$1byte\$1rate  |  每秒传入字节数。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1outgoing\$1byte\$1rate  |  每秒传出字节数。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1request\$1rate  |  每秒请求速率。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1response\$1rate  |  每秒响应速率。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1network\$1io\$1rate  |  每秒网络 I/O 操作的速率。  | 
|  kafka\$1server\$1socket\$1server\$1metrics\$1io\$1ratio  |  花在 I/O 操作上的时间的一小部分。  | 
|  kafka\$1server\$1controller\$1channel\$1metrics\$1connection\$1count  |  控制器通道的当前活动连接数。  | 
|  kafka\$1server\$1controller\$1channel\$1metrics\$1incoming\$1byte\$1rate  |  控制器通道每秒传入字节的速率。  | 
|  kafka\$1server\$1controller\$1channel\$1metrics\$1outgoing\$1byte\$1rate  |  控制器通道每秒传出字节的速率。  | 
|  kafka\$1server\$1controller\$1channel\$1metrics\$1request\$1rate  |  控制器通道每秒的请求速率。  | 
|  kafka\$1server\$1replica\$1fetcher\$1metrics\$1connection\$1count  |  副本提取器的当前活动连接数。  | 
|  kafka\$1server\$1replica\$1fetcher\$1metrics\$1incoming\$1byte\$1rate  |  副本提取器的每秒传入字节的速率。  | 
|  kafka\$1server\$1replica\$1fetcher\$1metrics\$1request\$1rate  |  副本提取器的每秒请求速率。  | 
|  kafka\$1server\$1replica\$1fetcher\$1metrics\$1failed\$1authentication\$1total  |  副本提取器的失败的身份验证尝试总数。  | 
|  kafka\$1 ZooKeeperClientMetrics server\$1 \$1count  |   ZooKeeper 客户机操作总数。  | 
|  kafka\$1 ZooKeeperClientMetrics server\$1 \$1Mean  |   ZooKeeper 客户端操作的平均延迟。  | 
|  kafka\$1 KafkaServer server\$1 \$1Valu  |  Kafka 服务器的当前状态或值（通常表示服务器正在运行）。  | 
|  node\$1cpu\$1seconds\$1total  |  按照 CPU 和模式细分的每种模式（用户、系统、空闲等）所 CPUs 花费的总秒数。  | 
|  node\$1disk\$1read\$1bytes\$1total  |  成功从磁盘读取的总字节数，按设备细分。  | 
|  node\$1disk\$1reads\$1completed\$1total  |  成功完成的磁盘读取总数，按设备细分。  | 
|  node\$1disk\$1writes\$1completed\$1total  |  成功完成的磁盘写入总数，按设备细分。  | 
|  node\$1disk\$1written\$1bytes\$1total  |  成功写入磁盘的总字节数，按设备细分。  | 
|  node\$1filesystem\$1avail\$1bytes  |  非根用户的可用文件系统空间（以字节为单位），按设备和挂载点细分。  | 
|  node\$1filesystem\$1size\$1bytes  |  文件系统的总大小（以字节为单位），按设备和挂载点细分。  | 
|  node\$1filesystem\$1free\$1bytes  |  可用文件系统空间（以字节为单位），按设备和装载点细分。  | 
|  node\$1filesystem\$1files  |  文件系统上的文件节点（inode）总数，按设备和挂载点细分。  | 
|  node\$1filesystem\$1files\$1free  |  文件系统上空闲文件节点（inode）的数量，按设备和挂载点细分。  | 
|  node\$1filesystem\$1readonly  |  表示文件系统是否以只读方式挂载（1 = 只读，0 = 读写）。  | 
|  node\$1filesystem\$1device\$1error  |  表示在获取文件系统统计信息时是否出现错误（1 = 错误，0 = 成功）。  | 

## 限制
<a name="prom-msk-limitations"></a>

当前 Amazon MSK 与 Amazon Managed Service for Prometheus 的集成存在以下限制：
+ 仅对于 Amazon MSK 预置集群才支持（不适用于 Amazon MSK Serverless）
+ 不支持同时启用公共访问和 KRaft 元数据模式的 Amazon MSK 集群
+ 对于 Amazon MSK Express 代理不支持
+ 目前支持 Amazon MSK 集群与 Amazon Managed Service for Prometheus 收集器/工作区之间的 1:1 映射

# 与 Prometheus 兼容的指标有哪些？
<a name="prom-compatible-metrics"></a>

要从您的应用程序和基础设施中抓取 Prometheus 指标，以便在 Amazon Managed Service for Prometheus 中使用，他们必须从与 Prometheus 兼容的 `/metrics` 端点中检测和公开*与 Prometheus 兼容的指标*。您可以实施自己的指标，但不必这样做。Kubernetes（包括 Amazon EKS）及许多其他库和服务直接实施这些指标。

将 Amazon EKS 中的指标导出到与 Prometheus 兼容的端点时，您可以让 Amazon Managed Service for Prometheus 收集器自动抓取这些指标。

有关更多信息，请参阅以下主题：
+ 有关将指标导出为 Prometheus 指标的现有库和服务的更多信息，请参阅 Prometheus 文档中的 [Exporters and integrations](https://prometheus.io/docs/instrumenting/exporters/)。
+ 有关从自己的代码中导出 Prometheus 兼容指标的更多信息，请参阅 Prometheus 文档中的 [Writing exporters](https://prometheus.io/docs/instrumenting/writing_exporters/)。
+ 有关如何设置 Amazon Managed Service for Prometheus 收集器以自动从 Amazon EKS 集群中抓取指标的更多信息，请参阅[为 Amazon EKS 设置托管式收集器](AMP-collector-how-to.md)。

# 使用已出售日志监控收集器
<a name="AMP-collector-vended-logs"></a>

Amazon Managed Service for Prometheus 收集器提供已出售日志，有助于您监控指标收集过程并对其进行故障排除。这些日志会自动发送到 Amazon CloudWatch Logs，并提供对服务发现、指标收集和数据导出操作的可见性。收集器会针对指标收集管道的三个主要组件出售日志：

**Topics**
+ [服务发现日志](#amp-collector-service-discovery-vended-logs)
+ [收集器日志](#amp-collector-vended-logs)
+ [导出程序日志](#amp-exporter-vended-logs)
+ [了解和使用收集器已出售日志](#amp-collector-log-details)

## 服务发现日志
<a name="amp-collector-service-discovery-vended-logs"></a>

服务发现日志提供有关目标发现过程的信息，包括：
+ 访问 Kubernetes API 资源时的身份验证或权限问题。
+ 服务发现设置中的配置错误。

以下示例演示了在服务发现过程中可能遇到的常见身份验证和权限错误：

**Amazon EKS 集群不存在**  
当指定的 Amazon EKS 集群不存在时，您会收到以下错误：  

```
{
  "component": "SERVICE_DISCOVERY",
  "timestamp": "2025-04-30T17:25:41.946Z",
  "message": {
    "log": "Failed to watch Service - Verify your scraper source exists."
  },
  "scrapeConfigId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

**服务的权限无效**  
当收集器缺少适当的基于角色的访问控制（RBAC）权限以监视服务时，您会收到以下错误：  

```
{
  "component": "SERVICE_DISCOVERY",
  "timestamp": "2025-04-30T17:25:41.946Z",
  "message": {
    "log": "Failed to watch Service - Verify your scraper source permissions are valid."
  },
  "scrapeConfigId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

**端点的权限无效**  
当收集器缺少适当的基于角色的访问控制（RBAC）权限以监视端点时，您会收到以下错误：  

```
{
  "component": "SERVICE_DISCOVERY",
  "timestamp": "2025-04-30T17:25:41.946Z",
  "message": {
    "log": "Failed to watch Endpoints - Verify your scraper source permissions are valid."
  },
  "scrapeConfigId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

## 收集器日志
<a name="amp-collector-vended-logs"></a>

收集器日志提供有关指标抓取过程的信息，包括：
+ 由于端点不可用而导致抓取失败。
+ 尝试抓取目标时出现连接问题。
+ 抓取操作期间超时。
+ 抓取目标返回的 HTTP 状态错误。

以下示例演示了在指标抓取过程中可能遇到的常见收集器错误：

**缺少指标端点**  
当 `/metrics` 端点在目标实例上不可用时，您会收到以下错误：  

```
{
    "component": "COLLECTOR",
    "message": {
        "log": "Failed to scrape Prometheus endpoint - verify /metrics endpoint is available",
        "job": "pod_exporter",
        "targetLabels": "{__name__=\"up\", instance=\10.24.34.0\", job=\"pod_exporter\"}"
    },
    "timestamp": "1752787969551",
    "scraperId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

**连接被拒绝**  
当收集器无法与目标端点建立连接时，您会收到以下错误：  

```
{
  "scrapeConfigId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
  "timestamp": "2025-04-30T17:25:41.946Z",
  "message": {
    "message": "Scrape failed",
    "scrape_pool": "pod_exporter",
    "target": "http://10.24.34.0:80/metrics",
    "error": "Get \"http://10.24.34.0:80/metrics\": dial tcp 10.24.34.0:80: connect: connection refused"
  },
  "component": "COLLECTOR"
}
```

## 导出程序日志
<a name="amp-exporter-vended-logs"></a>

导出程序日志提供有关将收集到的指标发送到 Amazon Managed Service for Prometheus 工作区的过程的信息，包括：
+ 处理的指标和数据点数量。
+ 由于工作区问题而导致导出失败。
+ 尝试写入指标时出现权限错误。
+ 导出管道中的依赖关系失败。

以下示例演示了在指标导出过程中可能遇到的常见导出程序错误：

**找不到工作区**  
当找不到指标导出的目标工作区时，您会收到以下错误：  

```
{
    "component": "EXPORTER",
    "message": {
        "log": "Failed to export to the target workspace - Verify your scraper destination.",
        "samplesDropped": 5
    },
    "timestamp": "1752787969664",
    "scraperId": "s-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
```

## 了解和使用收集器已出售日志
<a name="amp-collector-log-details"></a>

### 日志结构
<a name="amp-log-structure"></a>

所有收集器已出售日志都遵循一致的结构，其中包含以下字段：

**scrapeConfigId**  
生成日志的抓取配置的唯一标识符。

**timestamp**  
生成日志条目的时间。

**message**  
日志消息内容，其中可能包括其他结构化字段。

**组件**  
生成日志的组件（SERVICE\$1DISCOVERY、COLLECTOR 或 EXPORTER）

### 使用已出售日志进行故障排除
<a name="amp-troubleshooting"></a>

收集器已出售日志有助于您解决指标收集中的常见问题：

1. 服务发现问题
   + 检查 **SERVICE\$1DISCOVERY** 日志中是否存在身份验证或权限错误。
   + 验证收集器是否拥有访问 Kubernetes 资源的必要权限。

1. 指标抓取问题
   + 检查 **COLLECTOR** 日志中是否存在抓取失败。
   + 验证目标端点是否可访问并返回指标。
   + 确保防火墙规则支持收集器连接到目标端点。

1. 指标导出问题
   + 检查 **EXPORTER** 日志是否存在导出失败。
   + 确认工作区存在并已正确配置。
   + 确保收集器具有写入工作区的必要权限。

### 访问收集器已出售日志
<a name="amp-accessing-logs"></a>

收集器出售的日志会自动发送到 Amazon CloudWatch 日志。访问这些日志：

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，选择**日志组**。

1. 查找并选择收集器的日志组：`/aws/prometheus/workspace_id/collector/collector_id`。

1. 浏览或搜索日志事件以查找相关信息。

您还可以使用 CloudWatch Logs Insights 来查询和分析您的收集器日志。例如，查找所有服务发现错误：

```
fields @timestamp, message.message
| filter component = "SERVICE_DISCOVERY" and message.message like /Failed/
| sort @timestamp desc
```

### 用于监控收集器的最佳实践
<a name="amp-monitoring-best-practices"></a>

有效地监控 Amazon Managed Service for Prometheus 收集器：

1. 为收集器的关键问题设置 CloudWatch 警报，例如持续的抓取失败或导出错误。有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

1. 创建 CloudWatch 仪表板以可视化收集器性能指标以及销售的日志数据。有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[控制面板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

1. 定期查看服务发现日志，以确保正确地发现目标。

1. 监控已丢弃目标的数量，以确定潜在的配置问题。

1. 跟踪导出失败情况，以确保指标成功发送到工作区。

# 客户托管收集器
<a name="self-managed-collectors"></a>

本节包含以下相关信息：通过设置您自己的收集器来使用 Prometheus 远程写入将指标发送到 Amazon Managed Service for Prometheus，从而摄取数据。

当您使用自己的收集器向 Amazon Managed Service for Prometheus 发送指标时，您有责任保护自己的指标并确保摄取过程满足您的可用性需求。

大多数客户托管收集器都使用以下一种工具：
+ **AWS Distro for OpenTelemetry (ADOT)** — ADOT 是一个完全受支持、安全、可用于生产的开源发行版，它为代理提供了收集指标 OpenTelemetry 的功能。您可以使用 ADOT 收集指标并将其发送到 Amazon Managed Service for Prometheus 工作区。有关 ADOT Collector 的更多信息，请参阅[AWS 发行版](https://aws.amazon.com/otel/)。 OpenTelemetry
+ **Prometheus 代理**：您可以设置自己的开源 Prometheus 服务器实例（作为代理运行），以收集指标并将其转发到 Amazon Managed Service for Prometheus 工作区。

以下主题介绍如何使用这两种工具，并包括有关设置您自己收集器的一般信息。

**Topics**
+ [保护指标的摄取](AMP-secure-metric-ingestion.md)
+ [使用 AWS Distro OpenTelemetry 作为收藏家](AMP-ingest-with-adot.md)
+ [使用 Prometheus 实例作为收集器](AMP-ingest-with-prometheus.md)
+ [设置 Amazon Managed Service for Prometheus 以获取高可用性数据](AMP-ingest-high-availability.md)

# 保护指标的摄取
<a name="AMP-secure-metric-ingestion"></a>

Amazon Managed Service for Prometheus 提供了帮助您保护指标摄取的方法。

## 搭 AWS PrivateLink 配适用于 Prometheus 的亚马逊托管服务
<a name="AMP-secure-VPC"></a>

将指标摄取到 Amazon Prometheus 托管服务的网络流量可以通过公共互联网终端节点完成，也可以通过 VPC 终端节点通过。 AWS PrivateLink使用 AWS PrivateLink 可确保来自您的网络流量在 AWS 网络中 VPCs 受到保护，而无需通过公共互联网。要为适用于 Prometheus 的亚马逊托管服务创建 VP AWS PrivateLink C 终端节点，请参阅。[将 Amazon Managed Service for Prometheus 与接口 VPC 终端节点结合使用](AMP-and-interface-VPC.md)

## 身份验证和授权
<a name="AMP-secure-auth"></a>

AWS 身份和访问管理 (IAM) Access Management 是一项网络服务，可帮助您安全地控制对资源的访问 AWS 。可以使用 IAM 来控制谁通过了身份验证（准许登录）并获得授权（具有相应权限）来使用资源。Amazon Managed Service for Prometheus 与 IAM 集成，可帮助您保护数据安全。设置 Amazon Managed Service for Prometheus 时，您需要创建一些 IAM 角色，使其能够从 Prometheus 服务器摄取指标，并让 Grafana 服务器查询存储在您 Amazon Managed Service for Prometheus 工作区中的指标。有关 IAM 的更多信息，请参阅[什么是 IAM？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。

另一项可以帮助您为 Prometheus 设置亚马逊托管服务的 AWS 安全功能是 AWS 签名版本 4 签名流程 (Sigv4)。AWS 签名版本 4 是向 HTTP 发送的 AWS 请求添加身份验证信息的过程。为了安全起见，对的大多数请求都 AWS 必须使用访问密钥进行签名，访问密钥由访问密钥 ID 和私有访问密钥组成。这两个密钥通常称为您的安全凭证。有关 SigV4 的更多信息，请参阅[签名版本 4 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。

# 使用 AWS Distro OpenTelemetry 作为收藏家
<a name="AMP-ingest-with-adot"></a>

本节介绍如何将 AWS Distro for OpenTelemetry (ADOT) Collector 配置为从装有 Prometheus 的应用程序中抓取，并将指标发送到适用于 Prometheus 的亚马逊托管服务。有关 ADOT Collector 的更多信息，请参阅[AWS 发行版](https://aws.amazon.com/otel/)。 OpenTelemetry

以下主题介绍了将 ADOT 设置为指标收集器的三种不同方法，具体取决于指标是来自 Amazon EKS、Amazon ECS 还是 Amazon EC2 实例。

**Topics**
+ [使用 AWS Distro 在亚马逊 Elastic Kubernetes Service 集群 OpenTelemetry 上设置指标提取](AMP-onboard-ingest-metrics-OpenTelemetry.md)
+ [使用适用于开放遥测的 AWS Distro 设置从 Amazon ECS 获取指标](AMP-onboard-ingest-metrics-OpenTelemetry-ECS.md)
+ [使用远程写入设置从 Amazon EC2 实例摄取指标](AMP-onboard-ingest-metrics-remote-write-EC2.md)

# 使用 AWS Distro 在亚马逊 Elastic Kubernetes Service 集群 OpenTelemetry 上设置指标提取
<a name="AMP-onboard-ingest-metrics-OpenTelemetry"></a>

您可以使用 AWS Distro for OpenTelemetry (ADOT) 收集器从装有 Prometheus 工具的应用程序中获取指标，然后将这些指标发送到适用于 Prometheus 的亚马逊托管服务。

**注意**  
有关 ADOT 收集器的更多信息，请参阅[AWS 发行版](https://aws.amazon.com/otel/)。 OpenTelemetry  
有关 Prometheus 分析的应用程序的更多信息，请参阅[与 Prometheus 兼容的指标有哪些？](prom-compatible-metrics.md)。

使用 ADOT 收集 Prometheus 指标涉及三个 OpenTelemetry 组成部分：Prometheus 接收器、Prometheus 远程写入导出器和 Sigv4 身份验证扩展。

您可以使用现有的 Prometheus 配置来配置 Prometheus Receiver，以执行服务发现和指标抓取。Prometheus Receiver 以 Prometheus 展览格式抓取指标。您要抓取的任何应用程序或终端节点都应使用 Prometheus 客户端库进行配置。Prometheus Receiver 支持 Prometheus 文档[配置](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)中描述的全套 Prometheus 抓取和重新标记配置。您可以将这些配置直接粘贴到 ADOT 收集器配置中。

Prometheus Remote Write Exporter 使用 `remote_write` 终端节点将抓取的指标发送到您的管理门户工作区。导出数据的 HTTP 请求将使用 AWS Sigv4（安全身份验证 AWS 协议）和 Sigv4 身份验证扩展插件进行签名。有关更多信息，请参阅[签名版本 4 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。

收集器会自动发现 Amazon EKS 上的 Prometheus 指标终端节点，并使用 [<kubernetes\$1sd\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config) 中发现的配置。

 以下演示是在运行 Amazon Elastic Kubernetes Service 或自行管理 Kubernetes 的集群上进行此配置的示例。要执行这些步骤，您必须拥有来自默认 AWS 凭证链中任何潜在选项的 AWS 证书。有关更多信息，请参阅[配置 AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html)。此演示使用了一个用于流程集成测试的示例应用程序。该示例应用程序在 `/metrics` 端点处公开指标，就像 Prometheus 客户端库一样。

## 先决条件
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-pre"></a>

在开始以下摄取设置步骤之前，您必须为服务账户和信任策略设置 IAM 角色。

**为服务账户和信任策略设置 IAM 角色**

1. 按照[设置服务角色从 Amazon EKS 集群中摄取指标](set-up-irsa.md#set-up-irsa-ingest)中的步骤为服务账户创建 IAM 角色。

   ADOT 收集器将在抓取和导出指标时使用此角色。

1. 接下来，编辑信任策略。使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/home) 打开 IAM 控制台。

1. 在左侧导航窗格中，选择**角色**并找到您在步骤 1 中创建的。**amp-iamproxy-ingest-role**

1. 选择**信任关系**选项卡，然后选择**编辑信任关系**。

1. 在信任关系策略 JSON 中，将 `aws-amp` 替换为 `adot-col`，然后选择**更新信任策略**。最终的信任策略应如下所示：

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
           "StringEquals": {
             "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account",
             "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
           }
         }
       }
     ]
   }
   ```

------

1. 选择**权限**选项卡，并确保将以下权限策略附加到该角色。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "aps:RemoteWrite",
                   "aps:GetSeries",
                   "aps:GetLabels",
                   "aps:GetMetricMetadata"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## 启用 Prometheus 指标收集
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-steps"></a>

**注意**  
在 Amazon EKS 中创建命名空间时，默认情况下，`alertmanager` 和 Node Exporter 处于禁用状态。

**在 Amazon EKS 或 Kubernetes 集群上启用 Prometheus 收集**

1. 从存储库中分叉并克隆示例应用程序，网址为[aws-otel-community](https://github.com/aws-observability/aws-otel-community)。

   然后，运行以下命令。

   ```
   cd ./sample-apps/prometheus-sample-app
   docker build . -t prometheus-sample-app:latest
   ```

1. 将此映像推送到注册表，例如 Amazon ECR 或 DockerHub。

1. 通过复制此 Kubernetes 配置并应用，在集群中部署示例应用程序。通过在 `prometheus-sample-app.yaml` 文件中替换 `{{PUBLIC_SAMPLE_APP_IMAGE}}`，将映像更改为刚才推送的映像。

   ```
   curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-sample-app.yaml -o prometheus-sample-app.yaml
   kubectl apply -f prometheus-sample-app.yaml
   ```

1. 输入以下命令以验证示例应用程序是否已启动。在命令的输出中，您将在 `NAME` 列中看到 `prometheus-sample-app`。

   ```
   kubectl get all -n aoc-prometheus-pipeline-demo
   ```

1. 启动 ADOT 收集器的默认实例。为此，请先输入以下命令来提取 ADOT 收集器的 Kubernetes 配置。

   ```
   curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-daemonset.yaml -o prometheus-daemonset.yaml
   ```

   然后编辑模板文件，用您 Amazon Managed Service for Prometheus 工作区的 **remote\$1write** 终端节点替换 `YOUR_ENDPOINT`，并用您的区域替换 `YOUR_REGION`。查看工作区详细信息时，请使用 Amazon Managed Service for Prometheus 控制台中显示的 **remote\$1write** 终端节点。

   你还需要`YOUR_ACCOUNT_ID`在 Kubernetes 配置的服务账户部分更改为你的 AWS 账户 ID。

   在本示例中，ADOT 收集器配置使用注释（`scrape=true`）来告知要抓取哪些目标终端节点。如此，ADOT 收集器便可以将示例应用程序终端节点与您集群中的 kube-system 终端节点区分开来。如果您想抓取其他示例应用程序，则可以将其从重新标记配置中删除。

1. 输入以下命令以部署 ADOT 收集器。

   ```
   kubectl apply -f prometheus-daemonset.yaml
   ```

1. 输入以下命令以验证 ADOT 收集器是否已启动。在 `NAMESPACE` 列中查找 `adot-col`。

   ```
   kubectl get pods -n adot-col
   ```

1. 使用日志导出器验证管道是否正常运行。我们的示例模板已经与日志导出器集成。输入以下命令。

   ```
   kubectl get pods -A
   kubectl logs -n adot-col name_of_your_adot_collector_pod
   ```

   从示例应用程序中抓取的一些指标如下所示：

   ```
   Resource labels:
        -> service.name: STRING(kubernetes-service-endpoints)
        -> host.name: STRING(192.168.16.238)
        -> port: STRING(8080)
        -> scheme: STRING(http)
   InstrumentationLibraryMetrics #0
   Metric #0
   Descriptor:
        -> Name: test_gauge0
        -> Description: This is my gauge
        -> Unit: 
        -> DataType: DoubleGauge
   DoubleDataPoints #0
   StartTime: 0
   Timestamp: 1606511460471000000
   Value: 0.000000
   ```

1. 要测试 Amazon Managed Service for Prometheus 是否已收到这些指标，请使用 `awscurl`。[此工具允许您通过 AWS Sigv4 身份验证通过命令行发送 HTTP 请求，因此您必须在本地设置 AWS 凭证，并具有从亚马逊托管服务查询 Prometheus 的正确权限。有关安装的说明，请参阅 awscurl。`awscurl`](https://github.com/okigan/awscurl)

   在以下命令中，将 `AMP_REGION` 和 `AMP_ENDPOINT`替换为您 Amazon Managed Service for Prometheus 工作区的信息。

   ```
   awscurl --service="aps" --region="AMP_REGION" "https://AMP_ENDPOINT/api/v1/query?query=adot_test_gauge0"
   {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"adot_test_gauge0"},"value":[1606512592.493,"16.87214000011479"]}]}}
   ```

   如果您收到指标响应，则表示您的管道设置已成功，并且该指标已成功从示例应用程序传播到 Amazon Managed Service for Prometheus。

**清理**

要清理此演示，请输入以下命令。

```
kubectl delete namespace aoc-prometheus-pipeline-demo
kubectl delete namespace adot-col
```

## 高级配置
<a name="AMP-otel-advanced"></a>

Prometheus Receiver 支持 Prometheus 文档[配置](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)中描述的全套 Prometheus 抓取和重新标记配置。您可以将这些配置直接粘贴到 ADOT 收集器配置中。

Prometheus Receiver 的配置包括您的服务发现、抓取配置和重新标记配置。接收方配置如下所示。

```
receivers:
  prometheus:
    config:
      [[Your Prometheus configuration]]
```

下面是一个配置示例：

```
receivers:
  prometheus:
    config:
      global:
        scrape_interval: 1m
        scrape_timeout: 10s
        
      scrape_configs:
      - job_name: kubernetes-service-endpoints
        sample_limit: 10000
        kubernetes_sd_configs:
        - role: endpoints
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          insecure_skip_verify: true
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
```

如果您已有 Prometheus 配置，则必须将 `$` 字符替换为 `$$`，以避免将值替换为环境变量。\$1这对于 relabel\$1configurations 的替换值尤其重要。例如，如果您从以下 relabel\$1configuration 开始：

```
relabel_configs:
- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
  regex: (.+);(.+);(.+)
  replacement: ${1}://${2}${3}
  target_label: __param_target
```

它将变成以下内容：

```
relabel_configs:
- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
  regex: (.+);(.+);(.+)
  replacement: $${1}://${2}${3}
  target_label: __param_target
```

**Prometheus Remote Write Exporter 和 Sigv4 Authentication Extension**

Prometheus Remote Write Exporter 和 Sigv4 Authentication Extension 的配置比 Prometheus Receiver 简单。在管道的这个阶段，指标已经被摄取完毕，我们准备将这些数据导出到 Amazon Managed Service for Prometheus。对可与 Amazon Managed Service for Prometheus 进行通信的成功配置的最低要求如以下示例所示。

```
extensions:
  sigv4auth:
    service: "aps"
    region: "user-region"
exporters:
  prometheusremotewrite:
    endpoint: "https://aws-managed-prometheus-endpoint/api/v1/remote_write"
    auth:
      authenticator: "sigv4auth"
```

此配置使用默认 AWS 凭证链中的 AWS 凭据发送由 AWS Sigv4 签名的 HTTPS 请求。有关更多信息，请参阅[配置 适用于 Go 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html)。必须将服务指定为 `aps`。

无论采用何种部署方法，ADOT 收集器都必须有权访问默认 AWS 凭证链中列出的选项之一。Sigv4 身份验证扩展依赖于 适用于 Go 的 AWS SDK 并使用它来获取凭据和进行身份验证。您必须确保这些凭证对于 Amazon Managed Service for Prometheus 具有远程写入权限。

# 使用适用于开放遥测的 AWS Distro 设置从 Amazon ECS 获取指标
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS"></a>

本节介绍如何使用开放遥测发行版 (ADOT) 从亚马逊弹性容器服务 (Amazon ECS) 收集指标，并使用开放遥测发行版 (ADOT) 将其采集到适用于普罗米修斯的亚马逊托 AWS 管服务中。它还描述了如何在 Amazon Managed Grafana 中可视化您的指标。

## 先决条件
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-prereq"></a>

**重要**  
在开始之前，您必须在具有默认设置的 AWS Fargate 集群上拥有一个 Amazon ECS 环境、一个 Amazon Managed Service for Prometheus 工作区以及一个 Amazon Managed Grafana 工作区。我们假设您熟悉容器工作负载、Amazon Managed Service for Prometheus 和 Amazon Managed Grafana。

有关更多信息，请参阅以下链接：
+ 有关如何在具有默认设置的 Fargate 集群上创建 Amazon ECS 环境的信息，请参阅《Amazon ECS 开发人员指南》中的**[创建集群](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)。
+ 有关如何创建 Amazon Managed Service for Prometheus 工作区的信息，请参阅《Amazon Managed Service for Prometheus 用户指南》中的**[创建工作区](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-create-workspace.html)。
+ 有关如何创建 Amazon Managed Grafana 工作区的信息，请参阅《Amazon Managed Grafana 用户指南》**中的[创建工作区](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-create-workspace.html)。

## 步骤 1：定义自定义 ADOT 收集器容器映像
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-create"></a>

使用以下配置文件作为模板来定义您自己的 ADOT 收集器容器映像。将*my-remote-URL*和*my-region*替换为你的`endpoint`和`region`值。将配置保存在名为 *adot-config.yaml* 的文件中。

**注意**  
此配置使用 `sigv4auth` 扩展验证对 Amazon Managed Service for Prometheus 的调用。有关配置的更多信息`sigv4auth`，请参阅 [Authenticator-Sigv4 on](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/sigv4authextension)。 GitHub

```
receivers:
  prometheus:
    config:
      global:
        scrape_interval: 15s
        scrape_timeout: 10s
      scrape_configs:
      - job_name: "prometheus"
        static_configs:
        - targets: [ 0.0.0.0:9090 ]
  awsecscontainermetrics:
    collection_interval: 10s
processors:
  filter:
    metrics:
      include:
        match_type: strict
        metric_names:
          - ecs.task.memory.utilized
          - ecs.task.memory.reserved
          - ecs.task.cpu.utilized
          - ecs.task.cpu.reserved
          - ecs.task.network.rate.rx
          - ecs.task.network.rate.tx
          - ecs.task.storage.read_bytes
          - ecs.task.storage.write_bytes
exporters:
  prometheusremotewrite:
    endpoint: my-remote-URL
    auth:
      authenticator: sigv4auth
  logging:
    loglevel: info
extensions:
  health_check:
  pprof:
    endpoint: :1888
  zpages:
    endpoint: :55679
  sigv4auth:
    region: my-region
    service: aps
service:
  extensions: [pprof, zpages, health_check, sigv4auth]
  pipelines:
    metrics:
      receivers: [prometheus]
      exporters: [logging, prometheusremotewrite]
    metrics/ecs:
      receivers: [awsecscontainermetrics]
      processors: [filter]
      exporters: [logging, prometheusremotewrite]
```

## 步骤 2：将您的 ADOT 收集器容器映像推送到 Amazon ECR 存储库
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-push"></a>

使用 Dockerfile 创建容器映像，然后将其推送到 Amazon Elastic Container Registry（ECR）存储库。

1. 构建 Dockerfile 以将您的容器映像复制并添加到 OTEL Docker 映像中。

   ```
   FROM public.ecr.aws/aws-observability/aws-otel-collector:latest
   COPY adot-config.yaml /etc/ecs/otel-config.yaml
   CMD ["--config=/etc/ecs/otel-config.yaml"]
   ```

1. 创建 Amazon ECR 存储库。

   ```
   # create repo:
   COLLECTOR_REPOSITORY=$(aws ecr create-repository --repository aws-otel-collector \ 
                                  --query repository.repositoryUri --output text)
   ```

1. 创建容器映像。

   ```
   # build ADOT collector image:
   docker build -t $COLLECTOR_REPOSITORY:ecs .
   ```
**注意**  
这会假设您在运行容器的环境中构建容器。否则，您可能需要在构建映像时使用 `--platform` 参数。

1. 登录 Amazon ECR 存储库。*my-region*用你的`region`价值替换。

   ```
   # sign in to repo:
   aws ecr get-login-password --region my-region | \
           docker login --username AWS --password-stdin $COLLECTOR_REPOSITORY
   ```

1. 推送容器映像。

   ```
   # push ADOT collector image:
   docker push $COLLECTOR_REPOSITORY:ecs
   ```

## 步骤 3：创建 Amazon ECS 任务定义以抓取 Amazon Managed Service for Prometheus
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-task"></a>

创建 Amazon ECS 任务定义以抓取 Amazon Managed Service for Prometheus。您的任务定义应包括一个名为 `adot-collector` 的容器和一个名为 `prometheus` 的容器。`prometheus` 生成指标，`adot-collector` 抓取 `prometheus`。

**注意**  
Amazon Managed Service for Prometheus 作为一项服务运行，从容器中收集指标。在本例中，容器以代理模式在本地运行 Prometheus，将本地指标发送到 Amazon Managed Service for Prometheus。

**示例：任务定义**

以下是任务定义具体形式的示例。您可以使用此示例作为模板来创建自己的任务定义。将 `adot-collector` 的 `image` 值替换为您的存储库 URL 和映像标签（`$COLLECTOR_REPOSITORY:ecs`）。将 `adot-collector` 和 `prometheus` 的 `region` 值替换为您的 `region` 值。

```
{
  "family": "adot-prom",
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "adot-collector",
      "image": "account_id.dkr.ecr.region.amazonaws.com/image-tag",
      "essential": true,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-adot-collector",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    },
    {
      "name": "prometheus",
      "image": "prom/prometheus:main",
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-prom",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    }
  ],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "cpu": "1024"
}
```

## 步骤 4：授予访问 Amazon Managed Service for Prometheus 的任务权限
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-attach"></a>

要将抓取的指标发送到适用于 Prometheus 的亚马逊托管服务，您的 Amazon ECS 任务必须具有正确的权限才能 AWS 为您调用 API 操作。您必须为任务创建 IAM 角色和并将 `AmazonPrometheusRemoteWriteAccess` 策略附加至其中。有关创建该角色并附加策略的更多信息，请参阅[为任务创建 IAM 角色和策略](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。

在您将 `AmazonPrometheusRemoteWriteAccess` 附加到您的 IAM 角色并使用该角色执行任务后，Amazon ECS 可以将您抓取的指标发送到 Amazon Managed Service for Prometheus。

## 步骤 5：在 Amazon Managed Grafana 中可视化您的指标
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-ECS-vis"></a>

**重要**  
在开始之前，您必须在 Amazon ECS 任务定义上运行 Fargate 任务。否则，Amazon Managed Service for Prometheus 将无法使用您的指标。

1. 在 Amazon Managed Grafana 工作空间的导航窗格中，**选择图标下方的数据**源。 AWS 

1. 在**数据来源**选项卡上的**服务**中，选择 **Amazon Managed Service for Prometheus**，然后选择您的**默认区域**。

1. 选择**添加数据来源**。

1. 使用 `ecs` 和 `prometheus` 前缀查询和查看您的指标。

# 使用远程写入设置从 Amazon EC2 实例摄取指标
<a name="AMP-onboard-ingest-metrics-remote-write-EC2"></a>

本部分介绍如何运行在 Amazon Elastic Compute Cloud（Amazon EC2）实例中运行远程写入的 Prometheus 服务器。它解释了如何从用 Go 编写的演示应用程序中收集指标，并将这些指标发送到 Amazon Managed Service for Prometheus 工作区。

## 先决条件
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-prereq"></a>

**重要**  
在开始之前，您必须已经安装了 Prometheus v2.26 或更高版本。我们假设您熟悉 Prometheus、Amazon EC2 和 Amazon Managed Service for Prometheus。有关如何安装 Prometheus 的信息，请参阅 Prometheus 网站上的[开始使用](https://prometheus.io/docs/prometheus/latest/getting_started/)。

如果您不熟悉 Amazon EC2 或 Amazon Managed Service for Prometheus，我们建议您先阅读以下部分：
+ [什么是 Amazon Elastic Compute Cloud？](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)
+ [什么是 Amazon Managed Service for Prometheus？](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html)

## 为 Amazon EC2 创建 IAM 角色
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-IAM"></a>

要流式传输指标，您必须先使用 AWS 托管策略创建 IAM 角色**AmazonPrometheusRemoteWriteAccess**。然后，您可以使用该角色启动实例，并将指标流式传输到您的 Amazon Managed Service for Prometheus 工作区。

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 从导航窗格中选择**角色**，然后选择**创建角色**。

1. 对于信任实体的类型，选择 **AWS service (亚马逊云科技服务)**。对于使用案例，选择 **EC2**。选择**下一步: 权限**。

1. 在搜索栏中输入 **AmazonPrometheusRemoteWriteAccess**。在 “**策略名称**” 中 **AmazonPrometheusRemoteWriteAccess**，选择，然后选择 “**附加策略**”。选择**下一步: 标签**。

1. （可选）为您的 IAM 角色创建 IAM 标签。选择**下一步：审核**。

1. 输入角色的名称。选择**创建策略**。

## 启动 Amazon EC2 实例
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-instance"></a>

要启动 Amazon EC2 实例，请按照《适用于 Linux 实例的 Amazon Elastic Compute Cloud 用户指南》**中[启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#launch-instance-with-role)的说明进行操作。

## 运行演示应用程序
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-demo"></a>

创建 IAM 角色并使用该角色启动 EC2 实例后，您可以运行一个演示应用程序来查看其运行情况。

**运行演示应用程序并测试指标**

1. 使用以下模板创建名为 `main.go` 的 Go 文件。

   ```
   package main
   
   import (
       "github.com/prometheus/client_golang/prometheus/promhttp"
       "net/http"
   )
   
   func main() {
       http.Handle("/metrics", promhttp.Handler())
   
       http.ListenAndServe(":8000", nil)
   }
   ```

1. 运行以下命令以安装相应的依赖项。

   ```
   sudo yum update -y
   sudo yum install -y golang
   go get github.com/prometheus/client_golang/prometheus/promhttp
   ```

1. 运行演示应用程序。

   ```
   go run main.go
   ```

   演示应用程序应在端口 8000 上运行，并显示所有公开的 Prometheus 指标。以下是这些指标的示例。

   ```
   curl -s http://localhost:8000/metrics 
   ...
   process_max_fds 4096# HELP process_open_fds Number of open file descriptors.# TYPE process_open_fds gauge
   process_open_fds 10# HELP process_resident_memory_bytes Resident memory size in bytes.# TYPE process_resident_memory_bytes gauge
   process_resident_memory_bytes 1.0657792e+07# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.# TYPE process_start_time_seconds gauge
   process_start_time_seconds 1.61131955899e+09# HELP process_virtual_memory_bytes Virtual memory size in bytes.# TYPE process_virtual_memory_bytes gauge
   process_virtual_memory_bytes 7.77281536e+08# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.# TYPE process_virtual_memory_max_bytes gauge
   process_virtual_memory_max_bytes -1# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.# TYPE promhttp_metric_handler_requests_in_flight gauge
   promhttp_metric_handler_requests_in_flight 1# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.# TYPE promhttp_metric_handler_requests_total counter
   promhttp_metric_handler_requests_total{code="200"} 1
   promhttp_metric_handler_requests_total{code="500"} 0
   promhttp_metric_handler_requests_total{code="503"} 0
   ```

## 创建 Amazon Managed Service for Prometheus 工作区
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-workspace"></a>

要创建 Amazon Managed Service for Prometheus 工作区，请按照[创建工作区](AMP-create-workspace.md)中的说明进行操作。

## 运行 Prometheus 服务器
<a name="AMP-onboard-ingest-metrics-remote-write-EC2-server"></a>

1. 使用以下示例 YAML 文件作为模板来创建名为 `prometheus.yaml` 的新文件。对于`url`，请*my-region*替换为您的 “区域” 值和*my-workspace-id*亚马逊 Prometheus 托管服务为您生成的工作空间 ID。对于`region`，请*my-region*替换为您的 “区域” 值。

   **示例：YAML 文件**

   ```
   global:
     scrape_interval: 15s
     external_labels:
       monitor: 'prometheus'
   
   scrape_configs:
     - job_name: 'prometheus'
       static_configs:
         - targets: ['localhost:8000']
   
   remote_write:
     -
       url: https://aps-workspaces.my-region.amazonaws.com/workspaces/my-workspace-id/api/v1/remote_write
       queue_config:
           max_samples_per_send: 1000
           max_shards: 200
           capacity: 2500
       sigv4:
            region: my-region
   ```

1. 运行 Prometheus 服务器，将演示应用程序的指标发送到 Amazon Managed Service for Prometheus 工作区。

   ```
   prometheus --config.file=prometheus.yaml
   ```

Prometheus 服务器现在应该将演示应用程序的指标发送到 Amazon Managed Service for Prometheus 工作区。

# 使用 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
```

# 设置 Amazon Managed Service for Prometheus 以获取高可用性数据
<a name="AMP-ingest-high-availability"></a>

当您将数据发送到 Amazon Managed Service for Prometheus 时，数据会自动在该区域的 AWS 可用区间复制，并由提供可扩展性、可用性和安全性的主机集群提供给您。您可能需要添加额外的高可用性故障安全功能，具体取决于您的特定设置。有两种常见的方法可以为您的设置增加高可用性安全性：
+ 如果您有多个容器或实例具有相同数据，则可以将这些数据发送到 Amazon Managed Service for Prometheus，并自动删除重复数据。这有助于确保您的数据将发送到 Amazon Managed Service for Prometheus 工作区。

  有关对高可用性数据进行重复数据消除的更多信息，请参阅 [对发送到 Amazon Managed Service for Prometheus 的高可用性指标进行重复数据删除](AMP-ingest-dedupe.md)。
+ 如果您想确保即使 AWS 区域不可用的情况下也可以访问数据，则可以将指标发送到另一个区域的第二个工作区。

  有关将指标数据发送到多个工作区的更多信息，请参阅 [利用跨区域工作区在 Amazon Managed Service for Prometheus 中增加高可用性](AMP-send-to-multiple-workspaces.md)。

**Topics**
+ [对发送到 Amazon Managed Service for Prometheus 的高可用性指标进行重复数据删除](AMP-ingest-dedupe.md)
+ [使用 Prometheus 将高可用性数据发送到 Amazon Managed Service for Prometheus](Send-high-availability-data.md)
+ [使用 Prometheus Operator Helm 图表为 Amazon Managed Service for Prometheus 设置高可用性数据](Send-high-availability-data-operator.md)
+ [使用 Distro 向适用于 Prometheus 的亚马逊托管服务发送高可用性数据 AWS OpenTelemetry](Send-high-availability-data-ADOT.md)
+ [使用 Prometheus 社区 Helm 图表向 Amazon Managed Service for Prometheus 发送高可用性数据](Send-high-availability-prom-community.md)
+ [有关 Amazon Managed Service for Prometheus 中高可用性配置常见问题的解答](HA_FAQ.md)
+ [利用跨区域工作区在 Amazon Managed Service for Prometheus 中增加高可用性](AMP-send-to-multiple-workspaces.md)

# 对发送到 Amazon Managed Service for Prometheus 的高可用性指标进行重复数据删除
<a name="AMP-ingest-dedupe"></a>

您可以将来自多个 Prometheus *代理*（在代理模式下运行的 Prometheus 实例）的数据发送到 Amazon Managed Service for Prometheus 工作区。如果其中一些实例记录并发送相同的指标，则您的数据将具有更高的可用性（即使其中一个代理停止发送数据，Amazon Managed Service for Prometheus 工作区仍将接收来自另一个实例的数据）。但是，您希望 Amazon Managed Service for Prometheus 工作区自动删除重复的指标，这样您就不会多次看到这些指标，也不会多次对数据摄取和存储付费。

要让 Amazon Managed Service for Prometheus 自动删除来自多个 Prometheus 代理的重复数据，您需要为发送重复数据的代理组指定一个*集群名称*，并为每个实例指定一个*副本名称*。集群名称将实例标识为具有共享数据，副本名称允许 Amazon Managed Service for Prometheus 识别每个指标的来源。最终存储的指标包括集群标签，但不包括副本，因此这些指标似乎来自单一来源。

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

以下主题介绍如何发送数据以及如何包含 `cluster` 和 `__replica__` 标签，以便 Amazon Managed Service for Prometheus 自动删除重复数据。

**重要**  
如果您未设置重复数据删除，则需要为发送到 Amazon Managed Service for Prometheus 的所有数据样本付费。这些数据样本包括重复的样本。

# 使用 Prometheus 将高可用性数据发送到 Amazon Managed Service for Prometheus
<a name="Send-high-availability-data"></a>

要使用 Prometheus 设置高可用性配置，您必须在高可用性组的所有实例上应用外部标签，以便 Amazon Managed Service for Prometheus 可以进行识别。使用 `cluster` 标签将 Prometheus 实例代理标识为高可用性组的一部分。使用 `__replica__` 标签分别标识组中的每个副本。要使重复数据删除功能起作用，您需要同时应用 `__replica__` 和 `cluster` 标签。

**注意**  
`__replica__` 标签的格式为在单词 `replica` 前后使用两个下划线符号。

**示例：代码片段**

在以下代码片段中，`cluster` 标签标识 Prometheus 实例代理 `prom-team1`，`_replica_` 标签标识副本 `replica1` 和 `replica2`。

```
cluster: prom-team1
__replica__: replica1
```

```
cluster: prom-team1
__replica__: replica2
```

由于 Amazon Managed Service for Prometheus 存储带有这些标签的高可用性副本的数据样本，因此当样本被接受时，它会删除 `replica` 标签。这意味着您当前的序列只有 1:1 的序列映射，而不是每个副本一个序列。保留了 `cluster` 标签。

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

# 使用 Prometheus Operator Helm 图表为 Amazon Managed Service for Prometheus 设置高可用性数据
<a name="Send-high-availability-data-operator"></a>

要使用 Helm 中的 Prometheus Operator 设置高可用性配置，必须在高可用性组的所有实例上应用外部标签，以便 Amazon Managed Service for Prometheus 可以识别它们。您还必须在 Prometheus Operator Helm 图表上设置 `replicaExternalLabelName` 和 `externalLabels` 属性。

**示例：YAML 标头**

在以下 YAML 标头中，在 `externalLabel` 中添加了 `cluster` 以将 Prometheus 实例代理标识为高可用性组的一部分，并且 `replicaExternalLabels` 标识该组中的每个副本。

```
replicaExternalLabelName: __replica__
externalLabels:
cluster: prom-dev
```

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

# 使用 Distro 向适用于 Prometheus 的亚马逊托管服务发送高可用性数据 AWS OpenTelemetry
<a name="Send-high-availability-data-ADOT"></a>

AWS Distro for OpenTelemetry (ADOT) 是该项目的安全且可用于生产的发行版。 OpenTelemetry ADOT 为您提供源代码 APIs、库和代理，因此您可以收集分布式跟踪和指标以进行应用程序监控。有关 ADOT 的信息，请参阅[关于 Open Tel AWS emetry 发行版。](https://aws-otel.github.io/about)

要将 ADOT 设置为高可用性配置，必须配置 ADOT 收集器容器镜像，并将外部标签`cluster`应用于 Prometheus `__replica__` AWS 远程写入导出器。此导出器通过 `remote_write` 终端节点将您抓取的指标发送到 Amazon Managed Service for Prometheus 工作区。在 Remote Write Exporter 上设置这些标签时，可以防止在冗余副本运行时保留重复的指标。有关 AWS Prometheus 远程写入导出器的更多信息，请参阅适用于 Prometheus 的亚马逊 Prometheus 托管服务的 [Prometheus 远程写入导出器入门](https://aws-otel.github.io/docs/getting-started/prometheus-remote-write-exporter)。

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

# 使用 Prometheus 社区 Helm 图表向 Amazon Managed Service for Prometheus 发送高可用性数据
<a name="Send-high-availability-prom-community"></a>

要使用 Prometheus 社区 Helm 图表设置高可用性配置，您必须在高可用性组的所有实例上应用外部标签，以便 Amazon Managed Service for Prometheus 可以进行识别。以下是如何将 `external_labels` 从 Prometheus 社区 Helm 图表中添加到 Prometheus 的单个实例的示例。

```
server:
global:
  external_labels:
      cluster: monitoring-cluster
      __replica__: replica-1
```

**注意**  
如果您想要多个副本，则必须使用不同的副本值多次部署图表，因为 Prometheus 社区 Helm 图表不允许您在直接从控制器组增加副本数量时动态设置副本值。如果您更偏好自动设置 `replica` 标签，请使用 prometheus-operator Helm 图表。

**注意**  
某些版本的 Kubernetes（1.28 和 1.29）可能会自行发布带有 `cluster` 标签的指标。这会导致 Amazon Managed Service for Prometheus 重复数据删除功能出现问题。有关更多信息，请参阅[高可用性 FAQ](HA_FAQ.md#HA_FAQ_cluster-label)。

# 有关 Amazon Managed Service for Prometheus 中高可用性配置常见问题的解答
<a name="HA_FAQ"></a>

## 我是否应该将值 *\$1\$1replica\$1\$1* 包含在另一个标签中以跟踪采样点？
<a name="HA_FAQ_replica-label"></a>

 在高可用性设置中，Amazon Managed Service for Prometheus 通过在 Prometheus 实例集群中选出领导来确保数据样本不会重复。如果领导副本在 30 秒内停止发送数据样本，则 Amazon Managed Service for Prometheus 会自动将另一个 Prometheus 实例设置为领导副本，并从新领导那里摄取数据，包括任何丢失的数据。因此，答案是否定的，不建议这样做。 这样做可能会导致以下问题：
+  在选择新领导期间，在 **PromQL** 中查询 `count` 返回的值可能会高于预期值。
+  在选择新领导期间，`active series` 数增加了，达到了 `active series limits`。有关更多信息，请参阅 [AMP 配额](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP_quotas.html)。

## Kubernetes 似乎有自己的 *cluster* 标签，而且没有对我的指标进行重复数据删除。如何修复此问题？
<a name="HA_FAQ_cluster-label"></a>

Kubernetes 1.28 中引入了一个带有 `cluster` 标签的新指标 `apiserver_storage_size_bytes`。这会导致 Amazon Managed Service for Prometheus 中的重复数据删除功能出现问题，这取决于 `cluster` 标签。在 Kubernetes 1.3 中，该标签重命名为 `storage-cluster_id`（在 1.28 和 1.29 的后续补丁中也进行了重命名）。如果您的集群发出带有 `cluster` 标签的指标，则 Amazon Managed Service for Prometheus 无法对关联的时间序列进行重复数据删除。我们建议您将 Kubernetes 集群升级到最新的补丁版本，以避免出现此问题。或者，您也可以在 `apiserver_storage_size_bytes` 指标上重新标记 `cluster` 标签，然后再将其摄取到 Amazon Managed Service for Prometheus。

**注意**  
*有关 Kubernetes 变更的更多详细信息，请参阅 Kubernetes 项目中的 apiserver\$1storage\$1size\$1bytes 指标[将标签集群重命名为 storage\$1cluster\$1](https://github.com/kubernetes/kubernetes/pull/124283) id。 GitHub*

# 利用跨区域工作区在 Amazon Managed Service for Prometheus 中增加高可用性
<a name="AMP-send-to-multiple-workspaces"></a>

要为您的数据添加跨区域可用性，您可以将指标发送到跨 AWS 区域的多个工作空间。Prometheus 支持多个写入器和跨区域写入。

以下示例说明如何设置在代理模式下运行的 Prometheus 服务器，以便使用 Helm 将指标发送到不同区域的两个工作区。

```
extensions:
      sigv4auth:
        service: "aps"
     
    receivers:
      prometheus:
        config:
          scrape_configs:
            - job_name: 'kubernetes-kubelet'
              scheme: https
              tls_config:
                ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
                insecure_skip_verify: true
              bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
              kubernetes_sd_configs:
              - role: node
              relabel_configs:
              - action: labelmap
                regex: __meta_kubernetes_node_label_(.+)
              - target_label: __address__
                replacement: kubernetes.default.svc.cluster.local:443
              - source_labels: [__meta_kubernetes_node_name]
                regex: (.+)
                target_label: __metrics_path__
                replacement: /api/v1/nodes/$${1}/proxy/metrics
     
    exporters:
      prometheusremotewrite/one:
        endpoint: "https://aps-workspaces.workspace_1_region.amazonaws.com/workspaces/ws-workspace_1_id/api/v1/remote_write"
        auth:
          authenticator: sigv4auth
      prometheusremotewrite/two:
        endpoint: "https://aps-workspaces.workspace_2_region.amazonaws.com/workspaces/ws-workspace_2_id/api/v1/remote_write"
        auth:
          authenticator: sigv4auth
     
    service:
      extensions: [sigv4auth]
      pipelines:
        metrics/one:
          receivers: [prometheus]
          exporters: [prometheusremotewrite/one]
        metrics/two:
          receivers: [prometheus]
          exporters: [prometheusremotewrite/two]
```