zabbix使用jmx监控tomcat

本文详细介绍如何使用Zabbix监控Tomcat应用,包括配置JMX、Zabbix-JavaGateway及Zabbix-Server,确保高性能监控。

Java gateway简介

从Zabbix 2.0版本开始,以Zabbix守护进程的形式原生支持监控JMX程序出现了,它被称为Zabbix Java gateway。Zabbix gateway 是用Java语言写成。要查得一台主机特定的JMX计数器值,Zabbix server向Zabbix Java gateway发送请求,后者使用JMX管理API 去请求远程的有关应用。应用不需要额外安装软件,只需要启动时在命令行指定-Dcom.sun.management.jmxremote 即可。

Java gateway接受来自Zabbix Server或Agent的传入连接,且只能用作“被动proxy”。 与Zabbix proxy相反,它也可以从Zabbix agent调用(Zabbix agent不能被链接)。 每个Java gateway的访问都直接在Zabbix sever或 proxy配置文件中配置,因此每个Zabbix sever或Zabbix agent只能配置一个Java gateway。 如果一台主机具 JMX agent 类型的监控项和和其他类型的监控项,则只将JMX agent监控项传递到Java gateway进行检索。

当在Java gateway上的一个监控项值更新了,Zabbix server或agent将连接Java gateway请求查询该值,Java gateway会依次retrieves并传回到server或proxy。 同样的,Java gateway不会缓存任何值.

Zabbix sever或proxy具有连接到Java gateway特定类型的进程,由 START_POLLERS 选项控制。 在内部,Java gateway启动多个由该选项控制的线程。 在sever端,如果连接超过 Timeout 秒,则将终止,但Java gateway可能仍忙于从JMX计数器检索值。 为了解决这个问题,由于Zabbix 2.0.15,Zabbix 2.2.10和Zabbix 2.4.5在Java gateway中有TIMEOUT选项,允许为JMX网络操作设置超时。

Zabbix server或agent将尽可能地将请求集中到一个JMX目标(受监控项间隔影响),并将它们发送到单一连接中的Java gateway,以获得更好的性能。 建议 StartJavaPollers 小于或等于 START_POLLERS ,否则可能导致当连接Java gateway时而Java gateway没有多余的线程进行处理
Zabbix 的JMX监控架构
zaibbix Server–>Java gateway–>JMX counter

在这里插入图片描述
从上面的原理图中可以看出,配置Zabbix监控Java应用程序的关键点在于:配置Zabbix-JavaGateway、让Zabbix-Server能够连接Zabbix-JavaGateway、Tomcat开启JVM远程监控功能等

zabbix-server运行在10051端口,Zabbix-server要知道java应用程序的某项性能的使用时候 ,会启动自身的一个Zabbix-JavaPollers进程去链接zabbix-JavaGateway请求数据,而zabbix-Javagateway收到请求后并使用,使用"JMXmanagementAPI"去查询特定的应用程序。
Zabbix-server有一个特殊的进程用来连接Javagateway叫StartJavaPollers;Javagateway通过配置文件中START_POLLERS参数设置启动多个线程,在zabbix服务器这边如果一个连接所用时间超过Timeout,将会被中断,但是Javagateway将继续从JMXcounter取数据。所以StartJavaPollers设置的值要小于等于START_POLLERS设置的值。
zabbix-java-gateway工作在10052端口,Zabbix-Javagateway就相当于一个代理,它负责收集客户端tomcat数据。图中的12345端口是在配置tomcat时指定的,可是自定义。

一、配置JMX

修改tomcat配置文件/usr/local/tomcat/bin/catalina.sh

CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=12345 -Djava.rmi.server.hostname=192.168.147.131"

解析

 -Dcom.sun.management.jmxremote  #启用远程监控JMX
 -Dcom.sun.management.jmxremote.authenticate=false #不使用用户名密码
 -Dcom.sun.management.jmxremote.ssl=false#不使用ssl认证
 -Dcom.sun.management.jmxremote.port=12345#默认启动的JMX端口号, 要和zabbix-server添加主机时候的端口一致即可
  -Djava.rmi.server.hostname=X.X.X.X#tomcat主机自己的IP地址, 不要写zabbix服务器的地址

重启tomcat

[root@centos7 lib]# su - tomcat -c "catalina.sh stop"
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@centos7 lib]# su - tomcat -c "catalina.sh start"
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

查看端口信息,这时8080及12345端口已经开启。

[root@centos7 lib]# ss -ntl
State      Recv-Q Send-Q                                        Local Address:Port                                                       Peer Address:Port              
LISTEN     0      128                                                       *:111                                                                   *:*                  
LISTEN     0      128                                                       *:80                                                                    *:*                  
LISTEN     0      128                                                       *:22                                                                    *:*                  
LISTEN     0      100                                               127.0.0.1:25                                                                    *:*                  
LISTEN     0      128                                               127.0.0.1:6010                                                                  *:*                  
LISTEN     0      128                                               127.0.0.1:6011                                                                  *:*                  
LISTEN     0      128                                               127.0.0.1:6013                                                                  *:*                  
LISTEN     0      128                                                       *:10050                                                                 *:*                  
LISTEN     0      128                                               127.0.0.1:9000                                                                  *:*                  
LISTEN     0      50                                                       :::43277                                                                :::*                  
LISTEN     0      128                                                      :::111                                                                  :::*                  
LISTEN     0      100                                                      :::8080                                                                 :::*                  
LISTEN     0      128                                                      :::80                                                                   :::*                  
LISTEN     0      128                                                      :::22                                                                   :::*                  
LISTEN     0      50                                                       :::12345                                                                :::*                  
LISTEN     0      100                                                     ::1:25                                                                   :::*                  
LISTEN     0      128                                                     ::1:6010                                                                 :::*                  
LISTEN     0      128                                                     ::1:6011                                                                 :::*                  
LISTEN     0      128                                                     ::1:6013                                                                 :::*                  
LISTEN     0      128                                                      :::10050                                                                :::*                  
LISTEN     0      1                                          ::ffff:127.0.0.1:8005                                                                 :::*                  
LISTEN     0      100                                                      :::8009                                                                 :::*                  
LISTEN     0      50                                                       :::39146                                                                :::*                  

二、配置zabbix-server

1、安装zabbix-java-gateway。之前已经配置好了zabbix的yum仓库,所以直接yum安装。

[root@centos7 zabbix]# yum -y install zabbix-java-gateway

2、配置zabbix_java_gateway.conf

[root@centos7 zabbix]# cat zabbix_java_gateway.conf 
LISTEN_IP="0.0.0.0"  //监听的地址默认是0.0.0.0,表示监听本机的所有地址
LISTEN_PORT=10052    //监听的端口
PID_FILE="/var/run/zabbix/zabbix_java.pid"  //指定pid文件
START_POLLERS=5   //启动的工作线程数量,默认是5个。这里配置和serve.conf一样
TIMEOUT=20  //连接超时时长,默认是3秒,因此JAVA程序比较慢,如果超时时间太短,会导致数据获取不到

3、配置zabbix_server.conf

[root@centos7 zabbix]# cat zabbix_server.conf 
JavaGateway=127.0.0.1 #指定java gateway的地,zabbix-java-gateway安装在了zabbix-server上,所以使用本地地址
JavaGatewayPort=10052 #指定java gateway的服务器监听端口,端口号和javagateway要对应
StartJavaPollers=5  #启动多少个进程去轮训 java gateway, 要和java gateway的配置一致
Timeout=30  #启动多少个进程去轮训 java gateway, 要和java gateway的配置一致

注意:线程数StartJavaPollers<=START_POLLERS

4、启动zabbix-java-gateway服务和重启zabbix-server

[root@centos7 zabbix]#systemctl start zabbix-java-gateway
[root@centos7 zabbix]#systemctl restart zabbix-server
[root@centos7 zabbix]# ss -ntl
State      Recv-Q Send-Q                                        Local Address:Port                                                       Peer Address:Port              
LISTEN     0      128                                                       *:111                                                                   *:*                  
LISTEN     0      5                                             192.168.122.1:53                                                                    *:*                  
LISTEN     0      128                                                       *:22                                                                    *:*                  
LISTEN     0      128                                               127.0.0.1:631                                                                   *:*                  
LISTEN     0      100                                               127.0.0.1:25                                                                    *:*                  
LISTEN     0      128                                               127.0.0.1:6010                                                                  *:*                  
LISTEN     0      128                                                       *:10051                                                                 *:*                  
LISTEN     0      50                                                        *:3306                                                                  *:*                  
LISTEN     0      128                                                      :::111                                                                  :::*                  
LISTEN     0      128                                                      :::80                                                                   :::*                  
LISTEN     0      128                                                      :::22                                                                   :::*                  
LISTEN     0      128                                                     ::1:631                                                                  :::*                  
LISTEN     0      100                                                     ::1:25                                                                   :::*                  
LISTEN     0      128                                                     ::1:6010                                                                 :::*                  
LISTEN     0      128                                                      :::443                                                                  :::*                  
LISTEN     0      50                                                       :::10052                                                                :::* 

三、在zabbix的web界面添加主机

配置—主机—选择要监控的主机
在这里插入图片描述
添加jmx接口,输入tomcat主机的ip地址及端口
在这里插入图片描述
为主机链接模板,模板选择需要适合当前的tomcat版本
在这里插入图片描述
稍等片刻等待主机的jmx连接成功变为绿色
在这里插入图片描述
查看最新数据
在这里插入图片描述
至此,zabbix监控tomcat完成

### 配置 Zabbix 监控 TomcatJMX 性能指标 要通过 Zabbix 监控 Tomcat 服务器的 JMX 性能指标,需要完成以下几个关键步骤: #### 1. 安装 Java 环境 Zabbix Java Gateway 是用于处理 JMX 监控请求的关键组件,因此必须在监控服务器上安装支持 JMX 的 Java 环境。推荐使用 OpenJDK 或 Oracle JDK 1.8 及以上版本。 ```bash sudo apt update sudo apt install openjdk-8-jdk -y # Debian/Ubuntu # 或者 sudo yum install java-1.8.0-openjdk-devel -y # CentOS/RHEL ``` #### 2. 安装 Zabbix Server 和 Zabbix Java Gateway 确保在安装 Zabbix 时启用 Java Gateway 支持。以源码安装为例: ```bash ./configure --enable-server --with-mysql --enable-java --with-net-snmp --with-libcurl --with-ssh2 make sudo make install ``` 如果使用包管理器安装(如 Ubuntu): ```bash sudo apt install zabbix-server-mysql zabbix-java-gateway ``` #### 3. 修改 Zabbix Server 配置文件 编辑 `zabbix_server.conf` 文件,配置 Java Gateway 地址和端口: ```ini JavaGateway=127.0.0.1 JavaGatewayPort=10052 StartJavaPollers=5 ``` 保存并重启 Zabbix Server: ```bash sudo systemctl restart zabbix-server ``` #### 4. 配置 Tomcat 启用 JMX 远程监控Tomcat 的启动脚本中添加 JMX 远程连接参数。例如,在 `catalina.sh` 中找到 `JAVA_OPTS` 并添加以下内容: ```bash JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote" JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345" JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false" JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false" ``` 确保防火墙允许访问 JMX 端口(如 12345),然后重启 Tomcat 服务。 #### 5. 配置 Zabbix Agent(可选) 虽然 JMX 是通过 Zabbix Java Gateway 直接采集的,但如果需要结合系统级指标(如内存、CPU 使用率等),则应在目标服务器上安装并配置 Zabbix Agent: ```bash sudo apt install zabbix-agent ``` 在 `/etc/zabbix/zabbix_agentd.conf` 中设置: ```ini ServerActive=ZABBIX_SERVER_IP Hostname=Tomcat_Hostname ``` #### 6. 在 Zabbix Web 界面中添加主机并配置 JMX 接口 登录 Zabbix Web 管理界面,执行以下操作: - **添加主机**:选择“创建主机”,填写 Tomcat 服务器的 IP 地址。 - **设置 JMX 接口**:在“宏”选项卡中添加: ``` {$JMX.IP}=目标服务器IP {$JMX.PORT}=12345 ``` - **关联 JMX 监控模板**:例如 `Template App Apache Tomcat by JMX`,该模板包含常见的 JVM 指标如堆内存、线程数、GC 次数等。 #### 7. 测试 JMX 数据获取 可以手动测试是否能够从 Tomcat 获取 JMX 数据。使用 `cmdline-jmxclient` 工具进行测试: ```bash java -jar cmdline-jmxclient-0.10.3.jar - 192.168.1.100:12345 'Catalina:name="http-bio-8080",type=ThreadPool' maxThreads ``` 输出应类似如下内容: ``` 06/09/2017 17:34:47 +0800 org.archive.jmx.Client maxThreads: 200 ``` 若测试成功,则说明 JMX 连接正常,Zabbix 可以通过 Java Gateway 获取数据。 #### 8. 自定义 JMX 指标(可选) 如果默认模板不满足需求,可在 Zabbix 中自定义 JMX 查询项。例如,监控 Tomcat 的最大线程数: - **键值**:`jmx["Catalina<type=ThreadPool, name=\"http-bio-8080\"><>(maxThreads)"]` - **JMX URL**:`service:jmx:rmi:///jndi/rmi://{$JMX.IP}:{$JMX.PORT}/jmxrmi` 同样地,可以定义其他指标如当前线程数、堆内存使用情况等。 #### 9. 脚本化监控(可选) 为实现更复杂的监控逻辑,可编写脚本来调用 JMX 客户端并返回特定指标。例如,创建一个 shell 脚本 `jvm_memory.sh`: ```bash #!/bin/bash RESULT=$(java -jar /opt/cmdline-jmxclient-0.10.3.jar - $1:$2 'java.lang<type=Memory><>HeapMemoryUsage.used') echo $RESULT | awk '{print $4}' ``` 然后在 Zabbix Agent 中注册用户参数: ```ini UserParameter=jvm.memory.heap.used,/opt/zabbix/share/zabbix/alertscripts/jvm_memory.sh 127.0.0.1 12345 ``` 重启 Zabbix Agent 后即可在 Zabbix Server 中通过 `jvm.memory.heap.used` 获取指标。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值