[转帖]可直接拿来用的kafka+prometheus+grafana监控告警配置
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/
[转帖]可直接拿来用的kafka+prometheus+grafana监控告警配置的更多相关文章
- [转帖]Prometheus+Grafana监控Kubernetes
原博客的位置: https://blog.csdn.net/shenhonglei1234/article/details/80503353 感谢原作者 这里记录一下自己试验过程中遇到的问题: . 自 ...
- [转帖]安装prometheus+grafana监控mysql redis kubernetes等
安装prometheus+grafana监控mysql redis kubernetes等 https://www.cnblogs.com/sfnz/p/6566951.html plug 的模式进行 ...
- [转帖]插曲:大白话带你认识Kafka
插曲:大白话带你认识Kafka 2019-11-18 21:58:27 从事Java 阅读数 2更多 分类专栏: java Kafaka 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...
- [转帖]基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html need good study 一 ...
- [转帖]Linux网络管理员不得不了解的系统目录/proc/sys/net/(网络配置)
Linux网络管理员不得不了解的系统目录/proc/sys/net/(网络配置) https://blog.csdn.net/u013485792/article/details/76416836 需 ...
- [ZZ] [精彩盘点] TesterHome 社区 2018年 度精华帖
原文地址: https://testerhome.com/topics/17646 相逢即是缘分,总有一篇适合您! 感觉好的请点赞收藏 ,感觉分类不严谨的,欢迎反馈给我! 测试方法&测试管理 ...
- 《转》Spring4 Freemarker框架搭建学习
这里原帖地址:http://www.cnblogs.com/porcoGT/p/4537064.html 完整配置springmvc4,最终视图选择的是html,非静态文件. 最近自己配置spring ...
- Windows 7 封装与定制不完全教程
Windows 7 封装与定制不完全教程 从定制Win7母盘到封装详细教程 手把手教你定制WIN7小母盘 Windows 7 封装与定制不完全教程 [教程] Windows 7 封装与定制不完全教程( ...
- Open Source
资源来源于http://www.cnblogs.com/Leo_wl/category/246424.html RabbitMQ 安装与使用 摘要: RabbitMQ 安装与使用 前言 吃多了拉就是队 ...
- 你都用python来做什么?
首页发现话题 提问 你都用 Python 来做什么? 关注问题写回答 编程语言 Python 编程 Python 入门 Python 开发 你都用 Python 来做什么? 发现很 ...
随机推荐
- rime中州韵 输入效果一览 100+增强功能效果
rime是一个定制化程度很高的输入法框架, 我们可以在该框架上搭建适合自己的输入法程序.我们将在专栏 小狼毫 Rime 保姆教程 中完成以下近百种定制化效果的配置与演示.欢迎订阅. 以下为个性化定制的 ...
- 19、Flutter StatelessWidget 、 StatefulWidget
在Flutter中自定义组件其实就是一个类,这个类需要继承StatelessWidget / StatefulWidget. StatelessWidget是无状态组件,状态不可变的widget ...
- 详解Apache Sentry->Ranger平滑升级方案
摘要:本文主要探讨如何平滑解决sentry到ranger升级过程中的权限迁移问题. 本文分享自华为云社区<[平滑上云]Apache Sentry->Ranger平滑升级方案>,作者: ...
- 先收藏!关于Java类、接口、枚举的知识点大汇总
摘要:Java知识点精选之类.接口.枚举30问,算是比较基础的,希望大家一起学习进步. 整理了一些JAVA语言的在类.接口.枚举等方面的知识点以及大家常遇到的问题.希望能帮助到大家. Q: 各修饰符所 ...
- WebKit三件套(3):WebKit之Port篇
了解其有关Port方面的设计,从而了解究竟如何能移植WebKit到自己的应用中. WebKitPort方面的内容是可以很广的,例如可将不同的图形库.网络库与WebCore集成,提供不同的Port接口供 ...
- DarkMode(2):深色模式解决方案——css颜色变量实现Dark Mode
暗黑模式实现,最初的设计,就是参考之前的主题模式.所谓多套主题/配色/皮肤,就是我们很常见的换肤功能.换肤简单的实现就是更换 css实现不同样式呈现不同肤色. 之前做不同颜色的皮肤,暗黑模式可以单做其 ...
- appuploader使用教程
appuploader使用教程 转载:appuploader使用教程 目录 问题解决秘籍 登录失败 don't have access,提示没权限或同意协议 上传后在app管理中心找不到版本提交 ...
- 机器学习周刊 第4期:动手实战人工智能、计算机科学热门论文、免费的基于ChatGPT API的安卓端语音助手、每日数学、检索增强 (RAG) 生成技术综述
LLM开发者必读论文:检索增强(RAG)生成技术综述! 目录: 1.动手实战人工智能 Hands-on Al 2.huggingface的NLP.深度强化学习.语音课 3.Awesome Jupyte ...
- COGI控制删除按钮增强
1.业务需求 COGI在SAP中主要用于解决生产订单异常的问题.通常发生在生产订单执行过程中,当出现了特定的异常情况时,需要进行处理.这些异常情况可能包括物料缺失.数量不匹配.质量问题等等. 当这些异 ...
- MIR7创建预制发票BAPI
1.事务代码MIR7 前台输入采购订单等相关字段进行开票 2.代码实现 调用BAPI:BAPI_INCOMINGINVOICE_PARK创建发票 "--------------------@ ...
