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. 初探 Linux Cgroups:资源控制的奇妙世界

    Cgroups 是 linux 内核提供的功能,由于牵涉的概念比较多,所以不太容易理解.本文试图通过简单的描述和 Demo 帮助大家理解 Cgroups . 如果你对云原生技术充满好奇,想要深入了解更 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (127)-- 算法导论11.2 2题

    二.用go语言,位向量(bit vector)是一个仅包含0和1的数组.长度为m的位向量所占空间要比包含m个指针的数组少得多.请说明如何用一个位向量来表示一个包含不同元素(无卫星数据)的动态集合.字典 ...

  3. C# 将XML转为Word(附VB.NET代码)

    本文介绍如何通过C#程序代码方法将XML文件转换为Word文档,包括转为.doc /.docx等格式.并附VB.NET代码,有需要可供参考. 程序中所需必要程序集如下图: ★  程序集获取:官方地址: ...

  4. 数仓专家面对面 | 为什么我选择GaussDB(DWS)

    摘要:你知道数仓是如何应运而生的吗?你了解数仓未来的发展趋势吗?想知道国内数仓专家的看法吗? 导语 数据仓库的发展一直是备受关注的议题,随着近年来技术的不断演进,数仓也在更新迭代. 你知道数仓是如何应 ...

  5. 实践GoF的设计模式:单例模式

    摘要:单例模式虽然简单易用,但也是最容易被滥用的设计模式.它并不是"银弹",在实际使用时,还需根据具体的业务场景谨慎使用. 本文分享自华为云社区<[Go实现]实践GoF的23 ...

  6. VEGA:诺亚AutoML高性能开源算法集简介

    摘要:VEGA是华为诺亚方舟实验室自研的全流程AutoML算法集合,提供架构搜索.超参优化.数据增强.模型压缩等全流程机器学习自动化基础能力. 本文分享自华为云社区<VEGA:诺亚AutoML高 ...

  7. linux 只查看 java 进程

    top $(ps -e | grep java | awk '{print $1}' | sed 's/^/-p/')

  8. Django rest_framework使用自定义异常

    完整代码 https://gitee.com/mom925/django-system 在settings.py中配置 REST_FRAMEWORK = { "EXCEPTION_HANDL ...

  9. Python Type Hints 从入门到实践

    Python 想必大家都已经很熟悉了,甚至关于它有用或者无用的论点大家可能也已经看腻了.但是无论如何,它作为一个将加入高考科目的语言还是有它独到之处的,今天我们就再展开聊聊 Python. Pytho ...

  10. 创新推出 | Serverless 调试大杀器:端云联调

    背景 说起当前最火一个技术, 不可避免地讨论到一个概念: Serverless.作为一种新型的应用架构,Serverless 让我们摆脱了维护基础设施的繁琐,只需要上传代码包或者镜像, 即可得到一个弹 ...