Zabbix监控Tomcat单实例(JMX)

1. 服务器端

1.1 Zabbix-java-gateway安装

JMX监控原理图:

《Zabbix监控Tomcat单实例(JMX)》 tomcat监控原理图

  • 安装zabbix-java-gateway
    如果是安装在zabbix-server服务器上面,可以在编译时候,增加–enable-java,安装以后会在安装文档下的sbin下发现zabbix-java-gateway启动文件和配置文件。
    ./configure --prefix=/usr/local/zabbix-3.0.3/ --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
  • Yum安装
配置yum源:
rpm -ihv http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm
[root@localhost ~]# yum list |grep zabbix-java
zabbix-java-gateway.x86_64    3.0.14-1.el6                zabbix 
[root@localhost ~]# yum install -y zabbix-java-gateway
[root@localhost ~]# service zabbix-java-gateway start
Starting zabbix java gateway:                              [确定]

特别说明:
在一个监控系统只有一个zabbix-java-gateway,可以部署在zabbix-sever端也可以部署在其他机器上,需要和zabbix-server网络可达。因为如果tomcat开启远程JMX存在安全隐患,因此在全外网情况下不建议直接开启。

1.2配置文件(zabbix_server.conf和zabbix_java_gateway.conf)

  • 配置zabbix_java_gateway.cnf:
# This is a configuration file for Zabbix Java Gateway.
# It is sourced by startup.sh and shutdown.sh scripts.

### Option: zabbix.listenIP
#   IP address to listen on.
#
# Mandatory: no
# Default:
LISTEN_IP="0.0.0.0"(本机ip地址,如果和server安装在相同的位置可以不修改)

### Option: zabbix.listenPort
#   Port to listen on.
#
# Mandatory: no
# Range: 1024-32767
# Default:
LISTEN_PORT=10052(端口可以修改为其他,在server段需要相同的配置)

### Option: zabbix.pidFile
#   Name of PID file.
#   If omitted, Zabbix Java Gateway is started as a console application.
#
# Mandatory: no
# Default:
# PID_FILE=

PID_FILE="/var/run/zabbix/zabbix_java.pid"

### Option: zabbix.startPollers
#   Number of worker threads to start.
#
# Mandatory: no
# Range: 1-1000
# Default:
START_POLLERS=5(设置启动多个线程,这里和server段相同)

### Option: zabbix.timeout
#   How long to wait for network operations.
#
# Mandatory: no
# Range: 1-30
# Default:
# TIMEOUT=3
TIMEOUT=3(超时时间)
  • 配置zabbix_server.conf:
### Option: JavaGateway(找到这里配置以下三个参数)
#   IP address (or hostname) of Zabbix Java gateway.
#   Only required if Java pollers are started.
# Mandatory: no
# Default:
JavaGateway=192.168.199.63 #如果是本机安装直接使用127.0.0.1
### Option: JavaGatewayPort
#   Port that Zabbix Java gateway listens on.
# Mandatory: no
# Range: 1024-32767
# Default:
JavaGatewayPort=10052 #端口号和javagateway要对应
### Option: StartJavaPollers
#   Number of pre-forked instances of Java pollers.#
# Mandatory: no
# Range: 0-1000
# Default:
StartJavaPollers=5 #线程数和客户端配置对应 不能少于客户端数目

2. 客户端

2.1 Tomcat配置

开启JMX:
在Tomcat path/bin/catalina.sh增加如下内容:
CATALINA_OPTS="-Dcom.sun.management.jmxremote #(开启jmx远程)
-Dcom.sun.management.jmxremote.authenticate=false #(不认证)
-Dcom.sun.management.jmxremote.ssl=false #(不使用ssl)
-Dcom.sun.management.jmxremote.port=12345 #(端口号)
-Djava.rmi.server.hostname=192.168.199.35" #(开启主机名这里直接使用ip地址)

特别说明:

  1. 如果是内网监控并且主机没有开启防火墙上述设置没有问题开启后也可以正常访问。Jconsole或者jvisualvm连接测试下。(这两个java远程测试工具后面还会用到)

    《Zabbix监控Tomcat单实例(JMX)》 JMX监控

  2. 如果是需要开启本机防火墙或者需要通过防火墙设备连接外网,这个设置就无法满足要求。或报jmx:rmi无法连接的错误。经过查询发现因为开启JMX会随机生成两个端口,jmx:rmi连接需要使用到另外两个端口,因为是随机每次启动都会改变因此无法设置防火墙。
    解决方案1:(只能解决本机防火墙开启的问题)
    在Tomcat官方下载:JMX Remote jar 。在找到对应版本,放到Tomcat文件夹下的lib目录下。
    《Zabbix监控Tomcat单实例(JMX)》 下载
去掉-Dcom.sun.management.jmxremote.port=12345 #(端口号)这行。
在server.xml中增加如下内容:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"  
          rmiRegistryPortPlatform="12345" rmiServerPortPlatform="12346" />
设置两个端口号,并且设置好防火墙。在远程连接正常啦。如果使用的是云主机,并且是1对1绑定外网ip地址,如下ip需要设置为外网的地址。
-Djava.rmi.server.hostname=外网ip"

但是如果使用的是防火墙设备和内网服务器,无法直接使用外网ip监控

2.2 web配置

添加比较简单,填写主机信息

《Zabbix监控Tomcat单实例(JMX)》 web 设置

增加监控模版:

《Zabbix监控Tomcat单实例(JMX)》 增加模版

特别注意:这里需要下面指示框输入关键字,需要点击添加,在点击更新。如果是第一次添加下面的更新按钮是也是添加。前面agent也是根据需要添加。添加了两个 CustomTomcat和Template JMX Generic两个(因为有些监控项自动的没有)

2.3 监控模版(修改)

由于Tomcat监控项比较特殊,比如每次设置端口不一样,会导致监控项监控不到。不同版本的Tomcat监控项名称也不同,因此需要修改监控模版。如何获取主机监控项呢?使用Jconsole或者jvisualvm来查看监控项名称。

《Zabbix监控Tomcat单实例(JMX)》 监控项查看

《Zabbix监控Tomcat单实例(JMX)》 监控项的值

《Zabbix监控Tomcat单实例(JMX)》 监控模版

所有的监控项都在上面可以找到,找到你需要监控项,在右边可以看到监控项内容,监控项这里填写的就是上面那个图中右边的位置,后面监控项的值

类-总计 jmx[“java.lang:type=ClassLoading”,”TotalLoadedClassCount”]这个监控项就是下面这个位置。

《Zabbix监控Tomcat单实例(JMX)》 监控值

根据自己的Tomcat配置对应的监控项就可以了。网上流传的通用模版和系统自带模版,都无法完美的匹配Tomcat,自己写手动配置。例如下面是我两台相同配置的服务器可以看到最后两个不一样。

《Zabbix监控Tomcat单实例(JMX)》 1
《Zabbix监控Tomcat单实例(JMX)》 2

    原文作者:十二楼中月
    原文地址: https://www.jianshu.com/p/bd6a601acbbb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞