Linkedin Burrow

原创
2017/03/28 14:32
阅读数 1.8K

介绍

    Burrow是linkedin开源的一个监控Apache Kafka的工具,burrow可以将消费者滞后检查作为一项服务来对外提供。 它监视所有消费者的承诺偏移量,并根据需要计算消费者的状态,提供HTTP endpoint接口来获取消费者状态,能够监控Consumer消费消息的延迟,从而监控应用的健康状况,并且可以同时监控多个Kafka集群。 通知器可以通过配置电子邮件或HTTP通告进行告警,而无需指定阈值。

环境准备

    gpm安装

cd /opt/programs
git clone https://github.com/pote/gpm.git
cd gpm
git checkout v1.4.0 
./configure
make install

    gpm验证   

        

    go安装

cd /opt/programs
wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
tar zxvf go1.8.linux-amd64.tar.gz -C go

    go环境设置

export GOROOT=/opt/programs/go
export GOPATH=/root/go
export PATH=$PATH:$GOROOT/bin

    go验证

部署

    编译burrow

go get github.com/linkedin/Burrow
cd /root/go/src/github.com/linkedin/Burrow
gpm install
go install

        ps:如果golang的环境变量设置没什么问题,编译过程应该是很顺利的。

    部署burrow

        burrow的部署很简单,只要拷贝/root/go/bin目录和/root/go/src/github.com/linkedin/Burrow/config目录到部署机器即可。

配置

    burrow.cfg

        burrow配置文件主要由多个配置段组成:

  1. [general]配置中包含了日志文件的位置和PID文件,以及一些kafka集群的共享配置。
  2. [zookeeper]配置指定一个Zookeeper集合,以便在多个Burrow副本之间提供锁定,这允许您随时运行多个Burrow副本,只允许一个副本执行通知程序。
  3. [kafka]配置指定了burrow连接和监控的单个kafka集群,子标题"local"是用于在HTTP请求和响应中标识的Kafka集群的名称,可以指定多个[kafka]子标题,以便为一个Burrow实例监视许多Kafka群集
  4. [storm]配置指定一个单一的Storm集群,用于通过Zookeeper偏移量进行监视。子标题"local"是此Storm集群映射到的Kafka集群的名称,用于在HTTP请求和通知中标识它。 可以指定多个子标题来提供一个Burrow实例来监视许多Storm群集。
  5. [notify]设置关于通知中心的配置
  6. [tickers]设置关于执行某些操作的频率的配置。
  7. [lagcheck]配置设置关于内部滞后检查算法的配置。
  8. [httpserver]配置burrow的HTTP endpoint
  9. [Notifiers]用于在消费者组处于不良状态时将电子邮件发送到指定的地址。可以为单个电子邮件地址配置多个组,并且可以根据每个电子邮件地址配置检查状态的时间间隔。可以在burrow配置文件中配置多个email通知,每个通知有自己的配置段,必须将enable=true通知器才能执行,必须在子标题部分指定发送email通知的地址
[general]
#日志目录,非必填项,包含了日志文件和PID文件
logdir=log
#日志配置文件,非必填项,指定了记录日志的格式
logconfig=config/logging.cfg
#PID文件名称,非必填项,里面包含了进程PID
pidfile=burrow.pid
#kafka client ID,非必填项,当消费kafka消息时,提供给kakfa集群的消费者ID,这遵循与topic名称相同的规则
client-id=burrow-lagchecker
#正则表达式,非必填项,如果消费者group匹配这个正则,则忽略
group-blacklist=^(console-consumer-|python-kafka-consumer-).*$

[zookeeper]
#zookeeper地址,必填项,多个主机条目可以提供更好的冗余, hostname OR hostname:port
hostname=zkhost01.example.com
hostname=zkhost02.example.com
hostname=zkhost03.example.com
#zookeeper的端口,非必填项,默认2181
port=2181
#超时时间,非必填项,连接zookeeper的超时时间
timeout=6
#znode地址,非必填项,一个znode的全路径,用于在多个burrow实例之间进行锁定,如果不存在会自动创建
lock-path=/burrow/notifier

[kafka "local"]
#broker地址,必填项,多个主机条目可以提供更好的冗余,hostname OR hostname:port
broker=kafka01.example.com
broker=kafka02.example.com
broker=kafka03.example.com
#broker端口,非必填项,默认9092
broker-port=10251
#zookeeper地址,必填项,多个主机条目可以提供更好的冗余,hostname OR hostname:port
zookeeper=zkhost01.example.com
zookeeper=zkhost02.example.com
zookeeper=zkhost03.example.com
#zookeeper端口,非必填项,默认2181
zookeeper-port=2181
#znode地址,必填项,一个znode的全路径。
zookeeper-path=/kafka-cluster
#zookeeper偏移量收集是否开启,非必填项,默认false
zookeeper-offsets=true
#offsets的topic,非必填项,默认__consumer_offsets
offsets-topic=__consumer_offsets

[storm "local"]
#zookeeper地址,必填项,多个主机条目可以提供更好的冗余,hostname OR hostname:port
zookeeper=zkhost01.example.com
zookeeper=zkhost02.example.com
zookeeper=zkhost03.example.com
#zookeeper端口,非必填项,默认2181
zookeeper-port=2181
zookeeper-path=/storm-cluster

[notify]
#检查consumergroup状态的时间间隔
interval=10

[tickers]
#多久刷新一次broker HEAD在所有partitions的偏移量,秒
broker-offsets=60

[lagcheck]
#多少个consumer的偏移量存储在partition,这决定了评估消费者滞后的窗口
intervals=10
#在消费者停止提交偏移量以从Burrow的监视中删除之后,等待几秒钟。
expire-group=604800
#消费者偏移提交之间允许的最小间隔(秒),在此间隔内的提交将被忽略。
min-distance=1
#如果配置了zk保存cluster的offsets,则多久扫描一次Zookeeper来检查偏移量
zookeeper-interval=60
#刷新Zookeeper里面的消费者列表的频率。
zk-group-refresh=300

[httpserver]
#是否开启HTTP server,默认false
server=on
#HTTPS server监听的端口
port=8000
; Alternately, use listen
; listen=host:port
; listen=host2:port2

[smtp]
#邮件服务器地址
server=mailserver.example.com
#邮件服务器端口
port=25
#认证类型,如果没auth则是空,plain这是明文的用户和密码
auth-type=plain
username=emailuser
password=s3cur3!
#发邮件的地址
from=burrow-noreply@example.com
#邮件模板
template=config/default-email.tmpl
[emailnotifier "bofh@example.com"]
#两个逗号分隔的字符串,第一个字符串表示kafka集群名称(上文定义的),第二个字符串表示监控那个consumer group
group=local,critical-consumer-group
group=local,other-consumer-group
#检查consumer group的时间间隔
interval=60
#是否开启email通知
enable=true

    http api

        用户主要通过http api接口来查看consumer的信息,主要有以下接口:

  1. 健康检查:/burrow/admin
  2. 列出kafka集群:/v2/kafka
  3. 列出zk集群:/v2/zookeeper
  4. 列出单个kafka集群的详情:/v2/kafka/(cluster)
  5. 列出单个kafka集群的消费者:/v2/kafka/(cluster)/consumer
  6. 删除某个kafka集群的消费者group:/v2/kafka/(cluster)/consumer/(group)
  7. 列出单个kafka集群某个消费者group的topic:/v2/kafka/(cluster)/consumer/(group)/topic
  8. 列出单个kafka集群某个消费者group的topic详情:/v2/kafka/(cluster)/consumer/(group)/topic/(topic)
  9. 返回仅包含处于不良状态的分区的对象:/v2/kafka/(cluster)/consumer/(group)/status 
  10. 返回包含消费者的所有分区的对象,而不管分区的评估状态如何:/v2/kafka/(cluster)/consumer/(group)/lag
  11. 列出单个kafka集群的topic:/v2/kafka/(cluster)/topic
  12. 列出单个kafka集群的单个topic详情:/v2/kafka/(cluster)/topic/(topic)

测试

展开阅读全文
打赏
0
2 收藏
分享
加载中
fatal: unable to access 'https://github.com/linkedin/burrow/': Peer reports incompatible or unsupported protocol version.
package github.com/linkedin/burrow: exit status 128
[root@novalocal .ssh]#
2019/07/10 15:36
回复
举报
执行 go get github.com/linkedin/Burrow 时候会报上面的错误,有遇到吗?
2019/07/10 15:38
回复
举报
China_OS博主
不会的 看起来像被墙
2019/07/10 19:34
回复
举报
更多评论
打赏
3 评论
2 收藏
0
分享
返回顶部
顶部