需求描述:lag(滞后)是kafka消费队列性能监控的重要指标,lag的值越大,表示kafka的堆积越严重。本篇文章将使用python脚本+influxdb+grafana的方式对kafka的offset、logsiz和lag这三个参数进行监控,并以图形化的方式进行展现。

架构描述:使用python收集kafka的相关信息并存储到influxdb里;配置grafana,将influxdb里的数据以图形化的方式展现出来。

一,准备工作

1,kafka,influxdb,grafana的安装(在此不详细描述,默认为阅读文章的各位对这三样工具的使用是熟悉的)

2,查询kafka消费状态的命令/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group group1 --topic topicname1 --zookeeper zoo1:2181,zoo2:2181,zoo3:2181,zoo4:2181,zoo5:2181。本篇文章也将以此条命令输出的信息作为基础编写脚本。

#/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group group1 --topic topicname1 --zookeeper zoo1:2181,zoo2:2181,zoo3:2181,zoo4:2181,zoo5:2181
Group Topic Pid Offset logSize Lag Owner
group1 topicname1 0 978337806 978390228 52422 none
group1 topicname1 1 978337840 978390295 52455 none
group1 topicname1 2 978263557 978316052 52495 none
group1 topicname1 3 978307075 978359597 52522 none
group1 topicname1 4 978337803 978390358 52555 none
group1 topicname1 5 978337812 978390394 52582 none
说明:
group1 组名
topicname1 topic名

我们要用脚本取的,就是输出的这段内容的Offset logSize Lag这三个值,并将所有分片的这些值相加,从而获取单个topic的Offset logSize Lag的值,并将值输出到一个txt文件暂存。我这里使用一个shell脚本来取数据和一个python脚本来讲数据存储到influxdb中的方式来实现。

二,编写脚本提取Offset logSize Lag这三个值
1,给脚本创建一个独立的目录,里面会存放脚本和临时文件。
mkdir /usr/monitor
cd /usr/monitor
mkdir tmp

2,vim topic-collect.sh
#!/bin/bash
#txt文件命名规则:组-topic名字-检查项名字
source /etc/profile
/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group group1 --topic topicname1 --zookeeper zoo1:2181,zoo2:2181,zoo3:2181,zoo4:2181,zoo5:2181 | awk '{print $4}' | grep -v Offset | awk '{sum+=$1}END{print sum}' > /usr/monitor/tmp/topic-group1-topicname1-Offset.txt
/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group group1 --topic topicname1 --zookeeper zoo1:2181,zoo2:2181,zoo3:2181,zoo4:2181,zoo5:2181 | awk '{print $5}' | grep -v logSize | awk '{sum+=$1}END{print sum}' > /usr/monitor/tmp/topic-group1-topicname1-logSize.txt
/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group group1 --topic topicname1 --zookeeper zoo1:2181,zoo2:2181,zoo3:2181,zoo4:2181,zoo5:2181 | awk '{print $6}' | grep -v Lag | awk '{sum+=$1}END{print sum}' > /usr/monitor/tmp/topic-group1-topicname1-Lag.txt

其中txt是用来存储计算各分片之和的值的文件。对TXT文件名进行规范化管理会让后期增加监控十分方便清晰。

3,vim kafka-lag-collect.py #这是一个python写的脚本,用来将数据存储到influxdb中,在此之前在influxdb中建立对应的库,在这里用到的库的名称是elkDB

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
import urllib2
import urllib
import json #Read the file
f = open('/usr/monitor/tmp/topic-group1-topicname1-Offset.txt')
Offset_sum = f.read()
f.close()
f = open('/usr/monitor/tmp/topic-group1-topicname1-logSize.txt')
logSize_sum = f.read()
f.close()
f = open('/usr/monitor/tmp/topic-group1-topicname1-Lag.txt')
Lag_sum = f.read()
f.close() dbreqdata = "group1,topic=topicname1,type=Offset value="+str(Offset_sum)+\
"\ngroup1,topic=topicname1,type=logSize value="+str(logSize_sum)+\
"\ngroup1,topic=topicname1,type=Lag value="+str(Lag_sum)
print dbreqdata
dbrequrl = "http://127.0.0.1:8086/write?db=elkDB"
dbreq= urllib2.Request(url = dbrequrl,data =dbreqdata)
print dbreq
urllib2.urlopen(dbreq)

  4,脚本写完后给脚本增加一下可执行权限

chmod +x kafka-lag-collect.py

chmod +x  topic-collect.sh

5,试着执行一下topic-collect.sh看能否执行成功

./topic-collect.sh

如果能执行成功的话,可以看到/usr/monitor/tmp/topic-group1-topicname1-Offset.txt里面已经有计算出来的offset总和了

6,试着执行一下kafka-lag-collect.py看能否执行成功

./kafka-lag-collect.py

如果能执行成功的话,就可以在influxdb里看到新建的表和相关数据了。

7,让topic-collect.sh脚本调用kafka-lag-collect.py脚本,这样可以避免添加两条crontab定时任务

echo "/usr/monitor/kafka-lag-collect.py" >> topic-collect.sh

8,添加定时任务,让脚本可以每分钟收集一次信息到influxdb

crontab -e 

* * * * * /usr/monitor/topic-collect.sh

三,配置grafana展现数据

1,配置grafana数据源

 2,新建图表
至此,就可以在grafana上看到监控的lag状态了。
 

kafka监控之topic的lag情况监控的更多相关文章

  1. 001使用smokeping监控idc机房网络质量情况

    最近工作比较忙,也没有时间写博客,看到好友芮峰云最近一直在写博客,所以也手痒了,就先把之前的一些积累下来的文章分享给大家. 本文是介绍如何的使用smokeping来监控idc机房的网络质量情况,从监控 ...

  2. 限制UITextView的字数和字数监控,表情异常的情况和禁用表情

    限制UITextView的字数和字数监控,表情异常的情况和禁用表情   3523FD80CC4350DE0AE7F89A8532B9A8.png 因为字数占一个字符,表情占两个字符.你要是限制15个字 ...

  3. Kafka vs RocketMQ—— Topic数量对单机性能的影响-转自阿里中间件

    引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...

  4. (二)Kafka动态增加Topic的副本(Replication)

    (二)Kafka动态增加Topic的副本(Replication) 1. 查看topic的原来的副本分布 [hadoop@sdf-nimbus-perf ~]$ le-kafka-topics.sh ...

  5. kubernetes之监控Prometheus实战--prometheus介绍--获取监控(一)

    Prometheus介绍 Prometheus是一个最初在SoundCloud上构建的开源监控系统 .它现在是一个独立的开源项目,为了强调这一点,并说明项目的治理结构,Prometheus 于2016 ...

  6. 转:JMeter监控内存及CPU ——plugin插件监控被测系统资源方法

    JMeter监控内存及CPU ——plugin插件监控被测系统资源方法 jmeter中也可以监控服务器的CPU和内存使用情况,但是需要安装一些插件还需要在被监测服务器上开启服务. 1.需要的插件准备 ...

  7. Kafka动态增加Topic的副本

    一.kafka的副本机制 由于Producer和Consumer都只会与Leader角色的分区副本相连,所以kafka需要以集群的组织形式提供主题下的消息高可用.kafka支持主备复制,所以消息具备高 ...

  8. Kafka vs RocketMQ—— Topic数量对单机性能的影响

    引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...

  9. Kafka设计解析(十)Kafka如何创建topic

    转载自 huxihx,原文链接 Kafka如何创建topic? 目录 一.命令行部分 二.后台逻辑部分 Kafka创建topic命令很简单,一条命令足矣: bin/kafka-topics. --re ...

随机推荐

  1. JPA、Hibernate、Spring-Data-Jpa的本质区别

    什么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支持 ...

  2. Linux提权(持续更新)

    利用/etc/passwd提权 个人认为,这种提权方式在现实场景中难以实现,条件太过苛刻,但是建立Linux下的隐藏账户是个不错的选择,灵感来自:https://www.hackingarticles ...

  3. vue中插值表达式中时间转换yyyy-MM-dd HH:mm:ss

    vue插值表达式中将时间转换两种方式:一.定义方法 <div id="app">当前实时时间:{{dateFormat(date)}}</div> //时间 ...

  4. python中a+=b 和a=a+b的结果一样吗

    这里涉及到可变类型和不可变类型. 可变类型:列表,字典,集合 不可变:数字,字符串,元祖 先看一下不可变类型的运算: +=运算 >>> a, b = 1, 2 >>> ...

  5. CorelDRAW常用工具之涂抹工具

    CDR作为绘图软件或者说平面设计软件使用频繁的功能之一,就是为绘制好的图片进行涂抹混色. 1.基本操作 CorelDRAW平面设计软件的涂抹工具是在形状工具组里的,打开左侧工具栏"形状&qu ...

  6. PHP 统计目录下文件数和文件大小

    1 /** 2 * 统计文件数和文件大小 3 */ 4 private function getFileCacheCount($pathName) 5 { 6 $data = [ 7 'num' =& ...

  7. Linux 学习笔记01丨Ubuntu系统安装、配置及软件教程集合

    1. Ubuntu系统安装 Windows10安装ubuntu18.04双系统教程 Ubuntu 20.04.1 镜像下载 软碟通 机械革命进入BIOS模式 要按F2,注意将Boot Option中将 ...

  8. synchronized底层揭秘

    前言 上篇文章我们从硬件级别探索,对可见性和有序性的认识上升了一个高度,却迟迟没有介绍原子性的解决方案. 今天我们就来聊一聊原子性的解决方案,锁. 引入锁机制,除了可以保证原子性,同时也可以保证可见性 ...

  9. JZOJ2020年8月11日提高组T1 密码

    JZOJ2020年8月11日提高组T1 密码 题目 Description 在浩浩茫茫的苍穹深处,住着上帝和他的神仆们,他们闲谈着下界的凡人俗事,对人世间表现的聪明智慧,大加赞赏.今天他们正在观赏大地 ...

  10. JZOJ8月10日提高组反思

    JZOJ8月10日提高组反思 T1 没想到怎么打 就去打暴力了 本来想拿个30不错了 结果\(AC\)了 话说回来,数据也挺小的 T2 不AC便爆0 就一个数据点 给不给打暴力的人活了 正解是状压DP ...