View a markdown version of this page

集成 Amazon MSK - Amazon CloudWatch

集成 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 时,会自动针对每个指标丰富用于标识其来源的属性。每个指标都包含收集器的检测范围、记录 AWS 账户和区域的云属性,以及收集器从指标名称推断出的单位。使用 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 目标的抓取程序。

AWS 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" } }
AWS 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,或登录 AWS 管理控制台,打开 CloudWatch 控制台,在导航窗格中选择控制面板,接着选择自动控制面板,然后选择 MSK OTel。无需自行构建任何小组件或控制面板,即可开始监控集群。

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

跨账户可观测性

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

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

目前的局限性

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

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

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