Kafka系列文章:
Kafka系列 —— 入门及应用场景 & 部署 & 简单测试
Kafka系列 —— Kafka核心概念
Kafka系列 —— Kafka常用命令
常见Kafka监控工具介绍
1 Kafka-web-console
地址:https://github.com/claudemamo/kafka-web-console
我们可以看到,对于该项目已经不再支持了,使用KafkaManager替代了
2 Kafkaoffsetmonitor
地址:https://github.com/quantifind/KafkaOffsetMonitor
该组件时间也比较久远了
3 KafkaManager
地址:https://github.com/yahoo/kafka-manager
公司目前也使用的这款监控工具
- 不足点:没有实时显示的曲线图表
- 优点:很多Kafka的命令直接可以通过界面化的操作,点点就能够完成了
4 Kafka-egale
地址:https://github.com/smartloli/kafka-eagle
5 AnotherKafkaMonitor
地址:https://github.com/triffic-tang/AnotherKafkaMonitor
6 Kafka-monitor
地址:https://github.com/linkedin/kafka-monitor
7 Availability-Monitor-for-Kafka
地址:https://github.com/Microsoft/Availability-Monitor-for-Kafka
8 chaperone
地址:https://github.com/uber/chaperone
9 JMXtrans + InfluxDB + Grafana实现Kafka性能指标监控
文章地址:http://www.tuicool.com/articles/ieUbaaN
10 metricbeat + Elasticsearch + Kibana
地址:https://www.elastic.co/products/beats/metricbeat
KafkaManger使用(sbt安装与编译)
1.下载sbt
地址:http://www.scala-sbt.org/download.html
[root@hadoopnn-01 app]# rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring sbt-0.13.13.tgz...
100% 1025 KB 1025 KB/sec 00:00:01 0 Errors
2.解压
[root@hadoopnn-01 app]# tar -zxvf sbt-0.13.13.tgz
[root@hadoopnn-01 app]# mv sbt-launcher-packaging-0.13.13 sbt
3.添加脚本文件
[root@hadoopnn-01 bin]# vi sbt
#!/usr/bin/env bash
BT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar /root/learnproject/app/sbt/bin/sbt-launch.jar "$@"
4.修改权限和环境变量
[root@hadoopnn-01 bin]# chmod u+x sbt
[root@hadoopnn-01 bin]# vi /etc/profile
export SBT_HOME=/root/learnproject/app/sbt
export PATH=$SBT_HOME/bin:$SPARK_HOME/bin:$SCALA_HOME/bin:$HADOOP_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
"/etc/profile" 94L, 2265C written
[root@hadoopnn-01 bin]# source /etc/profile
5.测试
第一次执行时,会下载一些文件包
[root@hadoopnn-01 bin]# sbt sbt-version
[root@hadoopnn-01 bin]#
6.安装jdk1.8并配置环境变量
7.下载kafka-manager,使用sbt编绎
[root@hadoopnn-01 ~]# cd /root/learnproject/compilesoft
[root@hadoopnn-01 compilesoft]# git clone https://github.com/yahoo/kafka-manager.git
[root@hadoopnn-01 compilesoft]# cd kafka-manager/
[root@hadoopnn-01 kafka-manager]# sbt clean dist
8.解压
[root@hadoopnn-01 kafka-manager]# mv /root/learnproject/compilesoft/kafka-manager/target/universal/kafka-manager-1.3.2.1.zip /root/learnproject/app/
[root@hadoopnn-01 kafka-manager]# cd ../
[root@hadoopnn-01 app]# unzip kafka-manager-1.3.2.1.zip
[root@hadoopnn-01 app]# cd kafka-manager-1.3.2.1/conf
[root@hadoopnn-01 conf]# vi application.conf
kafka-manager.zkhosts="192.168.1.58:2181,192.168.1.59:2181,192.168.1.60:2181/kafka"
9.后台运行
[root@hadoopnn-01 kafka-manager-1.3.2.1]# nohup ./bin/kafka-manager -Dconfig.file=./conf/application.conf -Dhttp.port=9999 -java-home /usr/java/jdk1.8.0_102 >kafka-manager.log 2>&1 &
web ui:http://192.168.1.55:9999/
Kafka Egal使用
[root@hadoop001 kafka]# kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
[root@hadoop001 software]# tar -xzvf kafka-eagle-bin-1.2.1.tar.gz
[root@hadoop001 software]# cd kafka-eagle-bin-1.2.1
[root@hadoop001 kafka-eagle-bin-1.2.1]# tar -xzvf kafka-eagle-web-1.2.1-bin.tar.gz
[root@hadoop001 kafka-eagle-web-1.2.1-bin]# vi conf/system-config.properties
######################################
# multi zookeeper&kafka cluster list
######################################
kafka.eagle.zk.cluster.alias=ruozedata_cluster
ruozedata_cluster.zk.list=192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181
#kafka.eagle.zk.cluster.alias=cluster1,cluster2
#cluster1.zk.list=tdn1:2181,tdn2:2181,tdn3:2181
#cluster2.zk.list=xdn10:2181,xdn11:2181,xdn12:2181
[root@hadoop001 kafka-eagle-web-1.2.1-bin]# mkdir -p /hadoop/kafka-egale/db/
[root@hadoop001 kafka-eagle-web-1.2.1-bin]# cd ../bin
[root@hadoop001 bin]# pwd
/opt/software/kafka-eagle-bin-1.2.1/kafka-eagle-web-1.2.1/bin
[root@hadoop001 bin]# export KE_HOME=/opt/software/kafka-eagle-bin-1.2.1/kafka-eagle-web-1.2.1
[root@hadoop001 bin]# chmod +x ke.sh
[root@hadoop001 bin]# ./ke.sh start
Status Code[0]
[Job done!]
Welcome to
__ __ ___ ____ __ __ ___ ______ ___ ______ __ ______
/ //_/ / | / __/ / //_/ / | / ____/ / | / ____/ / / / ____/
/ ,< / /| | / /_ / ,< / /| | / __/ / /| | / / __ / / / __/
/ /| | / ___ | / __/ / /| | / ___ | / /___ / ___ |/ /_/ / / /___ / /___
/_/ |_| /_/ |_|/_/ /_/ |_| /_/ |_| /_____/ /_/ |_|\____/ /_____//_____/
Version 1.2.1
*******************************************************************
* Kafka Eagle Service has started success!
* Welcome, Now you can visit 'http://<your_host_or_ip>:port/ke'
* Account:admin ,Password:123456
*******************************************************************
* <Usage> ke.sh [start|status|stop|restart|stats] </Usage>
* <Usage> http://ke.smartloli.org/ </Usage>
*******************************************************************
[root@hadoop001 kafka-eagle-web-1.2.1]# netstat -nlp|grep 14687
tcp 0 0 :::8048 :::* LISTEN 14687/java
tcp 0 0 ::ffff:127.0.0.1:8065 :::* LISTEN 14687/java
tcp 0 0 :::8069 :::* LISTEN 14687/java
[root@hadoop001 kafka-eagle-web-1.2.1]#
web ui:http://192.168.1.102:8048/
JMXtrans + InfluxDB + Grafana实现Kafka性能指标监控
1.kafka集群搭建
2.在Kafka上打开JMX
2.1 修改kafka-serverstart.sh文件
#修改上面的内容变成,KAFKA_HEAP_OPTS这个根据自己的主机进行配置,测试机器是4核8G,所以采用下面的配置
#这个配置成本机的IP –Djava.rmiserver.hostname
#开启jvm的rmi配置可以让kafka-manager提供更详细的kafka操作统计数据
#增加一个JMX_PORT的配置,指定一个端口用于接受外部连接,注意如部署、运行在非root用户下,必须指定1024以上端口
2.2 重启Kafka生效
bin/kafka-server-stop.sh
bin/kafka-server-start.sh config/server.properties &
2.3 重启后观察可以发现JMX已经启动了
ps -ef | grep kafka
netstat -an | grep 9999
3.JMXtrans部署
JMXtrans:收集来自已经启动jmx的Kafka服务的数据
[root@hadoopdn-01 app]# mkdir jmxtrans
[root@hadoopdn-01 app]# cd jmxtrans/
[root@hadoopdn-01 jmxtrans]# wget http://central.maven.org/maven2/org/jmxtrans/jmxtrans/263/jmxtrans-263-all.jar
[root@hadoopdn-01 jmxtrans]# vi kafka.json
# 见kafka.json文件,后续上传
[root@hadoopdn-01 jmxtrans]# wget https://raw.githubusercontent.com/jmxtrans/jmxtrans/master/jmxtrans/jmxtrans.sh --no-check-certificate
[root@hadoopdn-01 jmxtrans]# chmod +x jmxtrans.sh
[root@hadoopdn-01 app]# scp -r jmxtrans root@hadoopdn-02:/root/learnproject/app/
[root@hadoopdn-01 app]# scp -r jmxtrans root@hadoopdn-03:/root/learnproject/app/
4.jconsole相关设置与查看
打开jconsole.exe,路径:$JAVA_HOME/bin/
输入Remote Process,具体信息在kafka-server-start.sh修改的时候,加上的KAFKA_JMX_OPTS中有配置,如下进行连接:
弹出警告,选择Insecure即可:
选择Mbeans,进入到页面之后可以看见很多的指标,选择kafka.network–>RequestMetrics
–> RequestsPerSec–> FetchConsumer
选择项:kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchConsumer:
查看Attributes:
5.模板文件test.json介绍
模板文件见test.json,里面有对应的内容,后续会上传
port:jmx进程的端口,这里是9999;在kafka-server-start.sh修改的时候,加上的KAFKA_JMX_OPTS中,jmx_port的端口号
host:kafka的ip
alias:别名
目标端写在哪里,写到时序数据库,对应的配置
attr就是前面的属性,Attributes values中的内容
6.InfluxDB:时序数据库
地址:https://docs.influxdata.com/influxdb/v1.2/
每一行数据都会有一个时间字段的值,如下:
2017-03-03 11:00:00.456 1 xiaoming boy 18
2017-03-03 11:00:10.356 2 xiaowang boy 45
6.1 安装
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
sudo yum install influxdb
sudo service influxdb start
启动服务之后,直接进入influx:
6.2 常用命令
未使用rfc3339:
注意:不能使用show tables命令,取而代之的是show measurements命令
对比,使用rfc3339之后:
7. Grafana:可视化
7.1 安装
文档:http://docs.grafana.org/installation/rpm/
7.2 web ui
open web http://ip:3000
8. 启动采集服务(需要test.json)
8.1 启动命令&test.json相关配置项解读
一般会有2种收集方式:
- 只部署1台,配置多台去采集
- 每台Kafka节点都部署一个(优先选择)
JMXtrans默认启动是60s秒采集一次,使用参数SECONDS_BETWEEN_RUNS=5进行控制修改时间多久采集一次
启动采集服务:
JMXTRANS_OPTS="-Dport1=9999 -Dhost1=hadoopdn-01 -Dalias1=kafka1 \
-DinfluxUrl=http://hadoopdn-04:8086/ -DinfluxDb=kafka -DinfluxUser=admin -DinfluxPwd=admin" \
SECONDS_BETWEEN_RUNS=5 \
JAR_FILE=jmxtrans-263-all.jar \
./jmxtrans.sh start test.json
启动的时候需要指定test.json文件
查看状态:
JMXTRANS_OPTS="-Dport1=9999 -Dhost1=hadoopdn-01 -Dalias1=kafka1 \
-DinfluxUrl=http://hadoopdn-04:8086/ -DinfluxDb=kafka -DinfluxUser=admin -DinfluxPwd=admin" \
SECONDS_BETWEEN_RUNS=5 \
JAR_FILE=jmxtrans-263-all.jar \
./jmxtrans.sh status test.json
采集服务启动和状态查看的具体截图:
test.json中部分内容的解释:
resultAlias中的内容代表的是采集到InfluxDB中的表名
attr中的内容代表的是采集到InfluxDB中对应表中的各个字段名
8.2 InfluxDB中查看采集到的信息
注意:
这里执行delete操作是为了清除原来操作所遗留下的信息
delete之后重新开启采集服务,重新采集入InfluxDB库就OK了
重新开启采集服务之后,发现相应的数据写入到了InfluxDB中:
9. Dashboards配置
配置完成之后的最终效果图: