热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Zabbix监控Tomcat案例

[Tomcat部署][root@tomcat~]#wgethttp:mirror.bit.edu.cnapachetomcattomcat-8v8.0.52binapache-to

[Tomcat部署]

[root@tomcat ~]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.52/bin/apache-tomcat-8.0.52.tar.gz

[root@tomcat ~]# tar zxvf apache-tomcat-8.0.52.tar.gz

[root@tomcat ~]# mv apache-tomcat-8.0.52 /usr/local/tomcat

[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh 

[root@Tomcat ~]# netstat -anput | grep java 
tcp        0      0 :::8080                     :::*                        LISTEN      1442/java           
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      1442/java           
tcp        0      0 :::8009                     :::*                        LISTEN      1442/java           
[root@Tomcat ~]# ps -ef | grep tomcat 
root       1442      1 10 04:43 pts/1    00:00:02 /usr/local/java//bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root       1485   1275  0 04:43 pts/1    00:00:00 grep tomcat

【Zabbix监控Tomcat工作原理】

Zabbix-server要知道java应用程序的某项性能的使用时候 ,会启动自身的一个Zabbix-JavaPollers进程去链接zabbix-JavaGateway请求数据,而zabbix-Javagateway收到请求后并使用;

“JMXmanagentAPI"去查询特定的应用程序,而前提是应用程序这端在开启的时候 需要“-Dcom.sun.management.jmxremote”参数来开启JMX远程查询就行,JAVA程序会启动自身的一个简单的小程序端口向Zabbix-JavaGatway提供请求数据

技术分享图片

【zabbix监控Tomcat配置】

上图中我们可以得知,配置zabbix监控Java应用程序的关键点在于:配置Zabbix-JavaGatway,让Zabbix-server能够连接zabbix-JavaGatway,Tomcat开启JVM远程监控功能等;

1)编译安装zabbix server的时候需要加上--enable-java这个模块,以便支持JMX监控,如果之前预编译的时候没有加上这个模块,那么需要重新预编译,在这个在这里需要的注意的是,重新编译只需两步即可,

不要make install,否则的话配置都重置了~

 ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --enable-net-snmp --with-libcurl --enable-java 

make 

Ps:如果./configure预编译的过程中出现error报错,那么这个 原因是 缺少javac软件,我们直接yum install javac*安装便完事了~在此重新编译即可;

技术分享图片

承接./configure预编译,make之后,我们我们进入zabbix的目录,查看去config.log这个日志,我们可以看到加上的java模块

[root@localhost ~]# cd /usr/src/zabbix-3.4.10/
[root@localhost zabbix-3.4.10]# ls
aclocal.m4 bin ChangeLog conf config.log config.sub configure.ac database frontends INSTALL m4 Makefile.am man missing README src
AUTHORS build compile config.guess config.status configure COPYING depcomp include install-sh Makefile Makefile.in misc NEWS sass upgrades
[root@localhost zabbix-3.4.10]# !grep
grep ./configure config.log
$ ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --enable-net-snmp --with-libcurl --enable-java
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux

【Tomcat被控端配置】

配置zabbix-agen客户端Tomcat JVM,也就是tomcat的远程调用脚本,配置jvm编辑catalina.sh,并加入以下配置

[root@Tomcat ~]# vim /usr/local/tomcat/bin/catalina.sh

技术分享图片

1 CATALINA_OPTS="$CATALINA_OPTS 
2 -Dcom.sun.management.jmxremote      #开启远程监控
3 -Dcom.sun.management.jmxremote.port=12345    #远程监控端口
4 -Dcom.sun.management.jmxremote.ssl=false     #远程ssl验证端口
5 -Dcom.sun.management.jmxremote.authenticate=false    #关闭权限认证
6 -Djava.rmi.server.hostname=192.168.17.134"   #被监控tomcat主机地址,默认就写本地即可

3)随后重启tomcat服务

[root@Tomcat ~]# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java/
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@Tomcat~ bin]# netstat -anput | egrep "12345|8080|8005|8009"
tcp6       0      0 :::8080                 :::*                    LISTEN      20422/java          
tcp6       0      0 :::12345                :::*                    LISTEN      20422/java          
tcp6       0      0 192.168.17.134:8005      :::*                    LISTEN      20422/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      20422/java  

【问题汇总】 

我们重新启动的时候,可能发现执行是正确的,并没有出现任何错误,但实际上这个tomcat没有起来,在这里一定要netstat或者ps -ef进一步检查一下服务是否正常运行,进一步判断

netstat发现,tomcat是没有启动的,查看日志,发现配置jmx的catalina.sh脚本没有生效,导致tomcat服务启动异常,这个原因是由于配置的时候位置写错了;

技术分享图片

技术分享图片

                                                  图A

解决方法如下所示,加到最下面即可(在这里,注意一下,这里有很大的坑,配置参数位置必须要注意,否则无法生效,导致12345端口未启动,最终导致链接拒绝,详见图A就知道)

技术分享图片

1 CATALINA_OPTS="$CATALINA_OPTS  
2 -Dcom.sun.management.jmxremote 
3 -Djava.rmi.server.hostname=192.168.17.134 
4 -Dcom.sun.management.jmxremote.port=12345 
5 -Dcom.sun.management.jmxremote.ssl=false 
6 -Dcom.sun.management.jmxremote.authenticate=false"
[root@localhost bin]# /usr/local/tomcat/bin/startup.sh 
[root@localhost bin]# netstat -anput | egrep "12345|8080|8005|8009" tcp6 0 0 :::8080 :::* LISTEN 20422/java tcp6 0 0 :::12345 :::* LISTEN 20422/java tcp6 0 0 192.168.2.144:8005 :::* LISTEN 20422/java tcp6 0 0 :::8009 :::* LISTEN 20422/java

【监听测试&验证】

到目前 位置还没完事,还要 验证jmx监听是否成功。那么如何验证呢?

首先在tomcat下载页面extra类别中下载 JMX Remote jar二进制包放在tomcat/libx路径下

[root@Tomcat ~]# cd /usr/local/tomcat/lib/

[root@Tomcat lib]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.88/bin/extras/catalina-jmx-remote.jar

 下载jmxcmd.jar文件测试时候能够获取数据

[root@Tomcat lib]# wget http://nchc.dl.sourceforge.net/project/jmxcmd/jmxcmd.jar

[root@localhost lib]# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.17.134:12345 java.lang:type=Memory NonHeapMemoryUsage   #ps:这里的cmdline-jmxcline软件包如果没有的话,
06/09/2018 18:10:08 +0800 org.archive.jmx.Client NonHeapMemoryUsage:                                                               可以在博客下方留言,私信给你~
committed: 27721728
init: 2555904
max: -1
used: 2695680

第二种方式检测也可以

[root@tomcat lib]# java -jar jmxcmd.jar - 192.168.17.134:12345 java.lang:type=Memory NonHeapMemoryUsage

06/10/2018 18:30:06 +0800 de.layereight.jmxcmd.Client NonHeapMemoryUsage: 

committed: 27721728
init: 2555904
max: -1
used: 2695680
 

【Tomcat所在的Zabbix-agent端配置】

[root@tomcat etc]# grep -vE "#|^$" zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
EnableRemoteCommands=1
Server=192.168.17.135
ListenPort=10050
ServerActive=192.168.17.135
Hostname=192.168.17.134
Timeout=20
AllowRoot=1
UnsafeUserParameters=1

【zabbix-server端配置】

在这里Zabbix_server开启java poller,zabbix_java开启JavaGwateway,端口为10050,Tomcat JMX开启12345提供性能数据

数据获取的过程如下:

Java Poller----->JavaGatway:10052--->Tomcat:12345

1)修改zabbix_server.conf配置文件,内容如下(ps:只做陌生参数详解):

[root@zabbix_server ~]# grep -vE "#|^$" /usr/local/zabbix/etc/zabbix_server.conf 
LogFile=/var/log/zabbix/zabbix.log
DBHost=localhost
DBName=zabbixdb
DBUser=xiaoyu
DBPassword=123456
DBPort=3306
StartPollers=50            #指定启动多少个进程
StartPingers=100
JavaGateway=192.168.17.135     #Java网关地址,即zabbixserver端IP地址
JavaGatewayPort=10052         #java网关监听端口
StartJavaPollers=5            #启动时所指定的java pollers数量
Timeout=20
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts/
FpingLocation=/usr/sbin/fping
LogSlowQueries=3000
AllowRoot=0

 2)编译zabbix的时候 ,我们添加了--enable-java这个模块,在这里就会生成jmx目录

[root@zabbix_server ~]# vim /usr/local/zabbix/sbin/zabbix_java/settings.sh 
[root@zabbix_server ~]# grep -vE "#|^$" /usr/local/zabbix/sbin/zabbix_java/settings.sh 
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/tmp/zabbix_java.pid"
START_POLLERS=5
TIMEOUT=3

[root@zabbix_server ~]# /usr/local/zabbix/sbin/zabbix_java/startup.sh

[root@zabbix_server fonts]# netstat -anput | grep 10052
tcp6 0 0 :::10052 :::* LISTEN 40649/java
tcp6 0 0 192.168.17.135:10052 192.168.17.135:51584 TIME_WAIT -

 【ZabbixWeb端配置】

zabbix端自带一些版本,直接链接即可

技术分享图片

Zabbix监控Tomcat案例


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
author-avatar
blovejin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有