• Prometheus监控Kafka(三种方法JMX/Kafka_exporter/KMINION监控Kafka)


    背景

    一句话说明需求:

    • 公司需要监控kafka消息队列的消费情况,强调需查看当前Topic中的message的数量。

    一句话说明解决:

    • 像Kafka这样的Java进程可以先通过JMX Agent或者第三方Agent(kafka_exporter\KMINION等)获取监控数据,再通过Prometheus采集数据、通过Grafana模板展示数据即可。另外具体的message数量需要通过PromQL语句查询得到。

    多说几句:

    • kafka应用的具体指标和JVM虚拟机的指标都可以通过JMX监控得到。
    • Zabbix也可以监控kafka,也是通过JMX实现。
    • Prometheus对自定义监控项更友好,相关的Grafana模板更多。
    • 建议同时使用JMX和kminion,同时使用两者的Grafana模板(具体性能损耗的评估稍后有时间我再详细说明,有时间折腾也可以只装一个)
    • 三种方式获取的都是kafka监控指标,最终都通过grafana集成显示。

    2024.02.12补充注意:好几张截图里的第二个messages per sec值其实是all messages 的值,查看grafana模板promsql 可以确定。编辑配置可以修改,应该是模版作者的小疏漏。

    监控效果截图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    参考链接

    【Grafana模板库:搜索Kafka】
    【阿里云官方文档:如何部署和配置Kafka JMX Agent】

    实际操作

    方式一:使用JMX监控

    操作要点

    1. 下载jmx程序包。
    2. 修改kafka启动参数
    3. 重启kafka
    4. 访问JMX-Agent端口验证监控指标
    5. 5.修改配置文件,并重启Prometheus
    6. 访问Prometheus,验证target是否监控成功。
    7. 配置Grafana:导入模板、配置数据源、查看监控数据。

    1.下载jmx程序包

    使用阿里云提供的jmx-agent包,比较稳定靠谱,就不故意选择最新版本了。
    下载链接:【阿里云JMX-Agent下载】
    下载后需传输到kafka所在服务器上,如:

    [sysma@kafka-0001 jmx_agent]$ ls
    kafka-jmx_prometheus_javaagent-1.18.1.jar
    [sysma@kafka-0001 jmx_agent]$ pwd
    /ilw/jmx_agent
    [sysma@kafka-0001 jmx_agent]$ 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.修改kafka启动参数。

    修改kafka启动脚本的配置参数,可参考阿里云【阿里云官方文档:如何部署和配置Kafka JMX Agent】
    也可参考我的示例文件,对比阿里云文档截图,我的示例文件更为简单直观:

    EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc '}这一行之后,新增JMX-agent内容-javaagent:/ilw/jmx_agent/kafka-jmx_prometheus_javaagent-1.18.1.jar=5506,目的是下次启动kafka进程的同时,运行一个jmx-agent并指定agent的端口。

    完整示例文件如下:

    [sysma@kafka-0001 bin]$ pwd
    /ilw/kafka_2.12-3.5.0/bin
    [sysma@kafka-0001 bin]$ cat kafka-server-start.sh 
    #!/bin/bash
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #    http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    if [ $# -lt 1 ];
    then
    	echo "USAGE: $0 [-daemon] server.properties [--override property=value]*"
    	exit 1
    fi
    base_dir=$(dirname $0)
    
    if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then
        export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties"
    fi
    
    if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
        export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
    fi
    
    ##修改前,默认配置如下
    #EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'}
    
    #修改后,在下一行新增jmx-agent的路径位置,指定jmx暴露端口。
    EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc -javaagent:/ilw/jmx_agent/kafka-jmx_prometheus_javaagent-1.18.1.jar=5506'} 
    
    COMMAND=$1
    case $COMMAND in
      -daemon)
        EXTRA_ARGS="-daemon "$EXTRA_ARGS
        shift
        ;;
      *)
        ;;
    esac
    
    exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"
    [sysma@kafka-0001 bin]$ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    3.重启kafka

    启动和停止kafka的脚本如下,也可直接复制命令执行:

    [sysma@kafka-0001 ilw]$ cat 03_startKFK-3.5.0.sh 
    sudo /ilw/kafka_2.12-3.5.0/bin/kafka-server-start.sh /ilw/kafka_2.12-3.5.0/config/server.properties &
    [sysma@kafka-0001 ilw]$ cat 04_stopKFK-3.5.0.sh 
    sudo /ilw/kafka_2.12-3.5.0/bin/kafka-server-stop.sh /ilw/kafka_2.12-3.5.0/config/server.properties
    
    • 1
    • 2
    • 3
    • 4

    4.访问JMX-Agent端口验证监控指标

    配置文件中指定了jmx-agent端口为5506。在开放防火墙策略、保证kafka重启成功后,可通过web访问查看相关的监控指标,如下图:
    在这里插入图片描述

    5.修改配置文件,并重启Prometheus

    修改配置文件并重启Prometheus

    sudo vim prometheus.yml 
    curl -X POST http://127.0.0.1:9091/-/reload
    
    • 1
    • 2

    使用curl命令重启prometheus的前提是:首次启动Prometheus时,就启用web.enable-lifecycle功能,具体启动命令如下:

    #使用sudo权限,后台执行Prometheus启动命令,并启用lifecycle功能,指定监听端口为9091
    sudo nohup ./prometheus --web.enable-lifecycle --web.listen-address=:9091 &
    
    • 1
    • 2

    修改内容如下:
    在这里插入图片描述

    6.访问Prometheus,验证target是否监控成功。

    在这里插入图片描述

    7.配置Grafana:导入模板、配置数据源、查看监控数据。

    下载dashboard模板,配合jmx-agent使用时,建议使用11962号模板。【Grafana官方:11962号模板下载地址】
    在这里插入图片描述
    导入模板,上传json文件。
    在这里插入图片描述
    查看仪表板,成功取得监控数据。
    在这里插入图片描述
    注意:

    1. 需要开通kafka、Prometheus、Grafana之间对具体端口的防火墙策略。
    2. 没啥注意的了,你们先操作吧,方式二、方式三我后面再补充。

    方式二:使用kafka_exporter监控

    1. 下载kafka_exporter程序包。
    2. 修改kafka_exporter配置文件。
    3. 启动kafka_exporter。
    4. 重启prometheus。
    5. 导入grafana模板。

    方式三:使用Kminion监控

    1. 下载Kminion程序包。
    2. 修改kminion配置文件。
    3. 创建kminion配置文件的环境变量。
    4. 启动kminion。
    5. 重启prometheus。
    6. 导入grafana模板。

    注意:

    1. 防火墙策略。
    2. 端口占用情况。

    相关截图

    结束

  • 相关阅读:
    大数据必学Java基础(五十七):Set接口讲解
    Collection接口常用方法
    MySQL:数据类型和运算符
    django uwsgi启动
    [强网杯 2019]随便注
    MySQL 常用函数 2022/09/06
    Vue3.x 中eventBus -- mitt用法
    2022牛客暑期多校训练营7(BCFGJ)
    LeetCode【279】完全平方数
    双色球机器人博客博客,双色球预测程序算法
  • 原文地址:https://blog.csdn.net/weixin_43092290/article/details/133937623