一、前言
关于对kafka的监控,要求高的话可以使用kafka-exorter和jmx-exporter一起收集监控数据,要求不高的情况下可以使用kafka-exporter收集监控数据即可
二、部署
kafka-exporter
部署kafka-exporter,我是在k8s集群中部署的
编辑yaml文件
vi kafka_exporter.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-exporter
namespace: monitoring
labels:
app: kafka-exporter
spec:
replicas: 2
selector:
matchLabels:
app: kafka-exporter
template:
metadata:
labels:
app: kafka-exporter
spec:
containers:
- name: kafka-exporter
image: danielqsj/kafka-exporter #配置kafka-exporter服务镜像
args: ["--kafka.server=10.1.60.112:9092","--kafka.server=10.1.60.114:9092","--kafka.server=10.1.60.115:9092"] #配置kafka集群地址
#如果kafka集群配置了身份验证需要在以上集群地址配置后面再加入下面的几个参数"--sasl.enabled","--sasl.mechanism=plain","--sasl.username=admin","--sasl.password=admin@123"
ports:
- containerPort: 9308
name: metrics
resources:
limits:
cpu: 250m
memory: 300Mi
requests:
cpu: 50m
memory: 10Mi
---
apiVersion: v1
kind: Service
metadata:
name: kafka-exporter
namespace: monitoring
labels:
app: kafka-exporter
ns: monitoring
spec:
type: NodePort
clusterIP:
ports:
- name: metrics
protocol: TCP
port: 9308
targetPort: 9308
nodePort: 30011
selector:
app: kafka-exporter
在k8s集群中执行yaml文件生成kafka-exporter服务的pod
kubectl apply -f kafka_exporter.yaml
查看pod和service是否正常
kubectl get pod,service -n monitoring
配置prometheus配置文件
vi /opt/prometheus/prometheus/prometheus.yml
scrape_configs:
- job_name: "k8s_kafka_exporter"
static_configs: #配置kafka-exporter接口的地址
- targets:
["10.1.60.119:30011","10.1.60.120:30011","10.1.60.121:30011","10.1.60.122:30011","10.1.60.123:30011"]
重启prometheus服务
systemctl restart prometheus
查看prometheus监控服务是否获取到kafka-exporter数据
关于grafana 展示kafka-exporter数据的模板使用的是id为7589的模板
jmx-exporter
关于jmx-exporter的部署方式有两种
第一种是通过jar包的方式,再启动kafka服务时jmx-exporter服务通过java-agent的方式跟着服务一起启动,然后收集监控数据,官网是主要推荐这一种方式的
第二种方式是独立部署jmx-exporter服务,然后kafka服务开放jmx服务端口,再jmx-exporter服务中配置监控kafka的jmx服务端口收集监控数据
参考官网:GitHub - prometheus/jmx_exporter: A process for exposing JMX Beans via HTTP for Prometheus consumption
这里就用官网推荐的通过java-agent的方式部署,在github上下载jmx-exporter的jar包,放到kafka的主机上
mkdir /opt/jmx-exporter
ls /opt/jmx-exporter
再从github jmx-exporter项目上下载一个配置文件
地址:https://github.com/prometheus/jmx_exporter/tree/main/example_configs
编辑kafka的启动文件,如果是集群每个节点都要编辑
vi /etc/kafka/kafka/bin/kafka-server-start.sh
#在配置文件顶部加上以下配置
export KAFKA_OPTS="-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.18.0.jar=9099:/opt/jmx_exporter/kafka_jmx.yml"
#该配置指定了监控数据的展示端口为9099,配置时要指定jmx-exporter服务的jar包和配置文件
启动kafka服务
/etc/kafka/kafka/bin/kafka-server-start.sh -daemon /etc/kafka/kafka/config/server.properties
查询数据监控端口是否正常
netstat -tlpn |grep 9099
查看获取的监控数据
http://10.1.60.114:9099/metrics
配置prometheus收集监控数据
vi /opt/prometheus/prometheus/prometheus.yml
scrape_configs:
- job_name: "kafka_jmx"
static_configs: #配置jmx—exporter服务端口
- targets: ["10.1.60.112:9099","10.1.60.114:9099","10.1.60.115:9099"]
重启prometheus服务
systemctl restart prometheus
查看Prometheus是否正常收集
关于使用grafana面板展示数据 用的是面板id为18276,但是此面板我配置的时候在grafnan上展示不出数据
面板路径:Kafka Dashboard | Grafana Labs
该页面中也有该面板的详细配置教程