View a markdown version of this page

集成 Amazon MSK - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

集成 Amazon MSK

借助 Amazon CloudWatch 托管式 Prometheus 收集器,您可以自动发现并收集 Amazon MSK 集群中的 Prometheus 指标。在 Amazon MSK 集群上启用开源监控系统时,其会通过 Java 管理扩展(JMX)Exporter 和 Node Exporter 公开 Prometheus 指标。托管式收集器连接到 VPC,并使用基于 DNS 的服务发现从所有代理抓取这些指标,然后将这些指标直接传输至 CloudWatch。借助此集成,无需部署任何代理,即可在 CloudWatch 中监控主机级指标、JVM 级指标以及 Kafka 代理指标。

注意

当 Amazon CloudWatch 托管式 Prometheus 收集器将 Amazon MSK 指标传输至 CloudWatch 时,会自动针对每个指标丰富用于标识其来源的属性。每个指标都包含收集器的检测范围、记录 Amazon 账户和区域的云属性,以及收集器从指标名称推断出的单位。使用 PromQL 查询指标时,可以对这些属性进行筛选和分组。

先决条件

此过程假设您已熟悉 Amazon MSK 集群管理和 Amazon VPC 联网概念。

  • 处于预配置模式的 Amazon MSK 集群,配备标准代理或快速代理。托管式收集器不支持 Amazon MSK 无服务器。

  • 集群上已启用开源监控系统。有关更多信息,请参阅《Amazon MSK 开发人员指南》中的 Prometheus 的开源监控系统。

  • 至少两个子网位于不同的可用区

  • 允许收集器访问代理端口 11001 和 11002 的安全组

步骤 1:启用开源监控系统

在 Amazon MSK 集群上启用开源监控系统,以公开 Prometheus 指标。有关启用开源监控系统的说明,请参阅《Amazon MSK 开发人员指南》中的 Prometheus 的开源监控系统。

aws kafka update-monitoring \ --cluster-arn "arn:aws:kafka:us-west-2:123456789012:cluster/my-cluster/abc123-def456" \ --current-version "K1A2B3C4D5" \ --open-monitoring '{ "Prometheus": { "JmxExporter": {"EnabledInBroker": true}, "NodeExporter": {"EnabledInBroker": true} } }'
注意

仅使用 --open-monitoring 参数即可公开 Prometheus 端口 11001 和 11002 上的端点。增强监控层级(如 PER_TOPIC_PER_PARTITION)与开源监控系统相互独立,可能会产生额外费用,因此请仅在需要该级别的 Amazon MSK 指标时才进行设置。

步骤 2:获取集群的 DNS 名称

Amazon MSK 提供集群级 DNS 名称,该名称可解析所有代理 IP。将此用于服务发现,可使监控系统在代理更换和集群扩展时保持弹性。

获取集群 DNS 名称(删除特定于代理的前缀,例如 b-1. 或 b-2.):

aws kafka get-bootstrap-brokers --cluster-arn "arn:aws:kafka:us-west-2:123456789012:cluster/my-cluster/abc123-def456"

例如,如果引导代理返回 b-1.my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com,则使用 my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com 作为集群 DNS 名称。

步骤 3:配置抓取配置

以下是用于 Amazon MSK 的抓取配置示例。在下一步创建抓取程序时,您将引用此配置。有关 配置选项的更多信息,请参阅 抓取程序配置。

global: scrape_interval: 60s external_labels: cluster_name: my-msk-cluster scrape_configs: - job_name: 'msk-jmx' dns_sd_configs: - names: - my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com type: A port: 11001 relabel_configs: - source_labels: [__meta_dns_name] target_label: broker_dns - source_labels: [__address__] target_label: instance - target_label: compute_platform replacement: 'msk' - job_name: 'msk-node' dns_sd_configs: - names: - my-cluster.abc123.c4.kafka.us-west-2.amazonaws.com type: A port: 11002 relabel_configs: - source_labels: [__meta_dns_name] target_label: broker_dns - source_labels: [__address__] target_label: instance - target_label: compute_platform replacement: 'msk'

步骤 4:创建抓取程序

使用上一步中用于 Amazon MSK 代理的抓取配置,创建具有 CloudWatch 目标的抓取程序。

Amazon API

使用 CreateScraper API 操作,以便创建具有 CloudWatch 目标的抓取程序。将子网、安全组及数据集信息替换为您自己的值。

POST /scrapers HTTP/1.1 { "alias": "msk-metrics-scraper", "source": { "vpcConfiguration": { "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"], "securityGroupIds": ["sg-security-group-id"] } }, "destination": { "cloudWatchConfiguration": { "datasetArn": "arn:aws:cloudwatch:us-west-2:123456789012:dataset/default" } }, "scrapeConfiguration": { "configurationBlob": "base64-encoded-blob" } }
Amazon CLI

使用 create-scraper 命令,以便创建具有 CloudWatch 目标的抓取程序。将子网、安全组及数据集信息替换为您自己的值。

aws amp create-scraper \ --alias "msk-metrics-scraper" \ --source '{ "vpcConfiguration": { "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"], "securityGroupIds": ["sg-security-group-id"] } }' \ --scrape-configuration configurationBlob=$(cat msk-config.yaml | base64 -w 0) \ --destination '{ "cloudWatchConfiguration": { "datasetArn": "arn:aws:cloudwatch:us-west-2:123456789012:dataset/default" } }'

可用指标

  • JMX Exporter(端口 11001):Kafka 代理内部信息,包括主题指标、分区指标、请求速率、消费者延迟以及未完全复制分区。

  • Node Exporter(端口 11002):主机级指标,包括 CPU、内存、磁盘 I/O 和网络吞吐量。

有关可用指标的完整列表,请参阅《Amazon Managed Service for Prometheus 用户指南》中的托管式收集器收集的 MSK 指标。

验证指标收集

要确认收集器同时传输 JMX 和 Node Exporter 指标,需在 CloudWatch 中使用 Query Studio 运行以下查询。如果每个查询都返回数据点,则收集器已成功抓取相应的导出程序。

以下查询从 JMX Exporter(端口 11001)返回代理级 Kafka 指标。其报告代理主题活动的平均速率,例如流经代理的消息数和字节数。数据点确认收集器正在抓取 Kafka 代理指标。

kafka_server_BrokerTopicMetrics_MeanRate

以下查询从 Node Exporter(端口 11002)返回主机级 CPU 使用率。其用 100 减去五分钟时段内的平均空闲 CPU 速率,从而得出代理正在使用的 CPU 百分比。数据点确认收集器正在抓取主机级指标。

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

查看自动控制面板

在收集器开始将 Amazon MSK 指标传输至 CloudWatch 之后,CloudWatch 控制台会提供名为 MSK OTel 的自动控制面板。要将其打开,请访问 MSK OTel,或登录 Amazon 管理控制台,打开 CloudWatch 控制台,在导航窗格中选择控制面板,接着选择自动控制面板,然后选择 MSK OTel。无需自行构建任何小组件或控制面板,即可开始监控集群。

如果自动控制面板满足您的需求,即可直接使用。要打造量身定制的监控体验,您可以将其中的任何小组件添加到自定义控制面板中。有关自定义控制面板的更多信息,请参阅使用 CloudWatch 控制面板。

跨账户可观测性

对于跨账户 Amazon MSK 监控,建议使用 Amazon CloudWatch 指标集中化。有关更多信息,请参阅 CloudWatch 指标集中化。

有关使用角色链接的其他跨账户抓取程序配置,请参阅《Amazon Managed Service for Prometheus 用户指南》中的跨账户 Amazon MSK 集成。

目前的局限性

  • 托管式收集器不支持 Amazon MSK 无服务器集群。

  • 托管式收集器不支持公有访问和 KRaft 元数据模式。

  • 每个 Amazon MSK 集群和 CloudWatch 数据集组合都需要一个收集器。