zabbix配置jmx监控

时间:2023-02-24 阅读:730 评论:0 作者:魏勇

一、概述

Zabbix server查询zabbix-java-gateway,然后zabbix-java-gateway使用JMX远程查询指定的应用程序,将结果返回给zabbix server。

上图已经告诉了我们zabbix进行jmx取值时的操作及其顺序。server通过jmx监控时,向gateway发送一个查询请求,gateway再通过jmx远程连接至被监控java程序,然后取数据,将取回的数据发送给server。

因此,要给机器添加jmx监控,则需要满足以下的前提条件:

  1. 被监控端已开启jmx远程访问
  2. 已配置好server和gateway

假设有3台centos7机器,ip地址分别为192.168.4.1、192.168.4.2和192.168.4.3。3台机器上的环境如下:

假设已经安装好了zabbix server和kafka3.3.1,我们要通过jmx获取kafka的数据,那么应该是这样:

按照下面的步骤进行配置。

二、安装zabbix-java-gateway并配置

1.安装zabbix-java-gateway

在192.168.4.2的机器上安装zabbix-java-gateway.

yum install zabbix-java-gateway

注意:如果想让server和gateway在一台机器上,则无需额外安装zabbix-java-gateway, 因为zabbix server中已经内置了zabbix-java-gateway。
安装好zabbix-java-gateway后,默认的配置文件在/etc/zabbix/zabbix_java_gateway.conf中,同时也在系统中注册并启动了service服务,server服务的配置文件为:/usr/lib/systemd/system/zabbix-java-gateway.service

2.配置zabbix-java-gateway

编辑配置文件/etc/zabbix/zabbix_java_gateway.conf,修改如下:

LISTEN_IP="0.0.0.0"    # 监听地址,保持默认"0.0.0.0"
LISTEN_PORT=10052      # 监听端口,保持默认10052
PID_FILE="/var/run/zabbix/zabbix_java.pid"    # PID_FILE文件,默认为/tmp/zabbix_java.pid,这里我们不使用默认文件
START_POLLERS=5        # 开启的工作线程数,这些线程会与zabbix server通信
TIMEOUT=3              # 超时时间

重启zabbix-java-gateway进程:

systemctl restart zabbix-java-gateway

3.配置zabbix-server

编辑zabbix server的配置文件/etc/zabbix/zabbix_server.conf, 添加如下配置

JavaGateway=192.168.4.2   # zabbix-java-gateway的所在服务器IP地址    
JavaGatewayPort=10052     # zabbix-java-gateway的服务端口        
StartJavaPollers=5        # 从zabbix-java-gateway采集数据的进程数    

修改zabbix-server的配置后,一定要重启服务:

systemctl restart zabbix-server

三、被监控程序开启jmx

这里的被监控程序指的是kafka3.3.1。(实际上tomcat、springbot等用java编写的应用程序都可以通过jmx监控,都可以看成是java程序,只不过开启jmx的方式略有区别)
涉及Kafka启动的有如下两个脚本,实质上上还是通过kafka-run-class.sh启动kafka(kafka-server-start.sh调用了kafka-run-class.sh)

<kafka>/bin/kafka-run-class.sh 
<kafka>/bin/kafka-server-start.sh

通过查看得知,kafka-run-class.sh中JMX_PORT变量指定了JMX的接口。脚本中涉及jmx设置的部分如下:

上面shell脚本的含义大致如下:
如果变量KAFKA_JMX_OPTS长度为0,则KAFKA_JMX_OPTS等于”-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false “
如果变量JMX_PORT有值,则KAFKA_JMX_OPTS再多加一个设置 “-Dcom.sun.management.jmxremote.port=$JMX_PORT”
解释一下上面的值:

-Dcom.sun.management.jmxremote # 远程连接,例如zabbix-java-gateway通过jmx获取本机的数据就是远程连接-
Dcom.sun.management.jmxremote.authenticate=false  # 关闭验证
-Dcom.sun.management.jmxremote.ssl=false # 关闭ssl
-Dcom.sun.management.jmxremote.port=$JMX_PORT  # 连接的端口

因为kafka启动的时候没有设置JMX_PORT,所以远端程序想要链接到本端时找不到对应的接口,造成连接失败。
要想让远端程序(zabbix-java-gateway)链接到本端,只需给JMX_PORT设置一个端口即可,通常设置为12345。如下图所示:

重启kafka服务后,zabbix-java-gateway就可以通过jmx协议取值了。

四、zabbix web页面增加jmx类型的监控项

做完以上三步后,就可以在zabbix web里添加jmx监控项了。

1.添加jmx接口

找到ip为192.168.4.3的主机(kafka程序所在主机),添加jmx接口。

注意:jmx的ip地址为kafka机器的ip地址,端口为刚才设置的端口。

2.添加监控项

在主机中添加监控项,监控项类型选择“jmx agent代理程序”,如下图所示:

键值:上图中的键值是jmx取值的语法格式(当然还有2种格式,可以通过右侧的“选择”按钮查看用法):
jmx[object_name,attribute_name]object_name和attribute_name均来自与MBean
主机接口:刚才添加的jmx接口
jmx端点:上图的service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi也是固定的语法格式,其中{HOST.CONN}和{HOST.PORT}是宏变量(分别指zabbix-java-gateway的ip和服务端口)。可以在【管理】【一般】【宏】中设置,也可以分别用192.168.4.3、12345来代替

本文链接: https://django.org.cn/?id=6 转载请注明出处!

评论区 交流一下吧!

共有0条评论来说两句吧...

欢迎 发表评论: