最新消息:

Kafka消费积压Lag监控工具Burrow的使用

Linux ipcpu 21019浏览

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的使用