经过Zabbix监控Tomcat单机多实例

前面已经介绍过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

https://blog.51cto.com/13120271/2070640

相关文章
相关标签/搜索