kafka监控部署
kafka使用Prometheus、Grafana和kafka_exporter来构建kafka指标监控
问题背景
在实时场景下,对于数据积压是很常见的,我们更希望如何去快速知道有没有数据积压,目前消费了多少,速度怎么样,趋势如何。可以使用原生命令kafka-consumer-groups.sh --bootstrap-server node01:9092,node02:9092,node03:9092 --group test --describe
来查看当前group所消费的topic的进度如何,如果group很多,topic很多,这样使用命令的效率反而会更低
解决方案
将Kafka的度量指标暴露给监控系统,以便进行数据收集、分析和可视化展示。使用kafka-exporter、Prometheus和Grafana这一组合来进行Kafka监控的原理和流程大致如下:
原理概述
-
kafka-exporter: kafka-exporter是一个代理或者中间件,它的主要任务是将Kafka通过JMX暴露的指标转换成Prometheus能够理解的格式。Kafka内部使用Yammer Metrics来收集各种性能和状态指标,并通过JMX暴露出来。kafka-exporter通过连接到Kafka Broker的JMX端口,读取这些指标,并以HTTP端点的形式提供给Prometheus拉取
-
Promethues: Promethues是一个开源的监控系统,可以定期地从目标拉取指标数据,Prometheus负责收集这些数据,并存储在本地数据库中,支持查询语言 PromQL 进行灵活的数据检索和聚合运算
-
Grafana: Grafana是一个强大的可视化平台,可以连接到Prometheus作为数据源,用来展示和分析监控数据。用户可以在Grafana中创建仪表板,通过各种图表和面板直观地展示Kafka的性能指标,如消息吞吐量、延迟、消费者滞后等
监控部署
kafka-exporter部署
-
github上下载官网安装包
-
解压安装包
tar -zxvf kafka_exporter-1.7.0.linux-amd64.tar.gz -C kafka_exporter-1.7.0
-
启动程序
nohup ./kafka_exporter --kafka.server=node01:9092 --kafka.server=node02:9092 --kafka.server=node03:9092 > /dev/null 2>&1 &
-
去web上查看是否成功生成metrics数据
如果生成如下的结果,那就说明metrics数据已经采集到了
Prometheus采集metrics数据
-
配置数据采集地址
在配置好监控数据源以后,现在就要告诉Prometheus应该去哪里采取数据给存放到本地中。打开Promethues的配置文件,增加kafka-exporter暴露的地址即可
执行以下代码,代开配置文件vim promethues.yml
在文件末尾添加以下代码
- job_name: kafka-prostatic_configs:- targets: ['node01:9308']labels:instance: kafka-pro
这段代码的含义就是告诉Prometheus去targets采取数据来
job_name
: 指定监控任务的名称
target
: 监控的目标地址
lables
: 为监控目标添加额外的标签信息 -
重启Premothues服务
sudo systemctl restart premothues
-
查看数据是否被采集到
在web中打开网页http://10.10.1.27:9090/targets,查看是否出现我们的job,成功的情形如下:
status
: 服务状态,如果为up,表示服务可用
数据导入到Grafana形成看板
-
创建数据源
选择使用Prometheus的datasource
指定地址
-
下载看板模板json
在Grafana官网下载看板模板
-
配置看板
创建Prometheus的数据源
导入json看板配置文件
选择Prometheus的数据源
现实看板