今天在这里,我们来聊一聊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. centos7.4_x86_64安装grafana5.2.1并安装常用zabbix插件

    获取并安装grafana5.2.1# wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.1-1. ...

  2. Zookeeper-Watcher机制与异步调用原理

    转载于:http://shift-alt-ctrl.iteye.com/blog/1847320 Watcher机制:目的是为ZK客户端操作提供一种类似于异步获得数据的操作. 1)在创建Zookeep ...

  3. 抢红包时用到的redis函数

    2018-2-8 10:25:11 星期四 抢红包时经常会用redis(等其他nosql)的原子性函数去限流, 防止抢超, 下边列出一些主要的原子性函数 限制每个人只能抢一次 getSet(): 设置 ...

  4. 7-Links

    Use the <a> element to define a link Use the href attribute to define the link address Use the ...

  5. 【原创】大数据基础之Hive(5)hive on spark

    hive 2.3.4 on spark 2.4.0 Hive on Spark provides Hive with the ability to utilize Apache Spark as it ...

  6. npm cnpm +nodejs

    nodejs win+r  打开cmd.命令:1.node -v   (查看版本信息)2.npm -v  (查看版本信息)3.npm install -g cnpm –registry=https:/ ...

  7. C# Winform控件对透明图片重叠时导致图片不透明的解决方法(转)

    在Winform中如果将一个透明图片放在窗体上能正常显示透明,但是如果将该图片放在另一个控件上会导致不能显示透明效果. 解决这种情况,可以采取在控件上使用GDI+绘画出透明图片. 这里我们就以一个pi ...

  8. Java常见runtime exception

    ArithmeticException,:算数异常ArrayStoreException,数组存储异常BufferOverflowException,编码出错异常 解决方法: 使用Eclipse开发一 ...

  9. Swift 给UITableView 写extension 时 报错 does not conform to protocol 'UITableViewDataSource'

    那是因为你没有实现 数据源和代理方法 实现下就好了 func tableView(_ tableView: UITableView, numberOfRowsInSection section: In ...

  10. python使用 HTMLTestRunner.py生成测试报告

    HTMLTestRunner.py python 2版本 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 使用时,先建立一个”PyDe ...