第十三篇、【Zabbix监控项之Jvm监控】
0、注意事项
如果编译Zabbix Server端的时候,没有开启--enable-java (Zabbix Java gateway),那需要重新编译源码。
1、重新编译源码
源码安装建议不要删除,保存起来,以后需要重新编译很快,因为编译过的*.o,不用再进行重新编译,只编译新功能的代码
[root@filestore-v2 ~ ]# cd zabbix-4.4.3 [root@filestore-v2 zabbix-4.4.3]# ./configure --prefix=/data/application/zabbix-4.4.3 \ --enable-server \ --enable-agent \ --with-mysql=/data/application/mysql-5.7.25/bin/mysql_config \ --enable-ipv6 \ --with-net-snmp \ --with-libcurl \ --with-libxml2 \ --enable-java [root@filestore-v2 zabbix-4.4.3]# make && make install #查看安装好,多出的程序 [root@filestore-v2 ~]# tree /data/application/zabbix-4.4.3/sbin/ /data/application/zabbix-4.4.3/sbin/ ├── zabbix_agentd ├── zabbix_java │ ├── bin │ │ └── zabbix-java-gateway-4.4.3.jar │ ├── lib │ │ ├── android-json-4.3_r3.1.jar │ │ ├── logback-classic-0.9.27.jar │ │ ├── logback-console.xml │ │ ├── logback-core-0.9.27.jar │ │ ├── logback.xml │ │ └── slf4j-api-1.6.1.jar │ ├── settings.sh │ ├── shutdown.sh │ └── startup.sh └── zabbix_server
2、配置zabbix-java-gateway
[root@filestore-v2 zabbix_java]# vi /data/application/zabbix-4.4.3/sbin/zabbix_java/settings.sh ... 4 ### Option: zabbix.listenIP 5 # IP address to listen on. 6 # 7 # Mandatory: no 8 # Default: #监听的网口地址 9 LISTEN_IP="0.0.0.0" 10 11 ### Option: zabbix.listenPort 12 # Port to listen on. 13 # 14 # Mandatory: no 15 # Range: 1024-32767 16 # Default: #监听的端口 17 LISTEN_PORT=10052 19 ### Option: zabbix.pidFile 20 # Name of PID file. 21 # If omitted, Zabbix Java Gateway is started as a console application. 22 # 23 # Mandatory: no 24 # Default: 25 # PID_FILE= 26 # 服务启动的pid文件 27 PID_FILE="/data/application/zabbix-4.4.3/log/zabbix_java.pid" 28 29 ### Option: zabbix.startPollers 30 # Number of worker threads to start. 31 # 32 # Mandatory: no 33 # Range: 1-1000 34 # Default: # 开启的工作线程数 35 START_POLLERS=5
3、zabbix-java-gateway的服务开启
# 开启zabbix-java-gateway的服务 [root@filestore-v2 zabbix-4.4.3]# /data/application/zabbix-4.4.3/sbin/zabbix_java/startup.sh # 检查端口是否开启 [root@filestore-v2 ~]# netstat -tunlp | grep java tcp6 0 0 :::10052 :::* LISTEN 95040/java
4、配置Zabbix Server端
# 配置Zabbix Server端的配置文件 [root@filestore-v2 ~]# vi /data/application/zabbix-4.4.3/etc/zabbix_server.conf ... 276 ### Option: JavaGateway 277 # IP address (or hostname) of Zabbix Java gateway. 278 # Only required if Java pollers are started. 279 # 280 # Mandatory: no 281 # Default: 282 JavaGateway=192.168.10.96 283 284 ### Option: JavaGatewayPort 285 # Port that Zabbix Java gateway listens on. 286 # 287 # Mandatory: no 288 # Range: 1024-32767 289 # Default: 290 JavaGatewayPort=10052 291 292 ### Option: StartJavaPollers 293 # Number of pre-forked instances of Java pollers. 294 # 295 # Mandatory: no 296 # Range: 0-1000 297 # Default: 298 StartJavaPollers=5 ... # 重启Zabbix Server端服务 [root@filestore-v2 ~]# /etc/init.d/zabbix_server restart
5、在Tomcat服务开启JMX协议
5.1、JMX协议开启会产生两个端口:
一、注册端口(即是我们配置【sun.management.jmxremote.port=12345】)
二、JMX服务端口,这个端口是随机生成,所以在固定下来,可以防火墙开放
注意:以上两个端口必须在防火墙开启出来。否则JMX一定不会开启成功
5.2、固定服务端口的方法
首先到官网(https://tomcat.apache.org)下载jmx扩展插件:这里使用的是Tomcat 7,根据自己版本,自己行下载,因为是官方提供的,所以放心下载。
5.3、linux下载方法
#进入tomcat jar库的目录 [root@sms-v2 ~]# cd /data/application/apache-tomcat-8.5.38_custom/lib/ #直接使用wget下载jar包 [root@sms-v2 lib]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.99/bin/extras/catalina-jmx-remote.jar 5.4、注册到tomcat使之生效 [root@sms-v2 ~]# vi /data/application/apache-tomcat-8.5.38_custom/conf/server.xml
5.4、注册到tomcat使之生效
... 22 <Server port="8006" shutdown="SHUTDOWN"> 23 <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 24 <!-- Security listener. Documentation at /docs/config/listeners.html 25 <Listener className="org.apache.catalina.security.SecurityListener" /> 26 --> 27 <!--APR library loader. Documentation at /docs/apr.html --> 28 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 29 <!-- Prevent memory leaks due to use of particular java/javax APIs--> 30 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 31 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 32 <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- rmiRegistryPortPlatform : 注册端口,rmiServerPortPlatform : jmx服务端口--> 33 <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="12345" rmiServerPortPlatform="10002" /> ...
5.5、Tomcat 开启jmx的配置
#复制配置密码的文件 [root@sms-v2 ~]# cp /data/application/jdk1.8.0_152/jre/lib/management/jmxremote.password.template /data/application/jdk1.8.0_152/jre/lib/management/jmxremote.password #配置jmx密码文件,设置只有root用户才读写权限 [root@sms-v2 ~]# chmod 600 /data/application/jdk1.8.0_152/jre/lib/management/jmxremote.password #配置jmx用户权限文件,设置只有root用户才读写权限 [root@sms-v2 ~]# chmod 600 /data/application/jdk1.8.0_152/jre/lib/management/jmxremote.access #设置监控的账号和密码 [root@sms-v2 ~]# vi /data/application/jdk1.8.0_152/jre/lib/management/jmxremote.password 59 # Following are two commented-out entries. The "measureRole" role has 60 # password "QED". The "controlRole" role has password "R&D". 61 # #账号 密码 62 monitorRole abcabc123 63 # controlRole R&D #设置角色的权限 [root@sms-v2 ~]# vi /data/application/jdk1.8.0_152/jre/lib/management/jmxremote.access 72 # o The "monitorRole" role has readonly access. 73 # o The "controlRole" role has readwrite access and can create the standard 74 # Timer and Monitor MBeans defined by the JMX API. 75 76 monitorRole readonly 77 controlRole readwrite \ 78 create javax.management.monitor.*,javax.management.timer.* \ 79 unregister [root@sms-v2 ~]# vi /data/application/apache-tomcat-8.5.38_custom/bin/catalina.sh CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.10.95 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/data/application/jdk1.8.0_152/jre/lib/management/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/data/application/jdk1.8.0_152/jre/lib/management/jmxremote.access"
5.6、重启tomcat服务(略)
5.7、检查开启的端口
[root@sms-v2 ~]# netstat -tunlp | grep java tcp6 0 0 :::10002 :::* LISTEN 106539/java tcp6 0 0 :::8088 :::* LISTEN 106539/java tcp6 0 0 :::12345 :::* LISTEN 106539/java tcp6 0 0 :::8443 :::* LISTEN 72188/java
6、在tomcat服务器防火墙放行jmx协议的12345和10002端口
[root@sms-v2 ~]# firewall-cmd --permanent --add-port=12345/tcp success
[root@sms-v2 ~]# firewall-cmd --permanent --add-port=10002/tcp
success
[root@sms-v2 ~]# firewall-cmd --reload success
7、用java自带的工具测试【jconsole.exe】和【jvisualvm.exe】
7.1、【jconsole.exe】
显示效果
7.2、【jvisualvm.exe】
显示效果
8、开始在Zabbix Server配置JMX
9、增加JMX的模板
点击【更新】
由于设置账号和密码,批量修改用户名和密码
10、查看JMX是否配置成功
11、利用jmx协议自定义监控jvm堆使用内存(必须会)
11.1、利用【jconsole.exe】工具查询key项的值【这里以堆使用内存为例】
键值格式: jmx["ObjectName",属性值]
11.2、组装jmx[]第一项值
jmx["java.lang:type=Memory",]
11.3、组装jmx[]第二项
#最终监控项组装成功
jmx["java.lang:type=Memory",HeapMemoryUsage.used]
11.4、开始配置该监控项
11.5、配置画图
11.6、查看画图的效果
12、有关JVM更多参数的监控自行利用上面的工具,获取参数进行监控
下一篇【Zabbix监控项之Zabbix采集器(Trapper)监控】请点击查看