前面已经介绍过Tomcat单机多实例部署,接下来就在他的基础上进行下一步操作:Tomcat多实例监控!
Tomcat多实例监控过程和之前的redis多实例原理一样,分为以下4步:
1、获取多实例
2、采集数据
3、制作模板
4、主机套模板
一、获取多实例
在前面我们已经知道Tomcat多实例的目录结构如下:
获取多实例之前,需要进行如下设置:
1、在bin目录下的catalina.sh脚本增加如下内容
# ----- Execute The Requested Command ----------------------------------------- CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=10.11.100.99 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
注意必须在 “Execute The Requested Command”后面新增,指定主机名或IP,是否开启远程管理,是否启动ssl,是否启用认证。
2、在单独实例中设置(conf/server.xml文件)
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="12345" rmiServerPortPlatform="12346"/>
说明:远程连接端口是12345,获取数据端口是12346
同样地,在ins02中
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="12347" rmiServerPortPlatform="12348"/>
远程连接端口是12347,获取数据端口是12348
3、重启多实例,查看端口启动情况
4、获取多实例端口
cat jmx_discovery.sh
#!/bin/bash t_datadir=`find /usr/local/tomcat/tomcat-*/conf/ -name server.xml|awk -F "/conf/server.xml" '{print $1}'` tomcat_no=`find /usr/local/tomcat/tomcat-*/conf/ -name server.xml|wc -l` n_port=12345 i=1 printf '{"data":[\n' for tomcat in $t_datadir do t_service=$(echo "$tomcat"|awk -F"/" '{print $(NF)}') if [ "$i" != ${tomcat_no} ];then printf "\t\t{ \n" printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n" printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"},\n" else printf "\t\t{ \n" printf "\t\t\t\"{#JMX_PORT}\":\"${n_port}\",\n" printf "\t\t\t\"{#JAVA_NAME}\":\"${t_service}\"}]}\n" fi let "n_port=n_port+2" let "i=i+1" done
注意,我这里的目录结构需要根据你的部署进行修改!
执行脚本:
发现两个实例。
二、采集数据
数据采集需要使用到cmdline-jmxclient-0.10.3.jar,专门用来通过JMX方式获取数据的。
拷贝cmdline-jmxclient-0.10.3.jar到/lib下,当然你也可以随便放置其他目录,只要zabbix用户能够访问就行,因为zabbix-agent是由zabbix用户启动的。
采集脚本:
cat add_service_tomcat.sh
#!/bin/bash local_ip=`ifconfig|awk -F '[ :]+' 'NR==2 {print $4}'` #提取主机IP cat >> /etc/zabbix/zabbix_agentd.d/tomcat.conf <<END #修改zabbix_agentd.conf,添加KEY UserParameter=java.jmx.discovery[*],/etc/zabbix/externalscripts/jmx_discovery.sh UserParameter=java.Runtime.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Runtime \$2 2>&1 |grep \$2 |awk '{print \$NF}' UserParameter=java.Memory.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory \$2 2>&1 |grep \$2 |awk '{print \$NF}' UserParameter=java.System.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=OperatingSystem \$2 2>&1 |grep \$2 |awk '{print \$NF}' UserParameter=java.HeapMemoryUsage.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory HeapMemoryUsage 2>&1 |grep \$2 |awk '{print \$NF}' UserParameter=java.NonHeapMemoryUsage.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Memory NonHeapMemoryUsage 2>&1 |grep \$2 |awk '{print \$NF}' UserParameter=java.LoadClass.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=ClassLoading \$2 2>&1 |awk '{print \$NF}' UserParameter=java.Threading.status[*],java -jar /lib/cmdline-jmxclient-0.10.3.jar - $local_ip:\$1 java.lang:type=Threading \$2 2>&1 |awk '{print \$NF}' END
三、模板制作
根据采集的数据进行模板制作。
四、主机上套
五、查看最新数据
数据图标
六、参考文档和脚本地址
https://github.com/loveqx/zabbix-doc/tree/master/zabbix-scripts/zabbix-template-tomcat
https://blog.51cto.com/13120271/2070640
来源:https://www.cnblogs.com/skyflask/p/11231185.html