赞
踩
针对于非kerberos环境非SSL环境的kafka version 0.11&2.5
,其他版本有略微差异,没有大的改变
将下面的jar包跟yaml配置文件都放在kafka的bin目录下
这个jar包是prometheus 提供的 jmx_exporter ,作用是来收集 kafka 暴露的jmx指标。
jar包可以与下面的yaml文件进行配合,从而自己修改指标名称大小写、name等格式的转换(看自己需求)
我自己kafka集群是2.5版本
用的是jmx_prometheus_javaagent-0.15.0.jar版本
他有很多技术组件的jmx指标配置文件
我自己kafka集群是2.5版本,对kafka-2_0_0.yml进行了些改造
我的配置文件kafka.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.server<type=KafkaRequestHandlerPool, name=RequestHandlerAvgIdlePercent><>OneMinuteRate name: kafka_server_kafkarequesthandlerpool_requesthandleravgidlepercent_total type: GAUGE - pattern : kafka.server<type=socket-server-metrics, clientSoftwareName=(.+), clientSoftwareVersion=(.+), listener=(.+), networkProcessor=(.+)><>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<type=socket-server-metrics, listener=(.+), networkProcessor=(.+)><>(.+):' name: kafka_server_socketservermetrics_$3 type: GAUGE labels: listener: "$1" network_processor: "$2" # Count and Value - pattern: kafka.(.*)<type=(.+), name=(.+), (.+)=(.+), (.+)=(.+)><>(Count|Value) name: kafka_$1_$2_$3 labels: "$4": "$5" "$6": "$7" - pattern: kafka.(.*)<type=(.+), name=(.+), (.+)=(.+)><>(Count|Value) name: kafka_$1_$2_$3 labels: "$4": "$5" - pattern: kafka.(.*)<type=(.+), name=(.+)><>(Count|Value) name: kafka_$1_$2_$3 # Percentile - pattern: kafka.(.*)<type=(.+), name=(.+), (.+)=(.*), (.+)=(.+)><>(\d+)thPercentile name: kafka_$1_$2_$3 type: GAUGE labels: "$4": "$5" "$6": "$7" quantile: "0.$8" - pattern: kafka.(.*)<type=(.+), name=(.+), (.+)=(.*)><>(\d+)thPercentile name: kafka_$1_$2_$3 type: GAUGE labels: "$4": "$5" quantile: "0.$6" - pattern: kafka.(.*)<type=(.+), name=(.+)><>(\d+)thPercentile name: kafka_$1_$2_$3 type: GAUGE labels: quantile: "0.$4"
将上面的jar包跟yaml配置文件都放在kafka的bin目录下
放到其他路径下也行,相应的底下启动配置时要写对路径
配合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指标端口
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进行暴露这个指标以及主题&消费者其他指标详情
https://github.com/danielqsj/kafka_exporter/releases
在release版本中下载自己需要的版本
我使用的是kafka_exporter-1.2.0.linux-amd64版本
听说这个东西好像有支持kerberos环境kafka的版本,没验证过
随便一台可以访问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 &
curl http://exporter_host:9307/metrics | head -n 10
是否能够返回metrics指标
自行百度,物理机部署以及k8s部署都行
如果需要依据Prometheus的rules文件来进行告警的话也可以部署alertManager
我这边是alertManager+prometheus上了云,比较方便,干净又卫生
# 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"
如果有告警需求可以咨询我
以上五步骤,把kafka的jmx以及exporter都暴露出来了
我们就可以选择各种各样的dashboard进行grafana展示了
confluent公司里面的挺多,可以参考用
白嫖真香哈,我用的dashboard是将confluent公司的kafka-overview.json魔改了的(也弄了份apache hadoop jmx的dashboard,因为市面上都是HDP或者CDH发行版指标的dashboard,与apache暴露的指标还是不一样)
https://grafana.com/grafana/dashboards/7589
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。