通過Zabbix監控Tomcat單機多實例


前面已經介紹過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM