背景说明:

由于zabbix监控使用自带的模版,只能监控主机上只有1个tomcat的场景适合,虽然网上很多朋友都是在每个监控项上面添加一个空格来解决问题。但是个人感觉这种方法还是蛮麻烦的,所以写一篇使用自动发现tomcat并监控。

1,在一台主机上安装2个tomcat,安装完1个tomcat,复制1个即可。复制完之后修改tomcat的端口即可。

https://www.cnblogs.com/lin1/p/5689622.html

2,进入到apache-tomcat1目录,开启jmxport端口。

在被监控的apache-tomcat1应用程序的找到catalina.sh,添加如下内容

CATALINA_OPTS="$CATALINA_OPTS
-Djavax.management.builder.initial=
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=127.0.0.1"

在被监控的apache-tomcat2应用程序的找到catalina.sh,添加如下内容

CATALINA_OPTS="$CATALINA_OPTS
-Djavax.management.builder.initial=
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=12346
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=127.0.0.1"

 

2个tomcat应用程序启动jmx端口后,重启tomcat.

3,下载获取数据的测试工具

cd  /etc/zabbix/zb_monitor_script

wget  https://coding.net/s/73ce6ac2-a902-45f3-b781-d97d5cbc79d1

简单测试:

java -jar jmxcmd.jar -  127.0.0.1:12345

java -jar jmxcmd.jar -  127.0.0.1:12346

4,定义自动发现脚本

cd /etc/zabbix/zb_monitor_script

vim tomcat_discovery.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/9/17 下午9:13
# @Author : lin
# @File : discovery tomcat.py import json,subprocess args="sudo /bin/find /usr/local/ -name 'server.xml'|awk -F '/' '{print $4}'|sort|uniq" t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0] tomcats=[] for tomcat in t.split('\n'):
if len(tomcat) != 0:
tomcats.append({'{#TOMCAT_NAME}':tomcat}) print json.dumps({'data':tomcats},indent=4,separators=(',',':'))

chmod a+x  tomcat_discovery.py

测试,自动发现,看看能不能发现tomcat,如下说明无问题。

python tomcat_discovery.py

5,配置监控tomcat的脚本

vim  tomcat_monitor.sh

#!/bin/bash
source /etc/profile
[ $# -ne ] && echo 'The scripts need 2 parameters'&&exit
TOMCAT_NAME=$
ITEM=$ JMX_PORT=`ps -ef|grep $|grep -vE 'grep|sh'|awk -F '=' '{print $6}'|awk '{print $1}'`
#读取server.xml配置文件,获取端口
xml=/usr/local/$/conf/server.xml PORT=`sed -n ''p $xml |awk -F '[= " ]+' '{print $4}' `
cmd=/etc/zabbix/zb_monitor_script/cmdline-jmxclient-0.10..jar
logdir=/tmp/zabbix_tmp
[ ! -d "$logdir" ] && mkdir -p $logdir && chmod $logdir
cd $logdir function HeapMemoryUsage()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Memory HeapMemoryUsage > $ITEM.$JMX_PORT
} function EdenSpaceUsage()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Eden\ Space Usage > $ITEM.$JMX_PORT
} function SurvivorSpaceUsage()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Survivor\ Space Usage > $ITEM.$JMX_PORT
} function TenuredGenUsage()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Tenured\ Gen Usage > $ITEM.$JMX_PORT
} function NonHeapMemoryUsage()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Memory NonHeapMemoryUsage > $ITEM.$JMX_PORT
} function MetaspaceUsage()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Metaspace Usage > $ITEM.$JMX_PORT
} function CodeCacheUsage()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Code\ Cache Usage > $ITEM.$JMX_PORT
} function CompressedClassSpaceUsage()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Compressed\ Class\ Space Usage > $ITEM.$JMX_PORT
} function TotalLoadedClassCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading TotalLoadedClassCount > $ITEM.$JMX_PORT
} function LoadedClassCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading LoadedClassCount > $ITEM.$JMX_PORT
} function UnloadedClassCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading UnloadedClassCount > $ITEM.$JMX_PORT
} function TotalStartedThreadCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Threading TotalStartedThreadCount > $ITEM.$JMX_PORT
} function ThreadCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Threading ThreadCount > $ITEM.$JMX_PORT
} function PeakThreadCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Threading PeakThreadCount > $ITEM.$JMX_PORT
} function maxThreads()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name=\"http-nio-$PORT\",type=ThreadPool maxThreads 2> $ITEM.$JMX_PORT
} function currentThreadCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name=\"http-nio-$PORT\",type=ThreadPool currentThreadCount 2>$ITEM.$JMX_PORT
} function currentThreadsBusy()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name=\"http-nio-$PORT\",type=ThreadPool currentThreadsBusy 2>$ITEM.$JMX_PORT
} function GlobalRequestProcessor_bytesReceived()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name=\"http-nio-$PORT\",type=GlobalRequestProcessor bytesReceived 2>$ITEM.$JMX_PORT
} function GlobalRequestProcessor_bytesSent()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name=\"http-nio-$PORT\",type=GlobalRequestProcessor bytesSent 2>$ITEM.$JMX_PORT
} function requestCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name=\"http-nio-$PORT\",type=GlobalRequestProcessor requestCount 2>$ITEM.$JMX_PORT
} function errorCount()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT Catalina:name=\"http-nio-$PORT\",type=GlobalRequestProcessor errorCount 2>$ITEM.$JMX_PORT
} function jvmUptime()
{
java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Runtime Uptime > $ITEM.$JMX_PORT
} # function collectdata()
# {
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Memory HeapMemoryUsage > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Eden\ Space Usage > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Survivor\ Space Usage > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Tenured\ Gen Usage > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=Memory NonHeapMemoryUsage > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Metaspace Usage > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Code\ Cache Usage > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=MemoryPool,name=Compressed\ Class\ Space Usage > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading TotalLoadedClassCount > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading LoadedClassCount > $ITEM.$JMX_PORT
# java -jar $cmd - 127.0.0.1:$JMX_PORT java.lang:type=ClassLoading UnloadedClassCount > $ITEM.$JMX_PORT
# } case $ITEM in
#统计堆空间堆
HeapMemoryUsage.max)
HeapMemoryUsage
sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
HeapMemoryUsage.used)
HeapMemoryUsage
sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
HeapMemoryUsage.committed)
HeapMemoryUsage
sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
#统计伊甸元代空间
EdenSpaceUsage.max)
EdenSpaceUsage
sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
EdenSpaceUsage.used)
EdenSpaceUsage
sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
EdenSpaceUsage.committed)
EdenSpaceUsage
sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
#统计内存池survivor space(幸存区空间)
SurvivorSpaceUsage.max)
SurvivorSpaceUsage
sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
SurvivorSpaceUsage.used)
SurvivorSpaceUsage
sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
SurvivorSpaceUsage.committed)
SurvivorSpaceUsage
sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
#统计内存池old gen(Tenured Gen 老年代空间)
TenuredGenUsage.max)
TenuredGenUsage
sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
TenuredGenUsage.used)
TenuredGenUsage
sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
TenuredGenUsage.committed)
TenuredGenUsage
sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
#统计非堆内存
NonHeapMemoryUsage.used)
NonHeapMemoryUsage
sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
NonHeapMemoryUsage.committed)
NonHeapMemoryUsage
sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
#统计内存池meta space(元数据空间)
MetaspaceUsage.used)
MetaspaceUsage
sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
MetaspaceUsage.committed)
MetaspaceUsage
sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
#统计内存池code cache(代码缓存)
CodeCacheUsage.max)
CodeCacheUsage
sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
CodeCacheUsage.used)
CodeCacheUsage
sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
CodeCacheUsage.committed)
CodeCacheUsage
sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
#统计compressed class space(压缩类的空间)
CompressedClassSpaceUsage.max)
CompressedClassSpaceUsage
sed -n '4p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
CompressedClassSpaceUsage.used)
CompressedClassSpaceUsage
sed -n '5p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
CompressedClassSpaceUsage.committed)
CompressedClassSpaceUsage
sed -n '2p' $ITEM.$JMX_PORT|awk '{print $2}'
;;
#统计类加载的个数
ClassLoading.TotalLoadedClassCount)
TotalLoadedClassCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
ClassLoading.LoadedClassCount)
LoadedClassCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
ClassLoading.UnloadedClassCount)
UnloadedClassCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
#统计java线程数
Threading.TotalStartedThreadCount)
TotalStartedThreadCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
ThreadCount)
ThreadCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
PeakThreadCount)
PeakThreadCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
#统计tomcat的线程数
maxThreads)
maxThreads
awk '{print $6}' $ITEM.$JMX_PORT
;;
currentThreadCount)
currentThreadCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
currentThreadsBusy)
currentThreadsBusy
awk '{print $6}' $ITEM.$JMX_PORT
;;
#统计tomcat网络流量
bytesReceived)
GlobalRequestProcessor_bytesReceived
awk '{print $6}' $ITEM.$JMX_PORT
;;
bytesSent)
GlobalRequestProcessor_bytesSent
awk '{print $6}' $ITEM.$JMX_PORT
;;
#统计tomcat的请求数
requestCount)
requestCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
errorCount)
errorCount
awk '{print $6}' $ITEM.$JMX_PORT
;;
#jvm运行时间,如果运行时间没获取到数据,则表示jvm stop ,从而判断tomcat stop
jvmUptime)
jvmUptime
[ $? -eq ]&&awk '{print $6/1000}' $ITEM.$JMX_PORT||echo
;;
esac

6,定义监控配置文件

cd /etc/zabbix/zabbix_agentd.d/

vim userparameter_tomcat.conf

UserParameter=tomcat.discovery,/usr/bin/python /etc/zabbix/zb_monitor_script/tomcat_discovery.py
UserParameter=tomcat.status[*],/bin/bash /etc/zabbix/zb_https://coding.net/s/03996946-8b2c-4b42-9bdf-957f17800315monitor_script/tomcat_monitor.sh $ $

7,重启zabbix-agent服务

/etc/init.d/zabbix-agent restart

8,web界面添加主机,导入模版。

模版地址:https://coding.net/s/03996946-8b2c-4b42-9bdf-957f17800315

zabbix监控自动发现监控tomcat(V1)的更多相关文章

  1. zabbix使用自动发现监控esxi的磁盘存储storage

    zabbix使用自动发现监控esxi的磁盘存储storage 在任意一台可以访问vcenter的zabbix-agent服务器上添加exsi的磁盘监控模板即可 创建模板过程: custom.esxi. ...

  2. zabbix自动发现监控url

    1.在监控客户机上 web_site_code_status.sh: #!/bin/bash UrlFile="/opt/scripts/WEB.txt" IFS=$'\n' we ...

  3. zabbix的自动发现、自定义添加监控项目、配置邮件告警

    1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需 ...

  4. zabbix自动发现监控mysql

    一. 数据库给只读权限 1.1 grant usage on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'; flush privileges; ...

  5. zabbix添加自定义监控(自动发现)遇到的问题

    问题:zabbix添加自动发现端口,提示Value should be a JSON object [root@localhost zabbix_agentd.d]# zabbix_get -s 19 ...

  6. Prometheus基于consul自动发现监控对象 https://www.iloxp.com/archive/11/

      Prometheus 监控目标为什么要自动发现 频繁对Prometheus配置文件进行修改,无疑给运维人员带来很大的负担,还有可能直接变成一个“配置小王子”,即使是配置小王子也会存在人为失误的情况 ...

  7. 【Zabbix】Zabbix Server自动发现

    Zabbix自动发现 由于有上百台的虚拟机需要监控,如果一个个去添加配置,费时费力.Zabbix的自动发现,可以自动发现需要监控的机器,监控相应指标. 前置条件 安装部署好Zabbix Server. ...

  8. 01 - zabbix | LLD自动发现

    01 - zabbix | LLD自动发现 1. 原理 zabbix支持设置变量,用{#VAR_NAME}来表示.然后有一些系统保留的变量 2. 设置 2.1 交换机电源自动发现   名字写好后进进入 ...

  9. zabbix自定义自动发现模板

    需求: 自定义发现磁盘io,并实现监控.其他的业务组件自动发现监控其实也和这个大同小异,自动发现主要逻辑就是你要根据组件规则自动匹配出需要监控的所有组件,再通过传参的方式获取对应组件数据. 自动发现无 ...

随机推荐

  1. [Jenkins][git]构建时提示Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git reset --hard" returned status code 128:

    --------------------- 如需转载,转载请注明出处. --------------------- 今日发现所有IOS构建相关的job全部失败,并提示如下错误: ERROR: Erro ...

  2. 多线程编程学习笔记——使用异步IO

    接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...

  3. 08 训练Tensorflow下围棋

    这里介绍一下开源项目Mugo,它基于Tensorflow,可以使用sgf的棋谱训练围棋机器人,跟你下围棋,这里直接给出本人修改完善好的项目,只介绍一下用法. 链接:http://pan.baidu.c ...

  4. api网关揭秘--spring cloud gateway源码解析

    要想了解spring cloud gateway的源码,要熟悉spring webflux,我的上篇文章介绍了spring webflux. 1.gateway 和zuul对比 I am the au ...

  5. Facebook ATC弱网环境搭建

    用户的网络环境千姿百态,弱网的.高延时的.丢包的.常有用户反馈偶发bug,我们测试人员却始终无法复现,根据用户的描述,开发排查可能是网络不稳定导致的,所以急需建个弱网环境来测试. 弱网工具简介: Au ...

  6. python 要掌握面向对象,你得会做这些题

    1,面向对象三大特性,各有什么用处,说说你的理解. 继承:解决代码重用问题 多态:多态性,可以在不考虑对象类型的情况下而直接使用对象 封装:明确的区分内外,控制外部对隐藏属性的操作行为,隔离复杂度 2 ...

  7. Java基础系列--instanceof关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8492158.html instanceof关键字是在Java类中实现equals方法最常使 ...

  8. 不规范的json文档 转化成 java 对象的处理

    最近练习爬取数据,遇到了json文档中属性名称没有用双引号的情况,内容如下: 标准的json文档,属性名称都是带双引号的 最后写了个方法,替换属性名字 为 两头追加双引号的属性名字, 特别要注意,防止 ...

  9. 使用LINQ生成Where的SQL语句

    实例1-使用实例-单个语句: ; List<, , }; List<User_info> userInfoList = UserCenterBus.Select_WebSiteBas ...

  10. 《Office 365开发入门指南》上市说明和读者服务

    写在最开始的话 拙作<Office 365开发入门指南>上周开始已经正式在各大书店.在线商城上市,欢迎对Office 365的开发.生态感兴趣的开发者.项目经理.产品经理参考本书,全面了解 ...