如何使用Prometheus监控Kafka

本文介绍如何使用Prometheus监控阿里云kafka及自建Kafka。

自建Prometheus观测Kafka的痛点

使用自建Prometheus观测Kafka,可能面临的典型问题有以下几点:

  1. 由于安全、组织管理等因素,您的业务通常部署在多个相互隔离的VPC,因此这需要您在多个VPC内都重复、独立部署Prometheus,导致部署和运维成本较高。

  2. 每套完整的自建监控系统都需要安装并配置Prometheus、Grafana、AlertManager等,其过程复杂、实施周期长。

  3. 开源Kafka JMX Agent在某些场景下占用CPU高,对自建Kafka业务有一定干扰。

  4. 对于阿里云消息队列Kafka(简称阿里云Kafka),自建Prometheus无法监控到,导致无法实现一站式、全局视角的监控建设。

  5. 对于部署在ECS上的自建Kafka,自建Prometheus缺少与阿里云ECS快速集成的服务发现(ServiceDiscovery)机制,因此无法根据ECS标签来灵活定义抓取Targets。如果自行实现类似功能,则需要您使用Golang语言开发代码调用阿里云ECS POP接口,以集成开源Prometheus代码,然后通过编译打包后部署,这种方式实现门槛高、过程复杂、且版本升级困难。

  6. 常用开源Grafana大盘无法结合Kafka的原理与最佳实践进行深入定制。

  7. 缺少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实例监控大盘

  1. 登录云消息队列 Kafka 版控制台,在左侧导航栏,单击实例列表

  2. 单击目标实例名称,在左侧导航栏单击Prometheus监控,可查看阿里云Kafka实例监控大盘。

    ej

阿里云Kafka消费组监控大盘

  1. 登录云消息队列 Kafka 版控制台,在左侧导航栏,单击实例列表

  2. 单击目标实例名称,在左侧导航栏单击Group管理,然后单击目标Group ID超链接,并单击Prometheus监控页签,可查看阿里云Kafka消费组监控大盘。

    ei

阿里云Kafka Topic监控大盘

  1. 登录云消息队列 Kafka 版控制台,在左侧导航栏,单击实例列表

  2. 单击目标实例名称,在左侧导航栏单击Topic管理,然后单击目标Topic名称超链接,并单击Prometheus监控页签,可查看阿里云Kafka Topic监控大盘。

    dl

使用可观测监控 Prometheus 版配置阿里云Kafka告警

  1. 登录Prometheus控制台

  2. 在左侧导航栏单击实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 单击目标Prometheus实例名称,进入集成中心页面。
  4. 单击已安装区域的消息队列Kafka卡片,并在弹出的面板中单击告警页签,查看阿里云Kafka的Prometheus告警。目前可观测监控 Prometheus 版提供实例、Group和Topic相关的关键告警指标,您还可以根据业务需求新增告警规则。创建Prometheus告警规则的具体操作,请参见Prometheus告警规则

    ft

使用Prometheus监控自建Kafka

除了阿里云Kafka外,可观测监控 Prometheus 版同时提供了自建Kafka的监控接入能力,支持容器服务(包含ACK、ASK、注册集群等)和ECS这两个环境类型的Kafka监控。Kafka监控可以收集Broker数量、Topic分区、消息组Lag等基础指标,同时Kafka服务端无需您进行任何配置或重启操作。

与阿里云Kafka的监控场景不同,自建Kafka时,您不仅需要关注使用Kafka的例行指标外,还需要关注运维Kafka的内部指标。

部署自建Kafka的基础监控

  1. 登录Prometheus控制台

  2. 在左侧导航栏单击接入中心,然后在右侧页面单击Kafka卡片。20240912141821.jpg

  3. 按照界面提示配置接入参数,然后单击确定。下文对主要参数进行说明。

    容器服务环境

    参数

    说明

    Pod 选择标签

    部署JMX Agent时,为Pod配置的标签和标签值,可观测监控 Prometheus 版通过此标签进行服务发现(Service Discovery)。详细信息,请参见如何部署和配置Kafka JMX Agent

    Metric 采集间隔

    监控数据采集时间间隔。

    1.jpg

    ECS(VPC)

    参数

    说明

    Kafka 集群名称

    每次接入需使用不同的集群名称,以防止指标重复采集,导致大盘展示错误。

    服务地址

    填写Kafka Broker的连接地址,可以使用Kafka Broker的IP或DNS地址。多个Broker地址之间使用英文半角逗号或分号来分隔。

    开启 SASL

    选择Kafka服务端是否使用SASL。

    开启 TLS

    选择Kafka服务端是否使用TLS。

    Metric 采集间隔(单位/秒)

    监控数据采集时间间隔。

    2.jpg

查看自建Kafka的基础监控大盘

  1. 登录Prometheus控制台

  2. 在左侧导航栏单击实例列表,进入可观测监控 Prometheus 版的实例列表页面。

  3. 单击目标Prometheus实例名称,进入集成中心页面。
  4. 单击已安装区域的Kafka卡片,在弹出的面板中单击大盘页签,然后单击大盘缩略图,即可查看对应Grafana大盘。

    Kafka监控大盘主要展示以下几点,如下图所示:vr

    • Kafka Broker数量。

    • 每个Topic的分区数。

    • 每个Topic的消息入/出/堆积数量。

    • 每个Topic的ISR(In-Sync Replicas)数量。

配置自建Kafka的基础监控告警

可观测监控 Prometheus 版控制台的集成中心页面单击已安装区域的Kafka卡片,并在弹出的面板中单击告警页签,查看Kafka的Prometheus告警。

可观测监控 Prometheus 版提供4个关键告警指标(有效Broker数量减少(3分钟)、存在Under Replicated分区、分区数量过多、Consumer Topic消息堆积),您还可以根据业务需求新增告警规则。创建Prometheus告警规则的具体操作,请参见Prometheus告警规则3.jpg