

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

# 为 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 秒。