Bug:Zabbix对Kafka topic积压数据监控
简述
《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积压数据监控相关推荐
- Zabbix监控Kafka topic积压数据
Kafka Apache Kafka是一个分布式发布-订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点. Kafka适合离线和在线消息消费. Kafka消息 ...
- kafka如何彻底删除topic及数据
前言: 删除kafka topic及其数据,严格来说并不是很难的操作.但是,往往给kafka 使用者带来诸多问题.项目组之前接触过多个开发者,发现都会偶然出现无法彻底删除kafka的情况.本文总结多个 ...
- CDH6 kafka如何彻底删除topic及数据
标题CDH6 kafka如何彻底删除topic及数据 删除kafka topic及其数据,发现都会偶然出现无法彻底删除kafka的情况.本人亲测并总结了以下流程. 第一步: 设置 auto.creat ...
- Java kafka监控 topic的数据量count情况,每个topic的Summed Recent Offsets(总结最近的偏移量)
Java使用kafka的API来监控kafka的某些topic的数据量增量,offset,定时查总量之后,然后计算差值,然后就可以算单位间隔的每个topic的增量,kafka监控一般都是监控的吞吐量, ...
- java查看kafka数据量_Java kafka监控 topic的数据量count情况,每个topic的offset,
Java使用kafka的API来监控kafka的某些topic的数据量增量,offset,定时查总量之后,然后计算差值,然后就可以算单位间隔的每个topic的增量,kafka监控一般都是监控的吞吐量, ...
- Java Kafka 消费积压监控
Java Kafka 消费积压监控 后端代码: Monitor.java代码: package com.suncreate.kafkaConsumerMonitor.service;import co ...
- Kafka中产生数据积压的原因以及解决方案
Kafka中产生数据积压的原因以及解决方案 1.kafka中数据积压的原因 kafka作为消息队列,其中数据积压也是经常遇到的问题之一.我们都知道,数据积压的直接原因,一定是系统中的某个部分出现了性能 ...
- Zabbix整合ELK实现日志数据的分析实时监控
一,ELK和Zabbix的关系? ELK是一套组合的日志收集系统,由Elasticsearch.Logstash和Kibana三个软件组成,通过ELK可以收集系统日志.网站日志.应用系统日志等各种日志 ...
- Java程序创建Kafka Topic,以及数据生产消费,常用的命令
转自: Java程序创建Kafka Topic,以及数据生产消费,常用的命令_Zyy_z_的博客-CSDN博客_java kafka创建topicKafka简介: Kafka是一个分布式发布--订阅消 ...
最新文章
- 剑指offer:面试题32 - II. 从上到下打印二叉树 II
- 解题报告:【kuangbin带你飞】专题十一 网络流
- 16 个 Redis 常见使用场景
- ngx_http_redis_module配置使用
- git 常用命令整理
- 算法知识之最长公共子序列问题(动态规划)
- python面试题~反射,元类,单例
- java 验证码透明背景_Java中的证书透明度验证
- Hadoop平台搭建
- 数据结构与算法python—6.链表及python实现
- (day 52 - DFS) 剑指 Offer 68 - II. 二叉树的最近公共祖先
- manjaroLinux安装卸载oh-my-zsh
- Java的System.out.println并不等于C的printf
- 光纤色散是什么?如何色散补偿?
- VC密码正确无法登陆。证书过期。处理。
- Notepad++下载markdown viewer plugin
- [每日一氵] Python 写程序专用 log 分享
- 语音识别软件_语音识别 软件_日语语音识别软件 - 云+社区 - 腾讯云
- Linux系统用户添加到用户组
- Percona Toolkit安装