今天在这里,我们来聊一聊JMX监控方式,

JMX(java管理扩展程序)是java平台上为应用程序,设备,系统等植入管理功能的框架,JMX可以跨越一系列不同的系统平台,更加灵活的服务管理应用;

在zabbix中运行的流程

在zabbix中,JMX监控数据的获取主要是由专门的代理程序来实现的,也就是zabbix-java-Gateway来负责数据的采集,zabbix-java-gateway和JMX的java程序之间通信;

配置JMX监控的步骤:

1)安装Zabbix-Java-Gateway;

2)配置zabbix_java_gateway.conf参数

3)配置zabbix_server.conf参数

4)java应用应该开启JMX协议

5)zabbix_web配配置JMX监控的java应用

[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 ::: :::* LISTEN /java
tcp ::ffff:127.0.0.1: :::* LISTEN /java
tcp ::: :::* LISTEN /java
[root@Tomcat ~]# ps -ef | grep tomcat
root : pts/ :: /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 : pts/ :: 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

 CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote #开启远程监控
-Dcom.sun.management.jmxremote.port=12345 #远程监控端口
-Dcom.sun.management.jmxremote.ssl=false #远程ssl验证端口
-Dcom.sun.management.jmxremote.authenticate=false #关闭权限认证
-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就知道)

 CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.17.134
-Dcom.sun.management.jmxremote.port=
-Dcom.sun.management.jmxremote.ssl=false
-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 ::: :::* LISTEN /java
tcp6 ::: :::* LISTEN /java
tcp6 192.168.2.144: :::* LISTEN /java
tcp6 ::: :::* LISTEN /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..jar - 192.168.17.134: java.lang:type=Memory NonHeapMemoryUsage   #ps:这里的cmdline-jmxcline软件包如果没有的话,
// :: + 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=
Server=192.168.17.135
ListenPort=
ServerActive=192.168.17.135
Hostname=192.168.17.134
Timeout=
AllowRoot=
UnsafeUserParameters=

【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=
DBPort=
StartPollers=50 #指定启动多少个进程
StartPingers=
JavaGateway=192.168.17.135 #Java网关地址,即zabbixserver端IP地址
JavaGatewayPort=10052 #java网关监听端口
StartJavaPollers=5 #启动时所指定的java pollers数量
Timeout=
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts/
FpingLocation=/usr/sbin/fping
LogSlowQueries=
AllowRoot=

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=
PID_FILE="/tmp/zabbix_java.pid"
START_POLLERS=
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案例的更多相关文章

  1. Zabbix监控Tomcat,Redis

    一 Tomcat监控 1.1.1 Tomcat 端配置 JMX 编辑catalina.sh文件,配置如下: CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.m ...

  2. zabbix 监控tomcat

    zabbix 监控tomcat server端rpm -ivh jdk-8u20-linux-x64.rpmvi /etc/profileJAVA_HOME=/usr/java/jdk1.8.0_20 ...

  3. zabbix监控tomcat

    服务端配置修改 编译zabbix的时候需要添加参数--enable-java --enable-java 修改zabbix_java配置文件 vim /usr/local/zabbix-2.4.6/s ...

  4. zabbix监控tomcat(使用jmx监控,但不使用系统自带模版)

    一,zabbx使用jmx监控tomcat的原理分析 1.Zabbix-Server找Zabbix-Java-Gateway获取Java数据 2.Zabbix-Java-Gateway找Java程序(j ...

  5. Zabbix 监控tomcat web

    个人博客:https://blog.sharedata.info/ 在zabbix监控web,web容器是tomcat 默认的端口是8080导致web监控失败!不能找到主机因此在修改tomcat 端口 ...

  6. 【zabbix监控】zabbix监控tomcat服务

    服务器配置(zabbix_server) 1. 安装jdk 版本需要1.7以上,我这边安装的是1.8的,可以参考我jdk安装的文章 # 上传到zabbix_server服务端.安装(jdk-8u171 ...

  7. zabbix 监控 tomcat jmx

    zabbix_server: zabbix_server.conf : # Add JavaGateway=127.0.0.1 JavaGatewayPort=10052 StartJavaPolle ...

  8. zabbix 监控 tomcat

    一, 脚本监控文件 #!/bin/bash # @Function # Find out the highest cpu consumed threads of java, and print the ...

  9. 通过Zabbix监控Tomcat单机多实例

    前面已经介绍过Tomcat单机多实例部署,接下来就在他的基础上进行下一步操作:Tomcat多实例监控! Tomcat多实例监控过程和之前的redis多实例原理一样,分为以下4步: 1.获取多实例 2. ...

随机推荐

  1. mysql生成数据字典

    git clone https://github.com/twindb/undrop-for-innodb.git make [root@redis01 undrop-for-innodb]# mak ...

  2. 【原创】大数据基础之Logstash(1)简介、安装、使用

    Logstash 6.6.2 官方:https://www.elastic.co/products/logstash 一 简介 Centralize, Transform & Stash Yo ...

  3. 解决定位工具报错Error while parsing UI hierarchy XML file: Invalid ui automator hierarchy file.

    在微信自动化测试中,偶尔会出现某个页面一直无法读取到页面元素的情况,原因是页面未加载完成 解决方式:1.重启APP 2.建议上下滑动当前页面,如朋友圈,会出现滑动到某个地方,出现可以读取到的情况 参考 ...

  4. Oracle定时备份数据库

    1.导出命令:exp cpzxoa/cpzxoa@FENG file=D:\OracleBak\%date:~11,4%\jjmis_test.dmp log=D:\OracleBak\%date:~ ...

  5. Vue项目构建开发笔记(vue-lic3.0构建的)

    1.router.js里面 { path: '/about', name: 'about', // route level code-splitting // this generates a sep ...

  6. flex 兼容性写法

    flex http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 阮一峰老师详解 box 用于父元素的样式: display: box; 该属 ...

  7. js——作用域和闭包

    1. js是编译语言,但是它不是提前编译,编译结果不能在分布式系统中移植.大部分情况下,js的编译发生在代码执行前的几微秒(甚至更短) 2. 一般的编译步骤   分词/词法分析:把字符串分解成词法单元 ...

  8. 【Linux】添加DNS

    1.添加DNS输入命令: vi /etc/resolv.conf 添加一行:nameserver 10.41.132.9 2.查看DNS nslookup 127.0.0.1 | grep Serve ...

  9. Java的两个实验程序

    日期:2018.10.07 星期五 博客期:015 Part1:----------------第一个是二柱子出30道小学数学题: 一.程序设计思想 本程序设计由三部分构成,第一部分因为循环30次的需 ...

  10. json与字典的区别