

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

# 使用 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. 跟踪导出失败情况，以确保指标成功发送到工作区。