监控告警

Kafka 指标采集、Grafana Dashboard、日志查询与告警规则。

Pigsty 为 KAFKA 模块提供指标、日志、Dashboard 与告警一体化的可观测能力。监控同时覆盖 Kafka JVM 内部状态与 Kafka 协议视角,避免只看到进程存活而看不到 Partition、ISR 与 Consumer Lag,也避免只看到集群元数据而看不到 JVM、请求队列与 KRaft Controller 健康。


采集架构

KAFKA 模块使用两个互补的 Exporter:

采集面服务/方式Job节点范围主要内容
JVM 与 Kafka 内部JMX Exporter Java Agent :9404kafka所有 Kafka 节点JVM、Broker 吞吐、复制、请求路径、KRaft、Controller
Kafka 协议视角kafka_exporter :9308kafka_exporterkafka_seq 最小的至多两个 Broker-capable 节点Broker、Topic、Partition、Offset、Consumer Group、Lag
主机资源node_exporternode纳管节点CPU、内存、磁盘、网络、文件系统
日志Journald → Vector → VictoriaLogssyslog所有 Kafka 节点Kafka 与 Exporter 结构化检索日志

角色在每一个 Infra 节点生成文件发现目标:

/infra/targets/kafka/<kafka_instance>.yml
/infra/targets/kafka_exporter/<kafka_instance>.yml

单 Broker 集群只运行一个协议 Exporter;多 Broker 集群最多运行两个。纯 Controller 只注册第一类 JMX 目标;未被选择的 Broker 与纯 Controller 都没有协议 Exporter 目标,这是预期行为。角色会停止落选节点的 Unit,并清理环境文件、CA 副本与 stale Target。


标签模型

job=kafka

标签含义示例
job采集任务kafka
clsKafka 集群名kf-main
insKafka 实例名kf-main-1
ip清单主机地址10.10.10.11
instanceJMX 抓取端点10.10.10.11:9404
rolePigsty Kafka 角色combinedbrokercontroller
node_idKRaft 节点号1

job=kafka_exporter

协议 Exporter 目标包含 clsinsipinstance。它从 Broker 查询整个 Kafka 集群,因此同一集群的两个 Exporter 可能返回相同 Topic/Partition/Consumer Group 视图。集群级 Recording Rule 会先在 Exporter 实例间去重,再汇总逻辑集群速率。scram 模式下,Exporter 连接 Kafka 所需的 TLS/SCRAM 参数由角色自有监控身份自动生成。


Grafana Dashboard

Pigsty 提供三个互补 Dashboard:

Kafka Overview

集群与全局总览。cls=All 是全部 Kafka 集群的 Overview;选择具体 cls 后,同一 Dashboard 就成为该 Kafka Cluster 的总览,而不是另一套独立面板。

主要内容:

  • 集群、Broker、Topic、Partition 与 Consumer Group 清单
  • Broker 可用性、Exporter 健康与集群工作负载
  • Leaderless、Under Replicated、ISR Deficit、Non-Preferred Replica
  • Topic Offset 进展、Consumer Commit 进展与总 Lag
  • Consumer Group 成员、Lag 排名和 Topic/Group 下钻
  • Kafka/Exporter 日志量、Firing Alerts 与日志明细

常用变量:clsmemberstopicgrouptopk

Kafka Instance

ins 变量选择一个运行 kafka_exporter 的 Broker 实例,从协议视角查看集群元数据与 Consumer 状态,并联动宿主机资源。

主要内容:

  • Exporter 可用性、身份、运行时与抓取成本
  • Broker Directory、Topic Inventory、Partition Topology
  • Leader Distribution、ISR Deficit、Leaderless 与 Non-Preferred
  • Topic Offset Span、Append/Commit Progress
  • Consumer Group Inventory、Members、Offsets 与 Lag
  • 节点 CPU/内存、磁盘 I/O、网络、文件系统与日志

常用变量:insclsiptopicconsumergrouptopk

Kafka Node

ins 变量选择任何 Kafka JVM,包括纯 Controller 节点,查看 JMX、Broker 与 KRaft 内部状态。

主要内容:

  • JVM Heap、GC、Thread、Buffer Pool、CPU、FD 与 Uptime
  • Broker 消息/网络/复制吞吐和 ISR Churn
  • 请求率、错误、P95/P99 延迟、队列与 Handler/Network Idle
  • Under Replicated、Under Min ISR、Offline Replica/Log Directory
  • KRaft Member State、Metadata Log、传播延迟与 Snapshot
  • Active Controller、Fenced Broker、Offline Partition 与事件延迟
  • JMX 抓取质量、宿主机压力与 Kafka 日志

常用变量:clsinsip


Dashboard 选择

问题首选 Dashboard下钻方向
哪个集群或 Topic 出现异常?Kafka Overview选择 clstopicgroup
某个 Consumer Group 为什么积压?Kafka InstanceGroup → Topic → Partition Offset
某个 Broker 是否过载?Kafka Node请求路径 → JVM → Node 资源
KRaft Controller 是否健康?Kafka NodeKRaft Metadata Plane → Controller Health
是否存在 Leaderless/URP/ISR 问题?Kafka OverviewCluster → Kafka Node
Exporter 缺数还是 Kafka 本身异常?Instance + Node对比 up{job="kafka_exporter"}up{job="kafka"}

Recording Rule

Kafka 规则文件位于 /infra/rules/kafka.yml。主要记录指标如下:

指标含义
kafka:topic:msg_rate1m/5mTopic 当前 Offset 的 1/5 分钟正向变化速率
kafka:ins:msg_rate1m/5m单个 Exporter 视图中的消息追加速率
kafka:cls:msg_rate1m/5m去重后的集群消息追加速率
kafka:topic:csg_rate1m/5mConsumer Group Commit Offset 的 1/5 分钟正向变化速率
kafka:ins:csg_rate1m/5m单个 Exporter 视图中的消费提交速率
kafka:cls:csg_rate1m/5m去重后的集群消费提交速率
kafka:ins:jvm_heap_used_ratioKafka JVM Heap 使用率
kafka:ins:jvm_cpu_coresKafka JVM 消耗的 CPU Core 数
kafka:ins:jvm_gc_time_rate5m5 分钟 GC 时间速率
kafka:ins:messages_in_rate5mBroker 5 分钟消息接收速率
kafka:ins:bytes_in_rate5mBroker 5 分钟客户端入站字节速率
kafka:ins:bytes_out_rate5mBroker 5 分钟客户端出站字节速率

基于 Offset 变化得到的是进展速率,不是客户端请求数。日志截断、Offset 回退或 Exporter 重启可能造成瞬时负变化;规则使用 clamp_min(..., 0) 只保留正向进展。


告警规则

告警条件持续时间级别首选下钻
KafkaDownkafka_up < 11mCRITKafka Node / ins
KafkaExporterDownup{job="kafka_exporter"} < 11mCRITKafka Instance / ins
KafkaJmxScrapeErrorjmx_scrape_error > 03mWARNKafka Node / JMX Collector
KafkaJvmHeapHighHeap 使用率 > 90%15mWARNKafka Node / JVM Memory
KafkaJvmDeadlockJVM Deadlocked Thread > 01mCRITKafka Node / JVM Threads
KafkaRequestHandlerSaturatedHandler Idle < 10%10mWARNKafka Node / Request Path
KafkaUnderReplicatedPartitionsURP > 05mWARNKafka Node / Replication
KafkaUnderMinISRUnder Min ISR > 01mCRITKafka Node / Replication
KafkaOfflineLogDirectoryOffline Log Directory > 01mCRITKafka Node / Disk Pressure
KafkaOfflinePartitionsController Offline Partition > 01mCRITKafka Node / cls
KafkaControllerCountMismatchActive Controller 数不等于 11mCRITKafka Node / cls
KafkaFencedBrokersFenced Broker > 05mWARNKafka Node / cls
KafkaUncleanLeaderElection5 分钟出现不干净 Leader 选举立即CRITKafka Node / cls

不干净 Leader 选举可能意味着数据丢失,应立即保留 Controller/Broker 日志,确认受影响 Topic 与副本,再决定恢复动作。


常用 PromQL

检查采集目标:

kafka_up
up{job="kafka_exporter"}

检查某集群复制健康:

sum by (cls) (kafka_server_replica_manager_under_replicated_partitions{job="kafka"})
sum by (cls) (kafka_server_replica_manager_under_min_isr_partitions{job="kafka"})
max by (cls) (kafka_controller_offline_partition_count{job="kafka"})

检查 Consumer Lag:

topk(20, kafka_consumergroup_lag_sum{job="kafka_exporter",cls="kf-main"})

检查请求饱和与延迟:

kafka_server_request_handler_idle_ratio{job="kafka",cls="kf-main"}
max by (ins,request,quantile) (
  kafka_network_request_total_time_seconds{job="kafka",cls="kf-main",quantile=~"0.95|0.99"}
)

日志查询

Kafka 服务把标准输出与错误写入 Journald,节点 Vector 的 Journald Source 会转发到 VictoriaLogs,统一使用 job:syslog

job:syslog unit:kafka
job:syslog app:kafka
job:syslog unit:kafka_exporter
ip:10.10.10.11 job:syslog (unit:kafka OR app:kafka)

Kafka Node Dashboard 的日志面板使用类似查询,并展示时间、级别、Systemd Unit 与消息。诊断时应把日志与同一时间窗口内的 KRaft、ISR、请求队列、GC、磁盘 I/O 和网络指标对齐。


验证监控链路

在 Kafka 节点验证原始端点:

curl -fsS http://<kafka-ip>:9404/metrics | grep '^jmx_scrape_error'
curl -fsS http://127.0.0.1:9308/metrics | grep '^kafka_brokers'

在 Infra 节点检查文件发现:

ls -l /infra/targets/kafka/
ls -l /infra/targets/kafka_exporter/

然后在 VictoriaMetrics 查询 up{job="kafka"}up{job="kafka_exporter"}。自定义 exporter 指标在抓取失败后可能短暂保留旧样本,端点存活应以 Prometheus 原生 up 为准。若原始端点正常但记录指标缺失,依次检查文件发现、VictoriaMetrics Target、网络可达性、规则加载与标签;若 JMX HTTP 正常但 jmx_scrape_error1,检查 Kafka 日志和 /etc/kafka/jmx_exporter.yml 的 MBean 匹配情况。

完整指标语义参阅 指标定义