如何使用 Prometheus 监控 Kafka

最近把 Kafka 的监控迁移到了 Prometheus, 顺便思考了一下监控系统 Dashboard 的构建原则. 记录一下.

0x00 Kafka metrics 初探

Kafka 使用的是"民间标准"的 metrics library, 通过定制化的 reporter 在 server.properties 中配置 参见 Kafka 关于 metrics 源码. 默认情况下, Kafka metrics 所有的 metric 都可以通过 JMX 获取.

如果想把 Kafka 中的 metrics 数据暴露出来, 就有如下几个选择:

  • 直接实现 kafka.metrics.KafkaMetricsReporter 这个 trait, 通过解析 Metrics.defaultRegistry() 里面所有的 metrics 暴露出来.
  • 通过 JMX, 获取 metrics-core library 通过 JMX 暴露的数据来读取数据. 读取 JMX 又有两种方式:
    • 在 Kafka Broker 进程内部读取 JMX 数据, 这样解析数据的逻辑就在 Kafka Broker 进程内部, 如果有任何调整, 需要重启 Broker
    • 在 Kafka Broker 外部, 作为一个独立进程, 通过 JMX 的 RMI 接口读取数据. 这种方式的好处是有任何调整不需要重启 Kafka Broker 进程, 缺点是多维护了一个独立的进程
读取 Kafka Broker Metrics 数据的几种方式

0x01 Prometheus + Kafka

回到 Prometheus, 我们来挨个评估一下上述的几个方案:

  1. 实现一个 reporter, 将数据推送给 Prometheus Pushgateway. 但实现太繁琐, 而且要顾及到 Kafka 后续 API 的升级.

  2. 读取 JMX 的数据. Prometheus 官方的组件 jmx_exporter 把两种实现都提供了:

    • jmx_prometheus_httpserver 通过独立进程读取 JMX 的数据
    • jmx_prometheus_javaagent 使用 Java Agent 方式, 尽量无侵入(仅需在 java 命令行中使用 -javaagent 参数)的启动 in-process library, 读取 JMX 数据.

不同于 metrics-core 设计的是, Prometheus 采用了 PULL 方式, 也就是说 Prometheus 主动抓取 metrics 数据, 而不是靠客户端主动 PUSH 数据, 因此 jmx_prometheus 都是通过暴露 HTTP 端口的方式暴露 metrics 数据, 方便 Prometheus 抓取数据.

考虑到 Kafka Broker 的 metrics 足够稳定(排除升级考虑), 并且对 Prometheus 官方的 library 足够有信心, 因此选择了 jmx_prometheus_javaagent 方式, 重启了一轮 Kafka Broker, 通过 Prometheus 的 scraper 抓取了所有 Kafka Broker 的 metrics 数据.

0x02 Monitoring Dashboard 构建原则

有了 metrics 数据, 就到了构建 Dashboard 的阶段了. 如何构建一个"好用"监控的 Dashboard? 简单的找几个 metrics 堆砌一下就完事儿了? NO, NO, NO, not that simple

总结了4个原则, 欢迎拍砖:

  1. 异角(jué)异面 (different dashboards for different roles)
  2. 唯一面板 (one and only one dashboard for a specific role)
  3. 依赖可达 (all dependent systems' dashboard links are provided in the dashboards)
  4. 依图告警 (all alert rules should have corresponding chart in the dashboard)

1. 异角异面

一个系统包含多种角色, 就 Kafka 集群来说,

  • Kafka 的用户, 仅仅通过 Kafka API 收发消息;
  • Kafka Admin, 专注于 Kafka 集群的可用性;
  • 系统运维人员, 关注 IDC/硬件/网络等更基础的资源.

不同的角色, 关注的资源不同, 如下图:

不同角色关注点不同
  • Kafka 用户仅仅关注自己的 Topic 是否可读可写, Consumer 是否有 Lag
  • Kafka Admin 更关注 Kafka Broker 内部的核心 metrics, 看集群资源利用情况(CPU/Memory/IO)和可用性等指标, 至于 Topic 级别的 metrics, 最多关注数据量比较大的 topic
  • OPS 人员更关注 IDC 级别的网络/硬件, 或者云服务提供商的可用性指标

监控系统应该给不同角色提供不同的 Dashboard, 不能简单提供一个大到打不开的 Dashboard 让大家自己去找关注的指标

2. 唯一面板

虽然不同角色关注点不同, 但关注的 metrics 确是有不少. 这里的核心原则就是为每个角色提供一个并且仅有一个 Dashboad 作为入口, 不能说为了看一些指标, 到处找 metric 在哪个 Dashboard, 降低效率.

通过提炼核心的 metrics, 将这些 metrics 展现在一个 Dashboard, 提高效率. 至于次要的 metrics 放在哪里, 参考下一条

3. 依赖可达

核心 metrics 放到一个 Dashboard 中后, 有些看上去不是那么一针见血的 metrics 放在哪里?

External Link! 核心 Dashboard 中必须提供其他依赖的系统或者更多非核心的 Dashboard 的链接, 供用户一键点击打开, 注意, 是必须一个跳转就可达, 最大程度提高效率.

回到 Kafka Broker 的例子, Kafka Admin 除了看 Kafka Broker 的核心 metrics 外, 可以一键打开 Kafka Broker 使用的 Zookeeper 集群的 Dashboard, 或者 Kafka 节点的细节监控信息的 Dashboard

4. 依图告警

系统都会有一些监控规则, 提供异常的告警功能. 但一个容易忽略的问题是, 告警规则中使用的 metrics 是否在 Dashboard 中有对应的图表, 方便 on-call 人员收到告警信息后, 以最高效率的方式打开对应的异常 metrics 进行问题诊断. 更贴心的告警系统, 应该在告警信息中提供对应的 Dashboard 的链接, 或者干脆直接把异常值时间附近的图表信息发送到告警信息中(比如截个图).

0x03 Kafka Broker Grafana Dashboard 构建

贯彻上述的四点原则, 构建一个 Kafka Broker 的 Dashboard, 供 Kafka Admin 查看集群信息.

第一步, 提炼核心 metrics

  • Kafka Broker 层面, 主要关注如下几个 metrics:
metric name description
ActiveControllerCount 标记哪个 broker 节点是 controller
UncleanLeaderElectionPerSec 争议的 leader 选举次数
PartitionCount 每个 broker 节点的 topic partition 的数量, 用于决定是否需要 rebalance
OfflinePartitionsCount 下线的 partition 的数量, 一般 >0 就说明集群有问题
UnderReplicatedPartitions 复制中的 Partition 数量
Bytes In bytes Per Topic Top 10 按照数据量计算前十个写入的 Topic
Bytes Out bytes Per Topic Top 10 按照数据量计算前十个读取的 Topic
Message In Per Topic Top 10 按照消息量计算前十个读取的 Topic
  • JVM 层面, 仅仅关注两个指标, 细节通过链接到 JVM 详细 Dashboard.
metric name description
JVM Memory Usage JVM Heap 占用的内存
Time Spend in GC JVM GC 所占的时间比例, 定位是否有 GC 问题
  • 系统层面, 仅仅关注 CPU/IO/Network/Memory
metric name description
CPU Usage 系统 CPU 使用率
Memory Usage 系统 Memory 使用率
Disk Usage 磁盘占用
IO Utilization IO 使用率, 看是否有磁盘 IO 瓶颈
Network In/Out 网络吞吐

第二步, 构建 Dashboad

使用 Grafana 构建 Dashboard. 建议构建完成后, 通过 JSON 文件导出备份.

第三步, 添加系统依赖 Dashboard 链接

核心 Metrics 构建完成后, 需要整理依赖系统的 Dashboard 链接并添加到 Dashboard 中. 建议如下几个:

  • Kafka Broker Instance Dashboard: Kafka Broker 所在节点的详细监控信息
  • Kafka Broker JVM Dashboard: JVM 其实有更多更细化的 metrics, 可以让公司的 JVM 达人充分发挥专业特长, 构建更细化的 JVM 监控 Dashboard, 比如各种不同 Heap 的占用, 线程信息等.
  • Zookeeper Dashboard: Kafka Broker 依赖的 Zookeeper 集群的 Dashboard
  • Kafka Manager: 方便对 Kafka 集群进行调整

0x04 总结

通过 Kafka Broker 的监控这个事儿, 总结了几个原则, 先在 Kafka Broker 上实践了一下, 看后续是否需要进一步修正, 争取贯彻到各个系统的监控 Dashboard 的构建中.

-- EOF --

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容