Kafka 监控

市面上主流的监控框架

JMXTool 工具

JMXTool 工具。严格来说,它并不是一个框架,只是社区自带的一个工具。JMXTool 工具能够实时查看 Kafka JMX 指标。

需要运行下面的命令,来获取它的使用方法的完整介绍。

bin/kafka-run-class.sh kafka.tools.JmxTool

主要参数说明:

Kafka 监控

例如:下面这条命令,表示每 5 秒查询一次过去 1 分钟的 BytesInPerSec 均值。

bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec --jmx-url service:jmx:rmi:///jndi/rmi://:9997/jmxrmi --date-format "YYYY-MM-dd HH:mm:ss" --attributes OneMinuteRate --reporting-interval 1000

注意事项:

  • 设置 –jmx-url 参数的值时,需要指定 JMX 端口。在这个例子中,端口是 9997,在实际操作中,你需要指定你的环境中的端口。
  • 由于我是直接在 Broker 端运行的命令,因此就把主机名忽略掉了。如果你是在其他机器上运行这条命令,你要记得带上要连接的主机名。

Kafka Manager

Kafka Manager 是Kafka监控里面最主流,也是监控工具最好用的一个框架。是雅虎公司于 2015 年开源的一个 Kafka 监控框架。这个框架用 Scala 语言开发而成,主要用于管理和监控 Kafka 集群。

当前,Kafka Manager 最新版是 3.0.0.4。在其 Github官网上下载 tar.gz 包之后,我们执行解压缩,可以得到 kafka-manager-3.0.0.4 目录。之后,我们需要运行 sbt 工具来编译 Kafka Manager。sbt 是专门用于构建 Scala 项目的编译构建工具,类似于我们熟知的 Maven 和 Gradle。Kafka Manager 自带了 sbt 命令,我们直接运行它构建项目就可以了

结果如图:

Kafka 监控

Burrow

Burrow 是 LinkedIn 开源的一个专门监控消费者进度的框架,但发展缓慢,社区活跃度低。框架是用 Go 写的,安装时要求必须有 Go 运行环境,所以,Burrow 在普及率上不如其他框架。另外,Burrow 没有 UI 界面,只是开放了一些 HTTP Endpoint。

JMXTrans + InfluxDB + Grafana

在更流行的做法是,在一套通用的监控框架中监控 Kafka,比如使用JMXTrans + InfluxDB + Grafana 的组合。由于 Grafana 支持对JMX 指标的监控,因此很容易将 Kafka 各种 JMX 指标集成进来。(付费产品)

如图所示:

Kafka 监控

图中集中了很多监控指标,比如 CPU 使用率、GC 收集数据、内存使用情况等。除此之外,这个仪表盘面板还囊括了很多关键的 Kafka JMX 指标,比如 BytesIn、BytesOut 和每秒消息数等。将这么多数据统一集成进一个面板上直观地呈现出来,是这套框架非常鲜明的特点。

Kafka 监控

从这张图中,我们可以直观地观测到整个 Kafka 集群的主题数量、ISR 副本数量、各个主题对应的 TPS 等数据。当然,Control Center 提供的功能远不止这些,你能想到的所有 Kafka 运维管理和监控功能,Control Center 几乎都能提供。

kafka Eagle

Kafka Eagle 是由国人开发和维护,框架使用的语言为java。而且目前还在积极地演进着。根据 Kafka Eagle 官网的描述,它支持最新的 Kafka 2.x 版本,除了提供常规的监控功能之外,还开放了告警功能(Alert)

小结

Kafka 监控

安装Kafka Eagle

1、下载kafka-eagle-bin

Kafka 监控

2、上传到服务器

3、解压文件到本地

> tar -zxvf  kafka-eagle-bin-1.4.4.tar.gz 

4、进入kafka-eagle-bin-1.4.4再次解压

> tar -zxvf  kafka-eagle-web-1.4.4-bin.tar.gz

5、使用root权限编辑环境变量,设置JDK和Kafka-eagle地址

/dev/ap/kafka-eagle-bin-1.4.6/kafka-eagle-web-1.4.6

> sudo vi /etc/profile
>
> #Kafka_Web
> export JAVA_HOME=/developer/jdk1.8.0_231
> export KE_HOME=/developer/kafka-eagle-bin-1.4.4/kafka-eagle-web-1.4.4
> export PATH=$PATH:$JAVA_HOME/bin:$KE_HOME/bin

6、刷新配置

> source /etc/profile

7、给启动文件执行权限

> cd  kafka-eagle-web-1.4.4/bin
>
> chmod 777 ke.sh

8、修改conf中的system-config.properties配置文件

######################################
#配置多个Kafka集群所对应的Zookeeper
######################################
kafka.eagle.zk.cluster.alias=cluster1,cluster2
cluster1.zk.list=dn1:2181,dn2:2181,dn3:2181
cluster2.zk.list=tdn1:2181,tdn2:2181,tdn3:2181

######################################
# 设置Zookeeper线程数
######################################
kafka.zk.limit.size=25

######################################
# 设置Kafka Eagle浏览器访问端口
######################################
kafka.eagle.webui.port=8048

######################################
# 如果你的offsets存储在Kafka中,这里就配置
# 属性值为kafka,如果是在Zookeeper中,可以
# 注释该属性。一般情况下,Offsets的也和你消
# 费者API有关系,如果你使用的Kafka版本为0.10.x
# 以后的版本,但是,你的消费API使用的是0.8.2.x
# 时的API,此时消费者依然是在Zookeeper中
######################################
cluster1.kafka.eagle.offset.storage=kafka
######################################
# 如果你的集群一个是新版本(0.10.x以上),
# 一个是老版本(0.8或0.9),可以这样设置,
# 如果都是新版本,那么可以将值都设置成kafka
######################################
cluster2.kafka.eagle.offset.storage=zookeeper

######################################
# 是否启动监控图表,默认是不启动的
######################################
kafka.eagle.metrics.charts=false

######################################
# 在使用Kafka SQL查询主题时,如果遇到错误,
# 可以尝试开启这个属性,默认情况下,不开启
######################################
kafka.eagle.sql.fix.error=false

######################################
# 邮件服务器设置,用来告警
######################################
kafka.eagle.mail.enable=false
kafka.eagle.mail.sa=
kafka.eagle.mail.username=
kafka.eagle.mail.password=
kafka.eagle.mail.server.host=
kafka.eagle.mail.server.port=

######################################
# 设置告警用户,多个用户以英文逗号分隔
######################################
kafka.eagle.alert.users=smartloli.org@gmail.com


######################################
# 超级管理员删除主题的Token
######################################
kafka.eagle.topic.token=keadmin

######################################
# 如果启动Kafka SASL协议,开启该属性
######################################
kafka.eagle.sasl.enable=false
kafka.eagle.sasl.protocol=SASL_PLAINTEXT
kafka.eagle.sasl.mechanism=PLAIN

######################################
# Kafka Eagle默认存储在Sqlite中,如果要使用
# MySQL可以替换驱动、用户名、密码、连接地址
######################################
kafka.eagle.driver=com.mysql.jdbc.Driver
kafka.eagle.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
kafka.eagle.username=root
kafka.eagle.password=123456

#kafka.eagle.driver=org.sqlite.JDBC
#kafka.eagle.url=jdbc:sqlitE:/Users/albert/workspace/kafka-egale/db/ke.db
#kafka.eagle.username=root
#kafka.eagle.password=root

9、进入bin目录启动监控界面

>  ./ke.sh start

Kafka 监控

图中包含了登录地址、访问账号和密码

10、登录页面查看监控数据

http://127.0.0.1:8048/ke

Kafka 监控

常用命令

# 查看Kafka Eagle运行状态
ke.sh status

# 停止Kafka Eagle
ke.sh stop

# 查看Kafka Eagle GC情况
ke.sh gc

# 查看Kafka Eagle服务器资源占用情况,例如TCP、句柄等
ke.sh stats

# 查看Kafka Eagle版本号
ke.sh version

# 查看Kafka Eagle服务器上JDK的编码情况(如果JDK编码不是UTF-8,可能会有异常出现,执行如下命令,根据提示来修复JDK编码问题)
ke.sh jdk

# 查看Kafka Eagle中是否存在某个类(如果需要精确,类名前面可以加上包名)
ke.sh find [ClassName]

小结

总的来说,Kafka Eagle提供了简单、易用的页面,部署方便。同时,提供非常详细的操作手册,根据官网提供的操作手册来安装Kafka Eagle,一般都可以正常使用。另外,有时候可能会在日志中发现一些连接超时或是空指针异常,对于这类问题,首先需要检测Kafka集群的各个Broker节点JMX_PORT是否开启(这个Kafka默认是不开启),然后就是空指针异常问题,这类问题通常发生在Kafka集群配置了ACL,这就需要认真检测Kafka Eagle配置文件中ACL信息是否正确(比如设置的用户名和密码是否正确,以及用户是否拥有访问Topic的权限等)

vi bin/kafka-server-start.sh
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-server -Xms2G -Xmx2G -XX:PermSize=128m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=5 -XX:InitiatingHeapOccupancyPercent=70"
    # 开启JMX_PORT端口,端口开启后,Kafka Eagle系统会自动感知获取
    export JMX_PORT="9999"
    # 注释脚本中默认的信息
    # export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!