前面已經介紹過Tomcat單機多實例部署,接下來就在他的基礎上進行下一步操做:Tomcat多實例監控!html
Tomcat多實例監控過程和以前的redis多實例原理同樣,分爲如下4步:java
一、獲取多實例git
二、採集數據github
三、製做模板redis
四、主機套模板apache
1、獲取多實例
在前面咱們已經知道Tomcat多實例的目錄結構以下:flask
獲取多實例以前,須要進行以下設置:tomcat
一、在bin目錄下的catalina.sh腳本增長以下內容bash
# ----- 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,是否啓用認證。spa
二、在單獨實例中設置(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
三、重啓多實例,查看端口啓動狀況
四、獲取多實例端口
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
注意,我這裏的目錄結構須要根據你的部署進行修改!
執行腳本:
發現兩個實例。
2、採集數據
數據採集須要使用到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
3、模板製做
根據採集的數據進行模板製做。
4、主機上套
5、查看最新數據
數據圖標
6、參考文檔和腳本地址
https://github.com/loveqx/zabbix-doc/tree/master/zabbix-scripts/zabbix-template-tomcat