为 Amazon MSK 设置托管式 Prometheus 收集器 - Amazon Managed Service for Prometheus

为 Amazon MSK 设置托管式 Prometheus 收集器

要使用 Amazon Managed Service for Prometheus 收集器,您必须创建一个抓取器,用于发现和提取 Amazon Managed Streaming for Apache Kafka 集群中的指标。还可以创建与 Amazon Elastic Kubernetes Service 集成的抓取器。有关更多信息,请参阅集成 Amazon EKS

创建抓取程序

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

注意

集群将通过其 Amazon 资源名称(ARN)与抓取器相关联。如果删除一个集群,然后创建一个同名的新集群,新集群将重新使用 ARN。因此,抓取器将尝试收集新集群的指标。删除抓取器与删除集群是分开的。

To create a scraper using the AWS API

使用 AWS API 通过 CreateScraper API 操作创建抓取程序。以下示例在美国东部(弗吉尼亚州北部)区域中创建抓取器。将示例内容替换为您的 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 记录都代表特定可用区中的一个代理端点,支持客户端连接到分布在您所选可用区之间的代理以实现高可用性。

MSK 集群属性中的 DNS 记录数量与集群配置中代理节点和可用区的数量相对应:

  • 默认配置:3 个可用区中的 3 个代理节点 = 3 个 DNS 记录

  • 自定义配置:2 个可用区中的 2 个代理节点 = 2 个 DNS 记录

要获取 MSK 集群的 DNS 记录,请打开 MSK 控制台:https://console.aws.amazon.com/msk/home?region=us-east-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 控制台中的实际 MSK 集群端点替换 clusterName.xxx.xxx.xxx

有关更多信息,请参阅 Prometheus 文档中的 <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 转换器来转换文件。

例 Linux/macOS
echo -n scraper config updated with dns records | base64
例 Windows 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 命令创建抓取器。以下示例在美国东部(弗吉尼亚州北部)区域中创建抓取器。将示例内容替换为您的 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 API 操作创建抓取器。

  • 使用 ListScrapers API 操作列出现有的抓取器。

  • 使用 UpdateScraper API 操作更新抓取器的别名、配置或目标。

  • 使用 DeleteScraper API 操作删除抓取器。

  • 使用 DescribeScraper API 操作获取有关抓取器的更多详细信息。

跨账户设置

要在跨账户设置中创建抓取器,而您要从中收集指标的 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" } } }
  2. 在源(Amazon MSK 集群)和目标(Amazon Managed Service for Prometheus 工作区)的每种组合上,您需要创建角色 arn:aws:iam::444455556666:role/Target,并添加以下具有 AmazonPrometheusRemoteWriteAccess 的权限的信任策略。

    { "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" } } }
  3. 使用 --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"}'
  4. 验证抓取器创建。

    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 和服务相关角色之间切换

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

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

查找和删除抓取程序

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

注意

确保您使用的是最新版本的 AWS CLI 或 SDK。最新版本为您提供最新的特征和功能,以及安全更新。或者使用 AWS CloudShell,它能自动提供始终最新的命令行体验。

要列出您账户中的所有抓取器,请使用 ListScrapers 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 操作将其删除。

或者,通过 AWS CLI 调用:

aws amp delete-scraper --scraper-id scraperId

从 Amazon MSK 收集的指标

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

指标 描述/用途

jmx_config_reload_failure_total

JMX 导出程序未能重新加载其配置文件的总次数。

jmx_scrape_duration_seconds

在当前收集周期内抓取 JMX 指标所花费的时间(以秒为单位)。

jmx_scrape_error

指示在 JMX 指标抓取期间是否出现错误(1 = 错误,0 = 成功)。

java_lang_Memory_HeapMemoryUsage_used

JVM 当前使用的堆内存量(以字节为单位)。

java_lang_Memory_HeapMemoryUsage_max

可用于内存管理的最大堆内存量(以字节为单位)。

java_lang_Memory_NonHeapMemoryUsage_used

JVM 当前使用的非堆内存量(以字节为单位)。

kafka_cluster_Partition_Value

与 Kafka 集群分区相关的当前状态或值,按分区 ID 和主题细分。

kafka_consumer_consumer_coordinator_metrics_assigned_partitions

当前分配给该使用者的分区数。

kafka_consumer_consumer_coordinator_metrics_commit_latency_avg

提交偏移量所花费的平均时间(以毫秒为单位)。

kafka_consumer_consumer_coordinator_metrics_commit_rate

每秒的偏移量提交次数。

kafka_consumer_consumer_coordinator_metrics_failed_rebalance_total

失败的使用者组重新平衡总数。

kafka_consumer_consumer_coordinator_metrics_last_heartbeat_seconds_ago

自上次向协调器发送心跳以来的秒数。

kafka_consumer_consumer_coordinator_metrics_rebalance_latency_avg

使用者组重新平衡所花费的平均时间(以毫秒为单位)。

kafka_consumer_consumer_coordinator_metrics_rebalance_total

使用者组重新平衡总数。

kafka_consumer_consumer_fetch_manager_metrics_bytes_consumed_rate

使用者每秒使用的平均字节数。

kafka_consumer_consumer_fetch_manager_metrics_fetch_latency_avg

提取请求所花费的平均时间(以毫秒为单位)。

kafka_consumer_consumer_fetch_manager_metrics_fetch_rate

每秒的提取请求数。

kafka_consumer_consumer_fetch_manager_metrics_records_consumed_rate

每秒使用的平均记录数。

kafka_consumer_consumer_fetch_manager_metrics_records_lag_max

最大滞后,以该使用者中的任何分区的记录数表示。

kafka_consumer_consumer_metrics_connection_count

当前活动的连接数。

kafka_consumer_consumer_metrics_incoming_byte_rate

每秒从所有服务器接收的平均字节数。

kafka_consumer_consumer_metrics_last_poll_seconds_ago

自上次使用者 poll() 调用以来的秒数。

kafka_consumer_consumer_metrics_request_rate

每秒发送的请求数。

kafka_consumer_consumer_metrics_response_rate

每秒接收的响应数。

kafka_consumer_group_ConsumerLagMetrics_Value

使用者组的当前使用者滞后值,表示使用者落后的程度。

kafka_controller_KafkaController_Value

Kafka 控制器的当前状态或值(1 = 活动控制器,0 = 不活动)。

kafka_controller_ControllerEventManager_Count

已处理的控制器事件总数。

kafka_controller_ControllerEventManager_Mean

处理控制器事件所花费的平均时间。

kafka_controller_ControllerStats_MeanRate

每秒控制器统计操作的平均速率。

kafka_coordinator_group_GroupMetadataManager_Value

使用者组的组元数据管理器的当前状态或值。

kafka_log_LogFlushStats_Count

日志刷新操作总数。

kafka_log_LogFlushStats_Mean

日志刷新操作所花费的平均时间。

kafka_log_LogFlushStats_MeanRate

每秒日志刷新操作的平均速率。

kafka_network_RequestMetrics_Count

已处理的网络请求总数。

kafka_network_RequestMetrics_Mean

处理网络请求所花费的平均时间。

kafka_network_RequestMetrics_MeanRate

每秒网络请求的平均速率。

kafka_network_Acceptor_MeanRate

每秒接受的连接的平均速率。

kafka_server_Fetch_queue_size

提取请求队列的当前大小。

kafka_server_Produce_queue_size

生产请求队列的当前大小。

kafka_server_Request_queue_size

常规请求队列的当前大小。

kafka_server_BrokerTopicMetrics_Count

代理主题操作(消息输入/输出、字节输入/输出)的总数。

kafka_server_BrokerTopicMetrics_MeanRate

每秒代理主题操作的平均速率。

kafka_server_BrokerTopicMetrics_OneMinuteRate

代理主题操作的一分钟移动平均速率。

kafka_server_DelayedOperationPurgatory_Value

处于等待状态(等待完成)的延迟操作的当前数量。

kafka_server_DelayedFetchMetrics_MeanRate

每秒延迟提取操作的平均速率。

kafka_server_FetcherLagMetrics_Value

副本提取器线程的当前滞后值(落后于领导线程的程度)。

kafka_server_FetcherStats_MeanRate

每秒提取器操作的平均速率。

kafka_server_ReplicaManager_Value

副本管理器的当前状态或值。

kafka_server_ReplicaManager_MeanRate

每秒副本管理器操作的平均速率。

kafka_server_LeaderReplication_byte_rate

对于此代理作为领导者的分区,每秒复制的字节速率。

kafka_server_group_coordinator_metrics_group_completed_rebalance_count

完成的使用者组重新平衡的总数。

kafka_server_group_coordinator_metrics_offset_commit_count

偏移量提交操作的总数。

kafka_server_group_coordinator_metrics_offset_commit_rate

每秒偏移量提交操作的速率。

kafka_server_socket_server_metrics_connection_count

当前活动的连接数。

kafka_server_socket_server_metrics_connection_creation_rate

每秒新建连接的速率。

kafka_server_socket_server_metrics_connection_close_rate

每秒连接关闭的速率。

kafka_server_socket_server_metrics_failed_authentication_total

失败的身份验证尝试总数。

kafka_server_socket_server_metrics_incoming_byte_rate

每秒传入字节数。

kafka_server_socket_server_metrics_outgoing_byte_rate

每秒传出字节数。

kafka_server_socket_server_metrics_request_rate

每秒请求速率。

kafka_server_socket_server_metrics_response_rate

每秒响应速率。

kafka_server_socket_server_metrics_network_io_rate

每秒网络 I/O 操作速率。

kafka_server_socket_server_metrics_io_ratio

在 I/O 操作上花费的时间的比例。

kafka_server_controller_channel_metrics_connection_count

控制器通道的当前活动连接数。

kafka_server_controller_channel_metrics_incoming_byte_rate

控制器通道每秒传入字节的速率。

kafka_server_controller_channel_metrics_outgoing_byte_rate

控制器通道每秒传出字节的速率。

kafka_server_controller_channel_metrics_request_rate

控制器通道每秒的请求速率。

kafka_server_replica_fetcher_metrics_connection_count

副本提取器的当前活动连接数。

kafka_server_replica_fetcher_metrics_incoming_byte_rate

副本提取器的每秒传入字节的速率。

kafka_server_replica_fetcher_metrics_request_rate

副本提取器的每秒请求速率。

kafka_server_replica_fetcher_metrics_failed_authentication_total

副本提取器的失败的身份验证尝试总数。

kafka_server_ZooKeeperClientMetrics_Count

ZooKeeper 客户端操作总数。

kafka_server_ZooKeeperClientMetrics_Mean

ZooKeeper 客户端操作的平均延迟。

kafka_server_KafkaServer_Value

Kafka 服务器的当前状态或值(通常表示服务器正在运行)。

node_cpu_seconds_total

CPU 在每种模式(用户、系统、空闲等)下花费的总秒数,按 CPU 和模式细分。

node_disk_read_bytes_total

成功从磁盘读取的总字节数,按设备细分。

node_disk_reads_completed_total

成功完成的磁盘读取总数,按设备细分。

node_disk_writes_completed_total

成功完成的磁盘写入总数,按设备细分。

node_disk_written_bytes_total

成功写入磁盘的总字节数,按设备细分。

node_filesystem_avail_bytes

非根用户的可用文件系统空间(以字节为单位),按设备和挂载点细分。

node_filesystem_size_bytes

文件系统的总大小(以字节为单位),按设备和挂载点细分。

node_filesystem_free_bytes

可用文件系统空间(以字节为单位),按设备和装载点细分。

node_filesystem_files

文件系统上的文件节点(inode)总数,按设备和挂载点细分。

node_filesystem_files_free

文件系统上空闲文件节点(inode)的数量,按设备和挂载点细分。

node_filesystem_readonly

表示文件系统是否以只读方式挂载(1 = 只读,0 = 读写)。

node_filesystem_device_error

表示在获取文件系统统计信息时是否出现错误(1 = 错误,0 = 成功)。

限制

当前 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 映射