使用Grafana + jmx 监控 kafka3.5 的过程

发布时间 2023-10-20 16:54:40作者: 济南小老虎

使用Grafana + jmx 监控 kafka3.5 的过程


摘要

周五一边进行数据库监控, 同时想着部署一套监控系统.
能够监控一下kafka等中间件
结果不想自己遇到了很多坑. 
下午有同事语音告诉自己一些排查问题的方式与方法.
自己又多花了半个小时才将数据捞出来.
感觉自己对很多工具的使用还是不够体系, 需要加强学习.
但是还是需要多学习和多记录的

StudyFrom

https://blog.csdn.net/LCBUSHIHAHA/article/details/132216491
https://grafana.com/grafana/dashboards/18276-kafka-dashboard/

需要注意的是 两者其实是一套机制.
问题的原因其实在于 3.5的kafka可能是与这个文档存在兼容性问题的. 

部署方式

注意 我这边kafka的安装目录是 /usr/kafka 所以后面脚本比较简洁
下载jmx的文件到 /usr/kafka的目录下面

jmx_prometheus_javaagent-0.19.0.jar
然后创建一个配置文件 /usr/kafka/config.yaml 

还需要修改一下启动文件
我这边的就是 /usr/kafka/bin/kafka-server-start.sh 
可以在文件的最前面增加上:
export KAFKA_OPTS=-javaagent:/usr/kafka/jmx_prometheus_javaagent-0.19.0.jar=19092:/usr/kafka/config.yaml

注意端口需要是不被占用的端口. 

配置文件内容

lowercaseOutputName: true

rules:
# Special cases and very specific rules
- pattern : kafka.server<type=(.+), name=(.+), clientId=(.+), topic=(.+), partition=(.*)><>Value
  name: kafka_server_$1_$2
  type: GAUGE
  labels:
    clientId: "$3"
    topic: "$4"
    partition: "$5"
- pattern : kafka.server<type=(.+), name=(.+), clientId=(.+), brokerHost=(.+), brokerPort=(.+)><>Value
  name: kafka_server_$1_$2
  type: GAUGE
  labels:
    clientId: "$3"
    broker: "$4:$5"
- pattern : kafka.coordinator.(\w+)<type=(.+), name=(.+)><>Value
  name: kafka_coordinator_$1_$2_$3
  type: GAUGE

# Generic per-second counters with 0-2 key/value pairs
- pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*, (.+)=(.+), (.+)=(.+)><>Count
  name: kafka_$1_$2_$3_total
  type: COUNTER
  labels:
    "$4": "$5"
    "$6": "$7"
- pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*, (.+)=(.+)><>Count
  name: kafka_$1_$2_$3_total
  type: COUNTER
  labels:
    "$4": "$5"
- pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*><>Count
  name: kafka_$1_$2_$3_total
  type: COUNTER

- pattern: kafka.server<type=(.+), client-id=(.+)><>([a-z-]+)
  name: kafka_server_quota_$3
  type: GAUGE
  labels:
    resource: "$1"
    clientId: "$2"

- pattern: kafka.server<type=(.+), user=(.+), client-id=(.+)><>([a-z-]+)
  name: kafka_server_quota_$4
  type: GAUGE
  labels:
    resource: "$1"
    user: "$2"
    clientId: "$3"

# Generic gauges with 0-2 key/value pairs
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+), (.+)=(.+)><>Value
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
    "$6": "$7"
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+)><>Value
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
- pattern: kafka.(\w+)<type=(.+), name=(.+)><>Value
  name: kafka_$1_$2_$3
  type: GAUGE

# Emulate Prometheus 'Summary' metrics for the exported 'Histogram's.
#
# Note that these are missing the '_sum' metric!
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+), (.+)=(.+)><>Count
  name: kafka_$1_$2_$3_count
  type: COUNTER
  labels:
    "$4": "$5"
    "$6": "$7"
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.*), (.+)=(.+)><>(\d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
    "$6": "$7"
    quantile: "0.$8"
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+)><>Count
  name: kafka_$1_$2_$3_count
  type: COUNTER
  labels:
    "$4": "$5"
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.*)><>(\d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
    quantile: "0.$6"
- pattern: kafka.(\w+)<type=(.+), name=(.+)><>Count
  name: kafka_$1_$2_$3_count
  type: COUNTER
- pattern: kafka.(\w+)<type=(.+), name=(.+)><>(\d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    quantile: "0.$4"

重启添加相关prometheus

修改好配置文件和config.yaml 后需要重启kafka
然后修改prometheus 的配置文件
增加对应的job 

需要注意, 这里面一个job 对应一套kafka, 我这边是single的节点, 所以比较简单一些. 
  - job_name: 'kafka203'
    metrics_path: /metrics
    static_configs:
    - targets: ["192.168.254.203:19092"]
      labels:
        instance: kafka203
注意ip地址和端口的对应关系, 重启或者是刷新prometheus 
就可以进行验证了 可以通过
prometheus的界面进行验证
http://192.168.255.xx:port/targets?search=
可以通过show more 的方式进行查看
打开链接 验证可以监控到jmx的相关信息. 

导入grafana的面板

ID为: 18276
需要注意, 因为缺少一个必备的 变量, 直接引入时无法使用的.
而且貌似 3.5和jmx0.19 的版本缺少了一个必备的变量参数, 建议可以修改grafana 的这个 18276 的配置, 修改变量进行 修改为 

settings -> Variables -> 点击kafka_job_name -> 选择 select variable type 修改为custom

->在 custom options  输入自己在prometheus 里面定义的job_name 
-> 比如我这边是kafka203,kafka204 通过 逗号进行分割. 

总结

再次进入grafana 查看kafka相关的信息
能够展示出一些基本的kafka信息.

本次处理过程中, 没注意到这里面的问题. 
其实prometheus 里面是可以 进行查询和验证的. 

代码能力是必须得有的, 而且必须有细心和慢慢查询的能力.