集成 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-clusterscrape_configs: - job_name: 'msk-jmx' dns_sd_configs: - names: -my-cluster---abc123---c4---kafka---us-west-2.amazonaws.com.rproxy.goskope.comtype: 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.rproxy.goskope.comtype: 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 目标的抓取程序。
可用指标
-
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
如果自动控制面板满足您的需求,即可直接使用。要打造量身定制的监控体验,您可以将其中的任何小组件添加到自定义控制面板中。有关自定义控制面板的更多信息,请参阅使用 CloudWatch 控制面板。
跨账户可观测性
对于跨账户 Amazon MSK 监控,建议使用 Amazon CloudWatch 指标集中化。有关更多信息,请参阅 CloudWatch 指标集中化。
有关使用角色链接的其他跨账户抓取程序配置,请参阅《Amazon Managed Service for Prometheus 用户指南》中的跨账户 Amazon MSK 集成。
目前的局限性
-
托管式收集器不支持 Amazon MSK 无服务器集群。
-
托管式收集器不支持公有访问和 KRaft 元数据模式。
-
每个 Amazon MSK 集群和 CloudWatch 数据集组合都需要一个收集器。