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配置如下:


  1. JMX_EXPORTER_OPTS="-javaagent:/opt/agent/jmx_prometheus_javaagent-0.16.1.jar=9095:/opt/agent/kafka_broker.yml"
  2. 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,增加如下配置:


  1. - job_name: 'kafka'
  2. metrics_path: /metrics
  3. static_configs:
  4. - targets: ['kafka1:9095', 'kafka2:9095', 'kafka3:9095']
  5. labels:
  6. 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增加如下配置:


  1. - job_name: 'kafka-exporter'
  2. metrics_path: /prometheus
  3. static_configs:
  4. - targets: ['kafka-expoter-host:9097']
  5. labels:
  6. env: "test"

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

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

告警

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

示例如下:


  1. groups:
  2. - name: Kafka测试集群告警
  3. rules:
  4. - alert: "kafka集群,出现脑裂"
  5. expr: sum(kafka_controller_kafkacontroller_activecontrollercount{env="test"}) by (env) > 1
  6. for: 0m
  7. labels:
  8. severity: warning
  9. annotations:
  10. description: '激活状态的控制器数量为{{$value}},集群可能出现脑裂'
  11. summary: '{{$labels.env}} 集群出现脑裂,请检查集群之前的网络'
  12. - alert: "kafka集群没有活跃的控制器"
  13. expr: sum(kafka_controller_kafkacontroller_activecontrollercount{env="test"}) by (env) < 1
  14. for: 0m
  15. labels:
  16. severity: warning
  17. annotations:
  18. description: '激活状态的控制器数量为{{$value}},没有活跃的控制器'
  19. summary: '{{$labels.env}} 集群没有活跃的控制器,集群可能无法正常管理'
  20. - alert: "kafka节点挂了"
  21. expr: count(kafka_server_replicamanager_leadercount{env="test"}) by (env) < 3
  22. for: 0m
  23. labels:
  24. severity: warning
  25. annotations:
  26. description: '{{$labels.env}} 集群的节点挂了,当前可用节点:{{$value}}'
  27. summary: '{{$labels.env}} 集群的节点挂了'
  28. - alert: "kafka集群出现leader不在首选副本上的分区"
  29. expr: sum(kafka_controller_kafkacontroller_preferredreplicaimbalancecount{env="test"}) by (env) > 0
  30. for: 1m
  31. labels:
  32. severity: warning
  33. annotations:
  34. description: '{{$labels.env}} 集群出现leader不在首选副本上的分区,数量:{{$value}}'
  35. summary: '{{$labels.env}} 集群出现leader不在首选副本上的分区,分区副本负载不均衡,考虑使用kafka-preferred-replica-election脚本校正'
  36. - alert: "kafka集群离线分区数量大于0"
  37. expr: sum(kafka_controller_kafkacontroller_offlinepartitionscount{env="test"}) by (env) > 0
  38. for: 0m
  39. labels:
  40. severity: warning
  41. annotations:
  42. description: '{{$labels.env}} 集群离线分区数量大于0,数量:{{$value}}'
  43. summary: '{{$labels.env}} 集群离线分区数量大于0'
  44. - alert: "kafka集群未保持同步的分区数大于0"
  45. expr: sum(kafka_server_replicamanager_underreplicatedpartitions{env="test"}) by (env) > 0
  46. for: 0m
  47. labels:
  48. severity: warning
  49. annotations:
  50. description: '{{$labels.env}} 集群未保持同步的分区数大于0,数量:{{$value}}'
  51. summary: '{{$labels.env}} 集群未保持同步的分区数大于0,可能丢失消息'
  52. - alert: "kafka节点所在主机的CPU使用率过高"
  53. expr: irate(process_cpu_seconds_total{env="test"}[5m])*100 > 50
  54. for: 10s
  55. labels:
  56. severity: warning
  57. annotations:
  58. description: '{{$labels.env}} 集群CPU使用率过高,主机:{{$labels.instance}},当前CPU使用率:{{$value}}'
  59. summary: '{{$labels.env}} 集群CPU使用率过高'
  60. - alert: "kafka节点YCG太频繁"
  61. expr: jvm_gc_collection_seconds_count{env="test", gc=~'.*Young.*'} - jvm_gc_collection_seconds_count{env="test", gc=~'.*Young.*'} offset 1m > 30
  62. for: 0s
  63. labels:
  64. severity: warning
  65. annotations:
  66. description: '{{$labels.env}} 集群节点YCG太频繁,主机:{{$labels.instance}},最近1分钟YGC次数:{{$value}}'
  67. summary: '{{$labels.env}} 集群节点YCG太频繁'
  68. - alert: "kafka集群消息积压告警"
  69. expr: sum(consumer_lag{env="test"}) by (groupId, topic, env) > 20000
  70. for: 30s
  71. labels:
  72. severity: warning
  73. annotations:
  74. description: '{{$labels.env}} 集群出现消息积压,消费组:{{$labels.groupId}},topic:{{$labels.topic}},当前积压值:{{$value}}'
  75. summary: '{{$labels.env}} 集群出现消息积压'
  76. - alert: "kafka集群网络处理繁忙"
  77. expr: kafka_network_socketserver_networkprocessoravgidlepercent{env="test"} < 0.3
  78. for: 0s
  79. labels:
  80. severity: warning
  81. annotations:
  82. description: '{{$labels.env}} 集群网络线程池不太空闲,可能网络处理压力太大,主机:{{$labels.instance}},当前空闲值:{{$value}}'
  83. summary: '{{$labels.env}} 集群网络处理繁忙'
  84. - alert: "kafka集群IO处理繁忙"
  85. expr: kafka_server_kafkarequesthandlerpool_requesthandleravgidlepercent_total{env="test"} < 0.3
  86. for: 0s
  87. labels:
  88. severity: warning
  89. annotations:
  90. description: '{{$labels.env}} 集群IO线程池不太空闲,可能处理压力太大,需要调整线程数,主机:{{$labels.instance}},当前空闲值:{{$value}}'
  91. 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监控告警配置的更多相关文章

  1. [转帖]Prometheus+Grafana监控Kubernetes

    原博客的位置: https://blog.csdn.net/shenhonglei1234/article/details/80503353 感谢原作者 这里记录一下自己试验过程中遇到的问题: . 自 ...

  2. [转帖]安装prometheus+grafana监控mysql redis kubernetes等

    安装prometheus+grafana监控mysql redis kubernetes等 https://www.cnblogs.com/sfnz/p/6566951.html plug 的模式进行 ...

  3. [转帖]插曲:大白话带你认识Kafka

    插曲:大白话带你认识Kafka 2019-11-18 21:58:27 从事Java 阅读数 2更多 分类专栏: java Kafaka   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...

  4. [转帖]基于docker 搭建Prometheus+Grafana

    基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html need good study 一 ...

  5. [转帖]Linux网络管理员不得不了解的系统目录/proc/sys/net/(网络配置)

    Linux网络管理员不得不了解的系统目录/proc/sys/net/(网络配置) https://blog.csdn.net/u013485792/article/details/76416836 需 ...

  6. [ZZ] [精彩盘点] TesterHome 社区 2018年 度精华帖

    原文地址: https://testerhome.com/topics/17646 相逢即是缘分,总有一篇适合您! 感觉好的请点赞收藏 ,感觉分类不严谨的,欢迎反馈给我! 测试方法&测试管理 ...

  7. 《转》Spring4 Freemarker框架搭建学习

    这里原帖地址:http://www.cnblogs.com/porcoGT/p/4537064.html 完整配置springmvc4,最终视图选择的是html,非静态文件. 最近自己配置spring ...

  8. Windows 7 封装与定制不完全教程

    Windows 7 封装与定制不完全教程 从定制Win7母盘到封装详细教程 手把手教你定制WIN7小母盘 Windows 7 封装与定制不完全教程 [教程] Windows 7 封装与定制不完全教程( ...

  9. Open Source

    资源来源于http://www.cnblogs.com/Leo_wl/category/246424.html RabbitMQ 安装与使用 摘要: RabbitMQ 安装与使用 前言 吃多了拉就是队 ...

  10. 你都用python来做什么?

    首页发现话题   提问     你都用 Python 来做什么? 关注问题写回答     编程语言 Python 编程 Python 入门 Python 开发 你都用 Python 来做什么? 发现很 ...

随机推荐

  1. 快速入门Mybatis完成基本CURD(注解实现)

    一.什么是Mybatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyB ...

  2. LiteOS内核源码分析:静态内存Static Memory

    摘要:本文带领大家一起剖析了LiteOS静态内存模块的源代码,包含静态内存的结构体.静态内存池初始化.静态内存申请.释放.清除内容等. 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要 ...

  3. 推理实践丨如何使用MindStudio进行Pytorch模型离线推理

    摘要:本教程所示例的任务是Ascend Pytorch离线推理,即对给定的已经训练好的模型参数和推理脚本,在Ascend 310/710和Tesla设备上进行推理应用. 本文分享自华为云社区<使 ...

  4. Open Harmony移植:build lite编译构建过程

    摘要:本文介绍了build lite 轻量级编译构建系统编译构建过程,调用依赖关系等等. 本文分享自华为云社区<移植案例与原理 - build lite编译构建过程>,作者: zhushy ...

  5. 华为AppCube入选Forrester《中国低代码平台市场分析报告》

    摘要:知名研究与分析机构Forrester于11月11日发布<中国低代码平台市场分析报告(The State Of Low-Code Platforms In China)>,AppCub ...

  6. 百度高德地图JS-API学习手记:地图基本设置与省市区数据加载

    无论是百度还是高德地图开发,还是高德地图开发.官方的给的案例启示很多,copy再修改下,就完成了 https://lbs.amap.com/api/javascript-api/summary  ht ...

  7. Java Bean 注册对象

    注册对象 POM.xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-al ...

  8. DevOps 运维提醒 钉钉 机器人 群通知

    应用系统在碰到运行异常等情况时,发送预警消息@群内相关人员,可以及时发出问题,观察对问题的响应情况 1. 创建一个群(可以是公司内部群) 2. 添加机器人 自定义机器人安全设置: https://op ...

  9. xv6book阅读 chapter2

    一个操作系统至少应该满足三个需求:多路复用.隔离.交互.本章主要介绍如何组织操作系统来实现以上的三个需求,本文关注的是一种围绕单核进行设计的方法,这种设计是被许多uinx操作系统所使用的.Xv6运行在 ...

  10. 最火前端Web组态软件(可视化)

    ​ 友情提示:本文为原创文章,转载请注明出处,商务合作请私信!!! 前言: 随着物联网.大数据等技术高速发展,我们逐步向数字化.可视化的人工智能(AI)时代的方向不断迈进.智能时代是工业 4.0 时代 ...