简述

《Zabbix监控Kafka topic积压数据》一文的目的是通过Zabbix自动发现实现对多个消费者组的Topic及Partition的Lag进行监控。因在实际监控中发现有问题,为给感兴趣的读者不留坑,特通过此文对监控进行优化调整。

分区自动发现

# 未优化前的计算方式:
# 自动发现配置文件
vim consumer-groups.conf
#按消费者组(Group)|Topic格式,写入自动发现配置文件
test-group|test# 执行脚本自动发现指定消费者和topic的分区
bash consumer-groups.sh discovery
{"data": [{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"0" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"1" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"3" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"2" }]
}

经过上线验证,当自动发现配置文件只有一个test-group|test是没有问题的,但当我们按需求再接入test-group|test1 (即test-group消费者组的第二个Topic)时,自动发现的结果如下:

# 未优化前的计算方式:
vim consumer-groups.conf
#按消费者组(Group)|Topic格式,写入自动发现配置文件
test-group|test
test-group|test1# 执行脚本自动发现指定消费者和topic的分区
bash consumer-groups.sh discovery
{"data": [{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"0" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"1" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"3" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"2" }{ "{#GROUP}":"test-group", "{#TOPICP}":"test1", "{#PARTITION}":"0" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test2", "{#PARTITION}":"1" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test3", "{#PARTITION}":"2" }]
}

了解Zabbix自动发现格式的同学会发现,每个Topic的Partition会出现',',这种格式是不符合规范,这就是导致我们的监控项会出现问题,因此我们需要进一步修改脚本。

经修改后,最终效果应该如下:

# 优化后的计算方式:
vim consumer-groups.conf
#按消费者组(Group)|Topic格式,写入自动发现配置文件
test-group|test
test-group|test1# 执行脚本自动发现指定消费者和topic的分区
bash consumer-groups.sh discovery
{"data": [{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"0" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"1" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"3" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test", "{#PARTITION}":"2" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test1", "{#PARTITION}":"0" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test1", "{#PARTITION}":"1" },{ "{#GROUP}":"test-group", "{#TOPICP}":"test1", "{#PARTITION}":"2" }]
}

获取监控项“test-group/test/分区X”的Lag

经过自动发现后的数据,我们可以进一步获取不同分区的lag

# 优化后的计算方式:
# test-group test分区0 lag
bash consumer-groups.sh lag test-group test 0
# test-group test分区1 lag
bash consumer-groups.sh lag test-group test 1
# test-group test1分区0 lag
bash consumer-groups.sh lag test-group test1 0

通过命令可以看到,我们的参数通过消费者组、Topic、Partition来获取最终的lag值,如果不加消费者区分,那么无法区分不同消费者组和不同Topic相应的lag结果:

# 未优化前的计算方式:
# 获取分区0 lag
bash consumer-groups.sh lag 0
# 获取分区1 lag
bash consumer-groups.sh lag 1
# 获取分区2 lag
bash consumer-groups.sh lag 2
# 获取分区3 lag
bash consumer-groups.sh lag 3

最终优化后脚本

# 自动发现配置文件
vim consumer-groups.conf
#按消费者组(Group)|Topic格式,写入自动发现配置文件
test-group|test
test-group|test1# 自动发现、lag计算脚本
vim consumer-groups.sh
#!/bin/bash
##comment: 根据消费者组监控topic lag,进行监控告警
#配置文件说明
#消费者组|Topic
#test-group|test#获取topic 信息
cal_topic() {if [ $# -ne 2 ]; thenecho "parameter num error, 读取topic信息失败"exit 1else/usr/local/kafka/bin/./kafka-consumer-groups.sh --bootstrap-server 192.168.3.55:9092 --describe --group $1 |grep -w $2|grep -v none fi
}
#topic+分区自动发现
topic_discovery() {printf "{\n"printf "\t\"data\": [\n"m=0num=`cat /etc/zabbix/monitor_scripts/consumer-groups.conf|wc -l`for line in `cat /etc/zabbix/monitor_scripts/consumer-groups.conf`do  m=`expr $m + 1`group=`echo ${line} | awk -F'|' '{print $1}'`topic=`echo ${line} | awk -F'|' '{print $2}'`cal_topic $group $topic > /tmp/consumer-group-tmpcount=`cat /tmp/consumer-group-tmp|wc -l`n=0while read linedon=`expr  $n + 1`#判断最后一行if [ $n -eq $count ] && [ $m -eq $num ]; thentopicp=`echo $line | awk '{print $1}'`partition=`echo $line  | awk '{print $2}'`printf "\t\t{ \"{#GROUP}\":\"${group}\", \"{#TOPICP}\":\"${topicp}\", \"{#PARTITION}\":\"${partition}\" }\n"elsetopicp=`echo $line | awk '{print $1}'`partition=`echo $line  | awk '{print $2}'`printf "\t\t{ \"{#GROUP}\":\"${group}\", \"{#TOPICP}\":\"${topicp}\", \"{#PARTITION}\":\"${partition}\" },\n"fidone < /tmp/consumer-group-tmpdoneprintf "\t]\n"printf "}\n"
}if [ $1 == "discovery" ]; thentopic_discovery
elif [ $1 == "lag" ];thencal_topic $2 $3 > /tmp/consumer-groupcat /tmp/consumer-group |awk -v t=$3 -v p=$4 '{if($1==t && $2==p ){print $5}}'
elseecho "Usage: /data/scripts/consumer-group.sh discovery | lag"
fi# 手动运行
## 自动发现
bash consumer-groups.sh discovery
## test-group test分区0 lag
bash consumer-groups.sh lag test-group test 0

接入Zabbix

1.Zabbix配置文件

vim userparameter_kafka.conf
UserParameter=topic_discovery,bash /data/scripts/consumer-groups.sh discovery
UserParameter=topic_log[*],bash /data/scripts/consumer-groups.sh lag "$1" "$2" "$3"

2.Zabbix自动发现

3.监控项配置

4.告警信息

告警主机:Kafka_192.168.3.55
主机IP:192.168.3.55
主机组:Kafka
告警时间:2022.03.21 00:23:10
告警等级:Average
告警信息:test-group/test/分区1:数据积压100
告警项目:topic_lag[test-group,test,1]
问题详情:
test-group/test/1: 62

Bug:Zabbix对Kafka topic积压数据监控相关推荐

  1. Zabbix监控Kafka topic积压数据

    Kafka Apache Kafka是一个分布式发布-订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点. Kafka适合离线和在线消息消费. Kafka消息 ...

  2. kafka如何彻底删除topic及数据

    前言: 删除kafka topic及其数据,严格来说并不是很难的操作.但是,往往给kafka 使用者带来诸多问题.项目组之前接触过多个开发者,发现都会偶然出现无法彻底删除kafka的情况.本文总结多个 ...

  3. CDH6 kafka如何彻底删除topic及数据

    标题CDH6 kafka如何彻底删除topic及数据 删除kafka topic及其数据,发现都会偶然出现无法彻底删除kafka的情况.本人亲测并总结了以下流程. 第一步: 设置 auto.creat ...

  4. Java kafka监控 topic的数据量count情况,每个topic的Summed Recent Offsets(总结最近的偏移量)

    Java使用kafka的API来监控kafka的某些topic的数据量增量,offset,定时查总量之后,然后计算差值,然后就可以算单位间隔的每个topic的增量,kafka监控一般都是监控的吞吐量, ...

  5. java查看kafka数据量_Java kafka监控 topic的数据量count情况,每个topic的offset,

    Java使用kafka的API来监控kafka的某些topic的数据量增量,offset,定时查总量之后,然后计算差值,然后就可以算单位间隔的每个topic的增量,kafka监控一般都是监控的吞吐量, ...

  6. Java Kafka 消费积压监控

    Java Kafka 消费积压监控 后端代码: Monitor.java代码: package com.suncreate.kafkaConsumerMonitor.service;import co ...

  7. Kafka中产生数据积压的原因以及解决方案

    Kafka中产生数据积压的原因以及解决方案 1.kafka中数据积压的原因 kafka作为消息队列,其中数据积压也是经常遇到的问题之一.我们都知道,数据积压的直接原因,一定是系统中的某个部分出现了性能 ...

  8. Zabbix整合ELK实现日志数据的分析实时监控

    一,ELK和Zabbix的关系? ELK是一套组合的日志收集系统,由Elasticsearch.Logstash和Kibana三个软件组成,通过ELK可以收集系统日志.网站日志.应用系统日志等各种日志 ...

  9. Java程序创建Kafka Topic,以及数据生产消费,常用的命令

    转自: Java程序创建Kafka Topic,以及数据生产消费,常用的命令_Zyy_z_的博客-CSDN博客_java kafka创建topicKafka简介: Kafka是一个分布式发布--订阅消 ...

最新文章

  1. 剑指offer:面试题32 - II. 从上到下打印二叉树 II
  2. 解题报告:【kuangbin带你飞】专题十一 网络流
  3. 16 个 Redis 常见使用场景
  4. ngx_http_redis_module配置使用
  5. git 常用命令整理
  6. 算法知识之最长公共子序列问题(动态规划)
  7. python面试题~反射,元类,单例
  8. java 验证码透明背景_Java中的证书透明度验证
  9. Hadoop平台搭建
  10. 数据结构与算法python—6.链表及python实现
  11. (day 52 - DFS) 剑指 Offer 68 - II. 二叉树的最近公共祖先
  12. manjaroLinux安装卸载oh-my-zsh
  13. Java的System.out.println并不等于C的printf
  14. 光纤色散是什么?如何色散补偿?
  15. VC密码正确无法登陆。证书过期。处理。
  16. Notepad++下载markdown viewer plugin
  17. [每日一氵] Python 写程序专用 log 分享
  18. 语音识别软件_语音识别 软件_日语语音识别软件 - 云+社区 - 腾讯云
  19. Linux系统用户添加到用户组
  20. Percona Toolkit安装

热门文章

  1. 活动回顾 | 体验家XMPlus出席WRE营销创新与科技峰会2021
  2. 怎么理解DHCP Snooping?
  3. fastadmin 时间选择框
  4. 树莓派zero w ssh远程登录配置好各种文件后连接电脑没有反应
  5. 数据存储单位及转换关系
  6. GB51309实施后对于消防应急照明和疏散指示系统在城市隧道应用中的影响
  7. element按钮默认选中
  8. 计算机网络 实验二 交换机配置与 MAC 地址转发表管理
  9. JS实现Html转义和反转义(html编码和解码)的方法总结
  10. 【FFH】啃论文俱乐部---JSON压缩算法解读