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

最新文章

  1. jQuery种种
  2. 十一、Android学习第十天——项目开始(转)
  3. s3c2440 移值u-boot-2016.03 第3篇 支持Nor flash 识别
  4. Jmeter组件5. 逻辑控制
  5. Codeforces Round #384 (Div. 2)B. Chloe and the sequence 数学
  6. 再说 c++11 内存模型
  7. git简介及安装配置
  8. 从根源上解析 Java volatile 关键字的实现
  9. Office Web Add-in的技术原理和开发常见问题剖析
  10. 第九章 BootstrapTable的使用
  11. vue调用 Highcharts 实现多个数据可视化展示
  12. Python入门(白银篇)
  13. 【原创】大叔问题定位分享(9)oozie提交spark任务报 java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/KafkaProducer
  14. python对象属性管理(2):property管理属性
  15. SpringBoot系列: 单元测试
  16. ansible系列5-开启加速 Ansible 执行速度的功能
  17. 转:display:flex不兼容Android、Safari低版本的解决方案 【flex布局】
  18. 【poj2406】 Power Strings
  19. MetaBase
  20. go语言基础之defer和匿名函数结合使用

热门文章

  1. hadoop细节 -&gt; 持续更新
  2. github hooks 配置教程 钩子搭建(实测通过,手把手教程)
  3. Java开发环境之Solr
  4. Linux操作系统-CentOS6启动流程和服务管理
  5. Reprint: CMake or Make
  6. selenium中的等待方法及区别
  7. css实现硬件加速
  8. pyinstaller打包多个py文件和去除cmd黑框
  9. C++中的类所占内存空间总结(转)
  10. Top 20 IoT Platforms in 2018