Kafka消费积压Lag监控工具Burrow的使用.md
一、概述
Kafka是业内流行的日志队列处理软件,使用极为广泛,但是关于对Kafka的监控问题,网上的文章和相关的软件就比较少了。
KafkaManager算是几个开源软件里做的比较好的。可以实时看到consumer消费进度和Lag情况,如下图
如果用于日常的管理还是很不错的,但是要用于监控,还是比较麻烦的,之前笔者也写过Python脚本去抓取kafka manager的Lag数据,但是topic、ConsumerGroupID需要组合才能取到数据,比较麻烦。抓取完成后录入监控系统,如下图所示。可以给Lag设置阈值进行报警。
二、Burrow简介
Burrow是LinkedIn开源的一款专门监控consumer lag的框架。
目前来看更新很缓慢,活跃度不高,最新版本是v1.1.0。2018-05-15发布,修复了不少bug。
Burrow的特点如下
使用Burrow监控kafka, 不需要预先设置lag的阈值, 他完全是基于消费过程的动态评估
Burrow支持读取kafka topic和,zookeeper两种方式的offset,对于新老版本kafka都可以很好支持
Burrow支持http, email类型的报警
Burrow默认只提供HTTP接口(HTTP endpoint),数据为json格式,没有web UI
三、Burrow安装和配置
github网站上可以直接下载编译好的二进制包,可以直接下载使用,也可以使用docker镜像。
我们下载了二进制包,解压后可以看到burrow二进制文件,和config配置文件目录。
Burrow的主配置文件是config/burrow.toml,基于TOML格式。我们修改完成后的配置如下:
#基础选项
[general]
pidfile="burrow.pid"
stdout-logfile="logs/burrow.out"
access-control-allow-origin="mysite.example.com"
#日志选项
[logging]
filename="logs/burrow.log"
level="info"
maxsize=100
maxbackups=30
maxage=10
use-localtime=false
use-compression=true
#zookeeper选项,这个zookeeper使用burrow自己用的
[zookeeper]
servers=["10.128.0.2:2181", ]
timeout=6
root-path="/burrow"
#burrow作为客户端的配置
[client-profile.burrowclient]
client-id="burrowclient"
kafka-version="0.10.0"
#HTTP监听配置,可以使用HTTPS
[httpserver.default]
address=":8000"
#存储选项
[storage.default]
class-name="inmemory"
workers=20
intervals=15
expire-group=604800
min-distance=1
#报警选项
[notifier.default]
class-name="email"
interval=30
threshold=2
group-whitelist="^important-group-prefix.*$"
group-blacklist="^not-this-group$"
template-open="config/default-email.tmpl"
server="127.0.0.1"
port=25
from="root@localhost.com"
to="hello@ipcpu.com"
#
# kafka cluster config here
#接下来是Kafka相关的内容
#
[cluster.bu-agent-kafka]
class-name="kafka"
servers=[ "10.128.0.65:9092", "10.128.0.66:9092", "10.128.0.67:9092" ]
client-profile="burrowclient"
topic-refresh=300
offset-refresh=60
[consumer.bu-agent-kafka]
class-name="kafka"
cluster="bill-kafka"
servers=[ "10.128.0.65:9092", "10.128.0.66:9092", "10.128.0.67:9092" ]
client-profile="burrowclient"
offsets-topic="__consumer_offsets"
start-latest=true
group-whitelist=".*"
group-blacklist="^not-this-group$"
#@注意这里使用了cluster.kafkaname和consumer.kafkaname两个配置组,
#@第一个用来获取topic和最新offset信息,
#@第二个用来获取消费组和消费组offset及Lag。
编写好配置文件后,我们就可以启动了
nohup /data/apps/burrow/burrow -config-dir=/data/apps/burrow/config/ &
默认情况下,burrow监听8000端口,可以在配置文件中修改。
如果发生配置文件错误,会记录在logs/burrow.log中,前台不会报错。
四、Burrow的简单使用
Burrow提供的是HTTP Endpoint,使用起来也特别简单,如下
[root@mt ~]##@列出所有监控的Kafka集群
[root@mt ~]# curl -s http://10.128.0.2:8000/v3/kafka |jq
{
"error": false,
"message": "cluster list returned",
"clusters": [
"nginxlog",
"bill-kafka"
],
"request": {
"url": "/v3/kafka",
"host": "zabbix"
}
}
[root@mt ~]#
[root@mt ~]# #@列出所有消费组
[root@mt ~]# curl -s http://10.128.0.2:8000/v3/kafka/bill-kafka/consumer |jq
{
"error": false,
"message": "consumer list returned",
"consumers": [
"group1",
"group_bill",
"report_gid"
],
"request": {
"url": "/v3/kafka/bill-kafka/consumer",
"host": "zabbix"
}
}
[root@mt ~]# #@查看消费组健康状态
[root@mt ~]# curl -s http://10.128.0.2:8000/v3/kafka/bill-kafka/consumer/group1/status |jq
{
"error": false,
"message": "consumer status returned",
"status": {
"cluster": "bill-kafka",
"group": "group1",
"status": "OK",
"complete": 1,
"partitions": [],
"partition_count": 18,
"maxlag": {
"topic": "shellActivity",
"partition": 0,
"owner": "",
"status": "OK",
"start": {
"offset": 101333573,
"timestamp": 1526997873289,
"lag": 0
},
"end": {
"offset": 101333604,
"timestamp": 1526997891689,
"lag": 0
},
"current_lag": 0,
"complete": 1
},
"totallag": 0
},
"request": {
"url": "/v3/kafka/bill-kafka/consumer/group1/status",
"host": "zabbix"
}
}
如上,如果想监控消费组健康状态,是否Lag过大,就是用"/v3/kafka/(cluster)/consumer/(group)/status"查看是否为OK。
常用HTTP Endpoint如下
Request | Method | URL Format |
---|---|---|
List Clusters | GET | /v3/kafka |
Kafka Cluster Detail | GET | /v3/kafka/(cluster) |
List Consumers | GET | /v3/kafka/(cluster)/consumer |
List Cluster Topics | GET | /v3/kafka/(cluster)/topic |
Get Consumer Detail | GET | /v3/kafka/(cluster)/consumer/(group) |
Consumer Group Status | GET | /v3/kafka/(cluster)/consumer/(group)/status |
Consumer Group Lag | GET | /v3/kafka/(cluster)/consumer/(group)/lag |
五、消费组健康状态
消费组健康状态的接口(/v3/kafka/(cluster)/consumer/(group)/status)可以有以下几种状态,含义如下:
NOTFOUND - 消费组未找到
OK - 消费组状态正常
WARN - 消费组处在WARN状态,例如offset在移动但是Lag不停增长。 the offsets are moving but lag is increasing
ERR - 消费组处在ERR状态。例如,offset停止变动,但Lag非零。 the offsets have stopped for one or more partitions but lag is non-zero
STOP - 消费组处在ERR状态。例如offset长时间未提交。the offsets have not been committed in a log period of time
STALL - 消费组处在STALL状态。例如offset已提交但是没有变化,Lag非零。the offsets are being committed, but they are not changing and the lag is non-zero
消费组状态的评估方法,官网给出了文档,有兴趣的可以深入学习下,
https://github.com/linkedin/Burrow/wiki/Consumer-Lag-Evaluation-Rules
六、参考资料
https://github.com/linkedin/Burrow
http://www.idata.co.il/2017/01/monitoring-kafka-consumer-lag-with-burrow/
转载请注明:IPCPU-网络之路 » Kafka消费积压Lag监控工具Burrow的使用