zoukankan      html  css  js  c++  java
  • Zabbix监控Tomcat案例

    今天在这里,我们来聊一聊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        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端自带一些版本,直接链接即可

  • 相关阅读:
    Linux下gdb attach的使用(调试已在运行的进程)
    Linux ps 命令
    SemaphoreFullException when checking user role via ASP.NET membership
    c程序内存分布
    正则表达式
    事务实战感悟
    oracle免客户端安装 plsql连接
    关于tomcat的热部署
    json工具包比较 fastjson jackson gson
    图片 滚动 放大缩小 旋转
  • 原文地址:https://www.cnblogs.com/bixiaoyu/p/9160537.html
Copyright © 2011-2022 走看看