[转帖]可直接拿来用的kafka+prometheus+grafana监控告警配置

直接,拿来,kafka,prometheus,grafana,监控,告警,配置 · 浏览次数 : 0

小编点评

**内容生成方法** 根据需要,可带简单的排版,生成内容时需要带以下内容: * **指标名称** * **指标值** * **指标描述** * **指标单位** * **指标显示格式** * **图表显示格式** * **其他参数** **示例** **指标名称:kafka_controller_kafkacontroller_offlinepartitionscount** **指标值:20000 **指标描述:kafka节点YCG太频繁 **指标单位:个 **指标显示格式:数字 **图表显示格式:图表 **其他参数:无 **示例代码:** ```python #指标名称 kafka_controller_kafkacontroller_offlinepartitionscount #指标值 20000 #指标描述 kafka_node_ycg_太频繁 #指标单位 个 #指标显示格式 数字 #图表显示格式 图表 #其他参数 无 ``` **其他建议** * **使用图表格式展示指标数据** * **设置指标筛选条件** * **使用标题和描述等信息说明指标** * **将多个指标集成到一个图表中**

正文

kafka配置jmx_exporter

点击:https://github.com/prometheus/jmx_exporter,选择下面的jar包下载:

将下载好的这个agent jar包上传到kafka的broker节点所在服务器上,每个broker都需要,比如上传到如下路径:

/opt/agent/jmx_prometheus_javaagent-0.16.1.jar
复制

修改kafka启动脚本: bin/kafka-server-start.sh,增加java agent配置如下:

JMX_EXPORTER_OPTS="-javaagent:/opt/agent/jmx_prometheus_javaagent-0.16.1.jar=9095:/opt/agent/kafka_broker.yml"export KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS $JMX_EXPORTER_OPTS"
复制

这两行代码可以添加在脚本首部。

这里指定了9095作为端口,jmx_exporter用到的kafka_broker.yml 配置如下:https://github.com/xxd763795151/kafka-exporter/blob/main/kafka_broker.yml 

将kafka每个broker都这样配置,重启kafka。

Prometheus配置

修改prometheus的配置prometheus.yml,增加如下配置:

  - job_name: 'kafka'    metrics_path: /metrics    static_configs:    - targets: ['kafka1:9095', 'kafka2:9095', 'kafka3:9095']      labels:         env: "test"
复制

p.s. 注意job_name不要修改,值就是"kafka",要不我下面的grafana不能直接用,还需要每个面板依次修改。

Grafana配置

下面的Grafana面板我已经配置好,可以直接拿来用,之后可以根据需要增加或删除相关面板:https://github.com/xxd763795151/kafka-exporter/blob/main/grafana.json

贴几个截图:

 

 

消息积压

在kafka的broker端无法直接获取消息积压等指标信息,这些数据在消费端上,我们也不太可能去连接所有的消费端获取监控信息。

所以,我单独写了一个kafka-exporter可以获取消息积压的监控指标:https://github.com/xxd763795151/kafka-exporter

点击这个链接进入github仓库后,根据说明进行部署并配置启动后,然后在prometheus.yml增加如下配置:

  - job_name: 'kafka-exporter'    metrics_path: /prometheus    static_configs:    - targets: ['kafka-expoter-host:9097']      labels:         env: "test"
复制

上面的grafana配置里已经包含了消息积压的面板:

 如果后续有其它指标在jmx里不提供,也可以继续补充kafka-exporter,刮取更多需要的metrics。

告警

最新的配置代码会提交在这里: https://github.com/xxd763795151/kafka-exporter/blob/main/kafka_alert.yml

示例如下:

groups:  - name: Kafka测试集群告警    rules:      - alert: "kafka集群,出现脑裂"        expr: sum(kafka_controller_kafkacontroller_activecontrollercount{env="test"}) by (env) > 1        for: 0m        labels:          severity: warning        annotations:          description: '激活状态的控制器数量为{{$value}},集群可能出现脑裂'          summary: '{{$labels.env}} 集群出现脑裂,请检查集群之前的网络'      - alert: "kafka集群没有活跃的控制器"        expr: sum(kafka_controller_kafkacontroller_activecontrollercount{env="test"}) by (env) < 1        for: 0m        labels:          severity: warning        annotations:          description: '激活状态的控制器数量为{{$value}},没有活跃的控制器'          summary: '{{$labels.env}} 集群没有活跃的控制器,集群可能无法正常管理'      - alert: "kafka节点挂了"        expr: count(kafka_server_replicamanager_leadercount{env="test"}) by (env) < 3        for: 0m        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群的节点挂了,当前可用节点:{{$value}}'          summary: '{{$labels.env}} 集群的节点挂了'      - alert: "kafka集群出现leader不在首选副本上的分区"        expr: sum(kafka_controller_kafkacontroller_preferredreplicaimbalancecount{env="test"}) by (env) > 0        for: 1m        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群出现leader不在首选副本上的分区,数量:{{$value}}'          summary: '{{$labels.env}} 集群出现leader不在首选副本上的分区,分区副本负载不均衡,考虑使用kafka-preferred-replica-election脚本校正'      - alert: "kafka集群离线分区数量大于0"        expr: sum(kafka_controller_kafkacontroller_offlinepartitionscount{env="test"}) by (env) > 0        for: 0m        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群离线分区数量大于0,数量:{{$value}}'          summary: '{{$labels.env}} 集群离线分区数量大于0'      - alert: "kafka集群未保持同步的分区数大于0"        expr: sum(kafka_server_replicamanager_underreplicatedpartitions{env="test"}) by (env) > 0        for: 0m        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群未保持同步的分区数大于0,数量:{{$value}}'          summary: '{{$labels.env}} 集群未保持同步的分区数大于0,可能丢失消息'      - alert: "kafka节点所在主机的CPU使用率过高"        expr: irate(process_cpu_seconds_total{env="test"}[5m])*100 > 50        for: 10s        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群CPU使用率过高,主机:{{$labels.instance}},当前CPU使用率:{{$value}}'          summary: '{{$labels.env}} 集群CPU使用率过高'      - alert: "kafka节点YCG太频繁"        expr: jvm_gc_collection_seconds_count{env="test", gc=~'.*Young.*'} - jvm_gc_collection_seconds_count{env="test", gc=~'.*Young.*'} offset 1m > 30        for: 0s        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群节点YCG太频繁,主机:{{$labels.instance}},最近1分钟YGC次数:{{$value}}'          summary: '{{$labels.env}} 集群节点YCG太频繁'      - alert: "kafka集群消息积压告警"        expr: sum(consumer_lag{env="test"}) by (groupId, topic, env) > 20000        for: 30s        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群出现消息积压,消费组:{{$labels.groupId}},topic:{{$labels.topic}},当前积压值:{{$value}}'          summary: '{{$labels.env}} 集群出现消息积压'      - alert: "kafka集群网络处理繁忙"        expr: kafka_network_socketserver_networkprocessoravgidlepercent{env="test"} < 0.3        for: 0s        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群网络线程池不太空闲,可能网络处理压力太大,主机:{{$labels.instance}},当前空闲值:{{$value}}'          summary: '{{$labels.env}} 集群网络处理繁忙'      - alert: "kafka集群IO处理繁忙"        expr: kafka_server_kafkarequesthandlerpool_requesthandleravgidlepercent_total{env="test"} < 0.3        for: 0s        labels:          severity: warning        annotations:          description: '{{$labels.env}} 集群IO线程池不太空闲,可能处理压力太大,需要调整线程数,主机:{{$labels.instance}},当前空闲值:{{$value}}'          summary: '{{$labels.env}} 集群IO处理繁忙'
复制

末语

 我从grafana 官方上搜索了几个dashboard,但指标实在太少。感谢从这篇博文里找到的grafana配置可以参考,提供了很多指标的面板,可以让我对着kafka官方监控jmx说明进行整理,让我在grafana面板的配置上,省了一半的功夫:

https://www.confluent.io/blog/monitor-kafka-clusters-with-prometheus-grafana-and-confluent/

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览14554 人正在系统学习中

与[转帖]可直接拿来用的kafka+prometheus+grafana监控告警配置相似的内容:

[转帖]可直接拿来用的kafka+prometheus+grafana监控告警配置

kafka配置jmx_exporter 点击:https://github.com/prometheus/jmx_exporter,选择下面的jar包下载: 将下载好的这个agent jar包上传到kafka的broker节点所在服务器上,每个broker都需要,比如上传到如下路径: /opt/ag

[转帖]Kubernetes-18:Dashboard安装及使用

https://www.cnblogs.com/v-fan/p/13950268.html Helm安装Dashboard 简介 Dashboard 是 kubernetes 的图形化管理工具,可直观的看到k8s中各个类型控制器的当前运行情况,以及Pod的日志,另外也可直接在 dashboard 中

[转帖]PD Control 使用说明

https://docs.pingcap.com/zh/tidb/stable/pd-control PD Control 是 PD 的命令行工具,用于获取集群状态信息和调整集群。 安装方式 注意 建议使用的 Control 工具版本与集群版本保持一致。 使用 TiUP 可直接通过 tiup ctl

[转帖]PD Control 使用说明

https://docs.pingcap.com/zh/tidb/stable/pd-control PD Control 是 PD 的命令行工具,用于获取集群状态信息和调整集群。 安装方式 注意 建议使用的 Control 工具版本与集群版本保持一致。 使用 TiUP 可直接通过 tiup ctl

[转帖]PD Control 使用说明

https://docs.pingcap.com/zh/tidb/stable/pd-control PD Control 是 PD 的命令行工具,用于获取集群状态信息和调整集群。 安装方式 注意 建议使用的 Control 工具版本与集群版本保持一致。 使用 TiUP 可直接通过 tiup ctl

[转帖]VMware-ovftool命令行部署与导出镜像

ESXI6.0之后管理为WEB,OVF导出/部署是个渣渣,如果虚拟机文件过大,一般会报网络异常中断而失败,可使用官方ovftool工具解决,快而方便,支持linux和Mac OSX,可脚本操作,批量处理等。 在windows如已经安装vmware workstation,有个OVFTool目录直接可

[转帖]一问带你掌握通过storcli做RAID

因为系统不支持直接做raid,所以需要使用storcli这个工具来操作。首先把工具上传到服务器任意目录,并使用命令chmod +x storcli64修改文件权限为可执行。 另外可通过命令ln -s /root/storcli64 /usr/bin/storcli来设置软链接,这样后续可以在任意目录

[转帖]linux块I/O总体概括

直接先上重点,linux中IO栈的完全图如下: 系统中能够随机访问固定大小数据片的硬件设备称作块设备。固定大小的数据片称为块。常见的块设备就是硬盘了。不能随机访问的就是字符设备了,管理块设备比字符设备要复杂很多。 块设备中最小的可寻址单元是扇区,一般是2的整数倍,最常见的是512字节。不过很多CD-

[转帖]linux 批量修改文件格式

将Windows上的shell脚本拷贝到Linux时,脚本的编码格式还是docs,需要改成unix才可执行,在文件不多的情况下可以直接手动更改,但是在脚本文件比较多的时候,手动改起来就太麻烦了,此时就可以使用shell命令批量来进行更改。 批量更改脚本如下: for i in `find . -ty

[转帖]raid缓存策略设置

RAID卡缓存策略 不同的RAID卡缓存策略对IO的性能影响较大,常见的策略有: 1、写操作策略,可设置为WriteBack或WriteThrough WriteBack:进行写操作时,将数据写入RAID卡缓存,并直接返回,RAID卡控制器将在系统负载低或者Cache满了的情况下把数据写入硬盘。该设