如何使用Prometheus监控Kafka
本文介绍如何使用Prometheus监控阿里云kafka及自建Kafka。
自建Prometheus观测Kafka的痛点
使用自建Prometheus观测Kafka,可能面临的典型问题有以下几点:
由于安全、组织管理等因素,您的业务通常部署在多个相互隔离的VPC,因此这需要您在多个VPC内都重复、独立部署Prometheus,导致部署和运维成本较高。
每套完整的自建监控系统都需要安装并配置Prometheus、Grafana、AlertManager等,其过程复杂、实施周期长。
开源Kafka JMX Agent在某些场景下占用CPU高,对自建Kafka业务有一定干扰。
对于阿里云消息队列Kafka(简称阿里云Kafka),自建Prometheus无法监控到,导致无法实现一站式、全局视角的监控建设。
对于部署在ECS上的自建Kafka,自建Prometheus缺少与阿里云ECS快速集成的服务发现(ServiceDiscovery)机制,因此无法根据ECS标签来灵活定义抓取Targets。如果自行实现类似功能,则需要您使用Golang语言开发代码调用阿里云ECS POP接口,以集成开源Prometheus代码,然后通过编译打包后部署,这种方式实现门槛高、过程复杂、且版本升级困难。
常用开源Grafana大盘无法结合Kafka的原理与最佳实践进行深入定制。
缺少Kafka告警项模板,需要您自行配置告警规则,导致消耗的工作量较大,且技术实现困难。
自建Prometheus与可观测监控 Prometheus 版对比
Kafka监控场景下,自建Prometheus与可观测监控 Prometheus 版的详细对比如下:
对比项 | 自建Prometheus | 可观测监控 Prometheus 版 |
部署、维护成本 | 多个VPC内,需要您自购ECS部署Prometheus、Grafana、AlertManager,运维成本高。 | 可观测监控 Prometheus 版、Grafana及告警中心的一体化、全托管、免运维、开箱即用。 |
可用性、性能、数据容量 | 高可用能力不足、性能低、数据容量规模小。 | 高可用、高性能、大数据容量。 |
Exporter性能 | 开源Kafka JMX Agent在某些场景下占用CPU高,对Kafka业务有一定干扰。 | 可观测监控 Prometheus 版持续对Kafka JMX Agent进行性能优化,增强其性能和稳定性。 |
服务发现 | ECS环境下,通过开源Static_Configs、三方注册中心等方式采集服务发现,使用不便,且维护成本高 | 除兼容开源SD外,还内置了aliyun_sd_configs,方便您使用ECS标签进行目标ECS匹配,达到与Kubernetes场景的LabelSelector一致体验,极大简化服务发现的配置和维护复杂度。 |
Grafana大盘 | 开源Grafana Kafka大盘通常较单一,大多只是直接展示采集的Metric,缺少结合Kafka原理和最佳实践进行深入优化。 | 提供Kafka专业大盘模板,方便您快速、精准掌握Kafka全链路运行情况,并定位排查问题 |
告警规则 | 缺少Kafka告警指标模板,需要用户自行研究、配置告警规则。 | 根据Kafka监控实践,提供专业、灵活的告警指标模板,您可以白屏化配置各告警规则。 |
一站式、全局视角 | 由于可能存在多套Prometheus,而且自建Prometheus无法监控到阿里云Kafka,因此无法实现一站式、全局视角的监控体系。 | 全托管的可观测监控 Prometheus 版,同时阿里云Kafka默认集成了可观测监控 Prometheus 版,天然实现了一站式、全局视角的监控体系。 |
使用Prometheus监控阿里云Kafka
阿里云Kafka目前已默认集成了可观测监控 Prometheus 版,主要监控的指标有:
实例、Group、Topic各级的流量指标。
Group和Topic的消息堆积指标。
实例磁盘使用率指标。
Group的Rebalance指标。
查看阿里云Kafka监控大盘
阿里云Kafka提供了实例、Group和Topic三个监控大盘。通过这三个大盘,您可以及时清晰地掌握Kafka消息的生产和消费情况,并快速定位使用阿里云Kafka过程中遇到的问题。
阿里云Kafka实例监控大盘
登录云消息队列 Kafka 版控制台,在左侧导航栏,单击实例列表。
单击目标实例名称,在左侧导航栏单击Prometheus监控,可查看阿里云Kafka实例监控大盘。
阿里云Kafka消费组监控大盘
登录云消息队列 Kafka 版控制台,在左侧导航栏,单击实例列表。
单击目标实例名称,在左侧导航栏单击Group管理,然后单击目标Group ID超链接,并单击Prometheus监控页签,可查看阿里云Kafka消费组监控大盘。
阿里云Kafka Topic监控大盘
登录云消息队列 Kafka 版控制台,在左侧导航栏,单击实例列表。
单击目标实例名称,在左侧导航栏单击Topic管理,然后单击目标Topic名称超链接,并单击Prometheus监控页签,可查看阿里云Kafka Topic监控大盘。
使用可观测监控 Prometheus 版配置阿里云Kafka告警
- 登录ARMS控制台。
- 在左侧导航栏选择 ,进入可观测监控 Prometheus 版的实例列表页面。
- 单击目标Prometheus实例名称,进入集成中心页面。
单击已安装区域的消息队列Kafka卡片,并在弹出的面板中单击告警页签,查看阿里云Kafka的Prometheus告警。目前可观测监控 Prometheus 版提供实例、Group和Topic相关的关键告警指标,您还可以根据业务需求新增告警规则。创建Prometheus告警规则的具体操作,请参见Prometheus告警规则。
使用Prometheus监控自建Kafka
除了阿里云Kafka外,可观测监控 Prometheus 版同时提供了自建Kafka的监控接入能力,支持容器服务(包含ACK、ASK、注册集群等)和ECS这两个环境类型的Kafka监控,且提供基础和高级两个版本:
Kafka(基础版):包括收集Broker数量、Topic分区、消息组Lag等基础指标,Kafka服务端无需您进行任何配置或重启操作。
Kafka(高级版):除基础版能力外,通过JMX Agent,可收集生产者、服务端、消费者及其内部各模块的重要指标,实现全链路、一体化的专家级Kafka监控,需要您手动进行JMX Agent注入和进程重启操作。
与阿里云Kafka的监控场景不同,自建Kafka时,您不仅需要关注使用Kafka的例行指标外,还需要关注运维Kafka的内部指标。因此需要深入抓取Kafka 生产者、服务端、消费者及其内部各模块的重要指标,以便分析和排查Kafka本身各环节的可能问题,这里推荐您使用高级版,以便全面掌握自建Kafka的运行状态。
使用Prometheus监控自建Kafka(基础版)
部署自建Kafka的基础监控
登录ARMS控制台。
在左侧导航栏单击接入中心,然后在组件应用区域单击Kafka(基础版)卡片的添加,然后在弹出的页面按照如下步骤完成接入。
在STEP1区域选择Kafka所部署的环境。
在STEP2区域选择Kafka所在的Prometheus实例。
在STEP3区域的配置页签配置相关参数,然后单击确定。
参数
说明
Exporter名称
当前Kafka监控唯一命名。
kafka地址
填写Kafka Broker的连接地址。多个Broker地址之间使用半角逗号或分号来分隔。
容器服务内,则可以使用Kafka Broker的IP或Service地址。
ECS环境内,则可以使用Kafka Broker的IP或DNS地址。
metrics采集间隔(秒)
监控数据采集时间间隔。
kafka版本
选择Kafka服务端的版本号,目前最高支持v3.2.0版本。
开启SASL
选择Kafka服务端是否使用SASL。
SASL用户名
如果开启SASL,则需要填写对应的用户名。
SASL密码
如果开启SASL,则需要填写对应的用户名密码。
SASL方法
选择SASL方法,目前支持plain、scram-sha512和scram-sha256。
开启TLS
选择Kafka服务端是否使用TLS。
忽略TLS安全校验
如果Kafka服务端开启TLS,且是自签名证书,则选择忽略TLS安全校验。
查看自建Kafka的基础监控大盘
- 登录ARMS控制台。
- 在左侧导航栏选择 ,进入可观测监控 Prometheus 版的实例列表页面。
- 单击目标Prometheus实例名称,进入集成中心页面。
单击已安装区域的Kafka(基础版)卡片,并在弹出的面板中单击大盘页签,然后单击大盘缩略图,即可查看对应Grafana大盘。
Kafka基础版监控大盘主要展示以下几点,如下图所示:
Kafka Broker数量。
每个Topic的分区数。
每个Topic的消息入/出/堆积数量。
每个Topic的ISR(In-Sync Replicas)数量。
配置自建Kafka的基础监控告警
在可观测监控 Prometheus 版控制台的集成中心页面单击已安装区域的Kafka(基础版)卡片,并在弹出的面板中单击告警页签,查看Kafka(基础版)的Prometheus告警。如下图所示,可以看到目前可观测监控 Prometheus 版提供4个关键告警指标,您还可以根据业务需求新增告警规则。创建Prometheus告警规则的具体操作,请参见Prometheus告警规则。
使用Prometheus监控自建Kafka(高级版)
部署自建Kafka的高级监控
登录ARMS控制台。
在左侧导航栏单击接入中心,然后在组件应用区域单击Kafka(高级版)卡片的添加,然后在弹出的页面按照如下步骤完成接入。
在STEP1区域选择Kafka所部署的环境。
在STEP2区域选择Kafka所在的Prometheus实例。
在STEP3区域的配置页签配置相关参数,然后单击确定。
参数
说明
exporter名称
当前Kafka监控唯一命名。
kafka实例名称
Kafka实例名称,通过该名称可以将Kafka Producer、Broker和Consumer进行关联,实现Topic全链路的大盘展示。
JMX Agent监听端口
部署JMX Agent时配置的监听端口。
metrics采集路径
可观测监控 Prometheus 版采集JMX Agent的HTTP Path,默认是
/metrics
。metrics采集间隔(秒)
监控数据采集时间间隔。
Pod/ECS标签
部署JMX Agent时,为Pod/ECS配置的标签和标签值,可观测监控 Prometheus 版通过此标签进行服务发现(Service Discovery)。
Pod/ECS标签值
查看自建Kafka的基础监控大盘
- 登录ARMS控制台。
- 在左侧导航栏选择 ,进入可观测监控 Prometheus 版的实例列表页面。
- 单击目标Prometheus实例名称,进入集成中心页面。
单击已安装区域的Kafka(高级版)卡片,并在弹出的面板中单击大盘页签,然后单击大盘缩略图,即可查看对应Grafana大盘。高级版监控提供了Intance和Topic两个视角的大盘,具体详情如下:
自建Kafka Instance大盘
展示Kafka Broker内部各项指标:
核心指标:展示Broker数量、OffLine分区数、Under Replicated分区数、Controller数量、CPU及网络等关键信息。
JVM指标:展示JVM的内存和GC关键信息。
分区指标:展示分区数量、ISR、Unclean Leader选举、Replica Lag、Offline分区、Under Replicated分区等明细信息。
时间指标:展示Produce、Request、Fetch等各个环境的时间指标。
集群流量指标:展示集群的总体流量指标。
Broker流量指标:展示Broker粒度的流量明细指标。
自建Kafka Topic大盘
展示各个Kafka Topic全链路指标:
Producer:展示Producer端的关键指标,包括消息发送速度、消息压缩率、发送延迟等。
Server(即Kafka Broker):展示该Topic对应的分区数、入/出消息速率、入/出消息流量。
Consumer:展示消息消费速率、消费延迟和Rebalance等。
配置自建Kafka的高级监控告警
在可观测监控 Prometheus 版控制台的集成中心页面单击已安装区域的Kafka(高级版)卡片,并在弹出的面板中单击告警页签,查看Kafka(高级版)的Prometheus告警。如下图所示,可以看到目前可观测监控 Prometheus 版提供Producer、Instance和Consumer相关的告警指标,具体如下。
自建Kafka Producer:提供了消息发送失败率、消息发送耗时、消息发送重试率等3个告警指标,方便用户对Producer端的异常进行告警。
自建Kafka Instance:提供了分区数量过多、存在OffLine分区、存在UnClean Leader选举、存在Under Replicated分区、有效Broker数量减少、有效Controller数量、实例消息拒绝量、实例消息流入/出量、Topic消息流入/出量等13个告警指标,覆盖了Kafka Broker各方面异常。
自建Kafka Consumer:提供了消息消费堆积告警指标,通过该告警规则,您能够及时掌握消费异常情况。

您还可以根据业务需求新增告警规则。创建Prometheus告警规则的具体操作,请参见Prometheus告警规则。