栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kafka JMX指标&消费者积压等监控体系构建

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kafka JMX指标&消费者积压等监控体系构建

针对于非kerberos环境非SSL环境的kafka version 0.11&2.5,其他版本有略微差异,没有大的改变

一、kafka部署时添加

将下面的jar包跟yaml配置文件都放在kafka的bin目录下

1、jmx_prometheus_javaagent-0.15.0.jar下载

这个jar包是prometheus 提供的 jmx_exporter ,作用是来收集 kafka 暴露的jmx指标。
jar包可以与下面的yaml文件进行配合,从而自己修改指标名称大小写、name等格式的转换(看自己需求)

官方jar下载地址jmx_prometheus_javaagent-0.15.0.jar

我自己kafka集群是2.5版本
用的是jmx_prometheus_javaagent-0.15.0.jar版本

2、kafka.yaml下载

配置文件下载地址kafka-2_0_0.yml


他有很多技术组件的jmx指标配置文件

我自己kafka集群是2.5版本,对kafka-2_0_0.yml进行了些改造
我的配置文件kafka.yaml
如下

lowercaseOutputName: true
rules:
# Special cases and very specific rules
- pattern : kafka.server<>Value
  name: kafka_server_$1_$2
  type: GAUGE
  labels:
    clientId: "$3"
    topic: "$4"
    partition: "$5"
- pattern : kafka.server<>Value
  name: kafka_server_$1_$2
  type: GAUGE
  labels:
    clientId: "$3"
    broker: "$4:$5"

- pattern : kafka.server<>oneMinuteRate
  name: kafka_server_kafkarequesthandlerpool_requesthandleravgidlepercent_total
  type: GAUGE

- pattern : kafka.server<>connections
  name: kafka_server_socketservermetrics_connections
  type: GAUGE
  labels:
    client_software_name: "$1"
    client_software_version: "$2"
    listener: "$3"
    network_processor: "$4"

- pattern : 'kafka.server<>(.+):'
  name: kafka_server_socketservermetrics_$3
  type: GAUGE
  labels:
    listener: "$1"
    network_processor: "$2"

# Count and Value
- pattern: kafka.(.*)<>(Count|Value)
  name: kafka_$1_$2_$3
  labels:
    "$4": "$5"
    "$6": "$7"
- pattern: kafka.(.*)<>(Count|Value)
  name: kafka_$1_$2_$3
  labels:
    "$4": "$5"
- pattern: kafka.(.*)<>(Count|Value)
  name: kafka_$1_$2_$3

# Percentile
- pattern: kafka.(.*)<>(d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
    "$6": "$7"
    quantile: "0.$8"
- pattern: kafka.(.*)<>(d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
    quantile: "0.$6"
- pattern: kafka.(.*)<>(d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    quantile: "0.$4"
3、放到bin目录下

将上面的jar包跟yaml配置文件都放在kafka的bin目录下
放到其他路径下也行,相应的底下启动配置时要写对路径

二、修改kafka启动脚本

配合kafka启动脚本,修改 bin/kafka_server_start.sh,添加常量,只需要在一个broker实例中添加即可,我这边在集群里每一个broker实例都做了步骤一的操作,并修改了kafka启动脚本

 export JMX_PORT="9999"
 export KAFKA_OPTS="-javaagent:$base_dir/jmx_prometheus_javaagent-0.15.0.jar=9991:$base_dir/kafka.yaml"

注意如果步骤一中你下载的jar跟配置文件不在bin下,则要修改KAFKA_OPTS中对应的路径


9991为当前broker通过jar跟yaml暴露出来的jmx指标端口

三、验证broker是否暴露jmx成功

curl http://broker_1:9991/jmx | head -n 10
curl http://broker_2:9991/jmx | head -n 10
curl http://broker_3:9991/jmx | head -n 10
是否能够返回jmx指标

四、部署消费者积压等指标

在步骤一二三中,我们其实发现无法通过jmx指标获取到每个主题所有的消费者Lag积压情况

我们需要引入kafka_exporter进行暴露这个指标以及主题&消费者其他指标详情

1、下载kafka_exporter

https://github.com/danielqsj/kafka_exporter/releases

在release版本中下载自己需要的版本
我使用的是kafka_exporter-1.2.0.linux-amd64版本
听说这个东西好像有支持kerberos环境kafka的版本,没验证过

2、部署机器

随便一台可以访问kafka集群的物理机
注意:只需要一台机器即可(集群内外都可以)
我这边用的是主机名为exporter_host的物理机
解压进入文件后,我这边加了很多start脚本,每一个脚本对应一个kafka集群,每一个脚本暴露一个端口,到时候在用Prometheus进行收集这些端口暴露的集群指标

cat start_test.sh

nohup ./kafka_exporter --kafka.server=broker_1:9092 --kafka.version=2.5.0 --log.level=info > kafka_exporter_test.log  --web.listen-address=:9307 &
3、验证kafka_exporter是否启动成功

curl http://exporter_host:9307/metrics | head -n 10
是否能够返回metrics指标

五、指标用Prometheus收集 部署Prometheus&alertManager

自行百度,物理机部署以及k8s部署都行
如果需要依据Prometheus的rules文件来进行告警的话也可以部署alertManager
我这边是alertManager+prometheus上了云,比较方便,干净又卫生

1、Prometheus配置文件 1.1、prometheus.yml
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

rule_files:
  - /etc/prometheus/rules.yml
alerting:
  alertmanagers:
  - static_configs:
    - targets: ["localhost:9093"]
scrape_configs:
  
  - job_name: 'kafka_exporter-dev'
    static_configs:
      - targets: ['exporter_host:9307']
  - job_name: 'kafka'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
    - targets: ['broker_1:9991',
                'broker_2:9991', 
                'broker_3:9991']
      labels:
        env: "dev"
        group: "kafka-CDMP-dev"
        cluster_name: "kafka-CDMP-dev"
        namespace: "kafka-CDMP-dev"
    
1.2、rules.yml

如果有告警需求可以咨询我

六、Grafana展示

以上五步骤,把kafka的jmx以及exporter都暴露出来了
我们就可以选择各种各样的dashboard进行grafana展示了

1、jmx的

grafana dashboards :https://help.aliyun.com/document_detail/141108.html?spm=a2c4g.11186623.6.570.7b1b65732naKbXARMS Kafka Dashboard:https://grafana.com/grafana/dashboards/10973confluent公司:https://github.com/confluentinc/jmx-monitoring-stacks/tree/6.0.1-post/jmxexporter-prometheus-grafana/assets/prometheus/grafana/provisioning/dashboards

confluent公司里面的挺多,可以参考用

白嫖真香哈,我用的dashboard是将confluent公司的kafka-overview.json魔改了的(也弄了份apache hadoop jmx的dashboard,因为市面上都是HDP或者CDH发行版指标的dashboard,与apache暴露的指标还是不一样)

2、kafka_exporter的

https://grafana.com/grafana/dashboards/7589

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号