zoukankan      html  css  js  c++  java
  • 009-通过jmx监控tomcat

    前言
    想理解怎么监控tomcat,必需识下图(图片源出网络)


    zabbix-Web前端界面,它通过数据库里数据展示。和其它组件不直接关联
    zabbix-server运行在10051端口,Zabbix-server要知道java应用程序的某项性能的使用时候 ,会启动自身的一个Zabbix-JavaPollers进程去链接zabbix-JavaGateway请求数据,而zabbix-Javagateway收到请求后并使用;
    Zabbixserver有一个特殊的进程用来连接Javagateway叫StartJavaPollers;Javagateway通过配置文件中START_POLLERS参数设置启动多个线程,在zabbix服务器这边如果一个连接所用时间超过Timeout,将会被中断,但是Javagateway将继续从JMXcounter取数据。所以StartJavaPollers设置的值要小于等于START_POLLERS设置的值。
    zabbix-java-gateway工作在10052端口,Zabbix-Javagateway就相当于一个代理,它负责收集客户端tomcat数据。图中的12345端口是在配置tomcat时指定的,可是自定义。
    在一个监控系统只有一个zabbix-java-gateway,可以部署在zabbix-sever端也可以部署在其他机器上,需要和zabbix-server网络可达。
    Zabbix-Javagateway就相当于一个代理,它负责收集客户端tomcat数据,zabbix-server只要向zabbix-java-gateway取数据添加到数据库即可
    ---------------------
    版权声明:本文为CSDN博主「陈袁」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/achenyuan/article/details/86710829

     

    服务端安装

    yum install -y java java-devel zabbix-java-gateway

    添加java环境

    注意JAVA_HOME的路径,安装的环境可能不同,设置不同

    vim /etc/profile
    
    JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64
    PATH=$JAVA_HOME/bin:$PATH
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME
    export PATH
    export CLASSPATH

    修改java-gateway配置文件

    [root@server ~]# grep ^[a-Z] /etc/zabbix/zabbix_java_gateway.conf
    LISTEN_IP="0.0.0.0"
    LISTEN_PORT=10052
    PID_FILE="/var/run/zabbix/zabbix_java.pid"
    START_POLLERS=5
    TIMEOUT=3

    zabbix-java-gateway默认工作在10052端口

    zabbix-server默认工作在10051端口,zabbix-agent默认工作在10050端口

     

    配置zabbix_java_gateway.conf和zabbix_server.conf
    2个文件都在/etc/zabbix下
    重点:Java-gateway配置文件的START_POLLERS参数 >= zabbix_server配置文件的StartJavaPollers参数,建议一样,都设为5。

    配置zabbix_java_gateway.cnf
    # This is a configuration file for Zabbix Java Gateway.
    # It is sourced by startup.sh and shutdown.sh scripts.

    ### Option: zabbix.listenIP
    # IP address to listen on.
    #
    # Mandatory: no
    # Default:
    LISTEN_IP="0.0.0.0"(本机ip地址,如果和server安装在相同的位置可以不修改)

    ### Option: zabbix.listenPort
    # Port to listen on.
    #
    # Mandatory: no
    # Range: 1024-32767
    # Default:
    LISTEN_PORT=10052(端口可以修改为其他,在server段需要相同的配置)

    ### Option: zabbix.pidFile
    # Name of PID file.
    # If omitted, Zabbix Java Gateway is started as a console application.
    #
    # Mandatory: no
    # Default:
    # PID_FILE=

    PID_FILE="/var/run/zabbix/zabbix_java.pid"

    ### Option: zabbix.startPollers
    # Number of worker threads to start.
    #
    # Mandatory: no
    # Range: 1-1000
    # Default:
    START_POLLERS=5(设置启动多个线程,这里和server段相同)

    ### Option: zabbix.timeout
    # How long to wait for network operations.
    #
    # Mandatory: no
    # Range: 1-30
    # Default:
    # TIMEOUT=3
    TIMEOUT=3(超时时间)

    配置zabbix_server.conf:
    让zabbix-server服务能连接到zabbix-java-gateway服务

    ### Option: JavaGateway(找到这里配置以下三个参数)
    # IP address (or hostname) of Zabbix Java gateway.
    # Only required if Java pollers are started.
    # Mandatory: no
    # Default:
    JavaGateway=192.168.199.63 #如果是本机安装直接使用127.0.0.1
    ### Option: JavaGatewayPort
    # Port that Zabbix Java gateway listens on.
    # Mandatory: no
    # Range: 1024-32767
    # Default:
    JavaGatewayPort=10052 #端口号和javagateway要对应
    ### Option: StartJavaPollers
    # Number of pre-forked instances of Java pollers.#
    # Mandatory: no
    # Range: 0-1000
    # Default:
    StartJavaPollers=5 #线程数和客户端配置对应 不能少于客户端数目

    重启zabbix-server和zabbix-java-gateway服务

    systemctl restart zabbix-server
    systemctl restart zabbix-java-gateway

    客户端配置

    客户端java环境安装和tomcat安装自行准备,在tomcat下的/bin/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=本机ip"

    注意添加的位置在#!/bin/sh下面。
    注意-Djava.rmi.server.hostname=192.168.2.32要加了,hostname填本机的ip地址,除非是127.0.0.1
    查看12345端口监听情况:netstat -antlp|grep 12345

    这里有一点提醒,打/etc/zabbix/zabbix_java_gateway.cnf,在文件有末尾有如下代码:

    # uncomment to enable remote monitoring of the standard JMX objects on the Zabbix Java Gateway itself
    #JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345
    # -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
    取消注释后,zabbix_java_gateway本身就开启了JMX功能,就可能被远程监控。

    添加catalina-jmx-remote.jar(可不操作)
    在tomcat/lib下执行:wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.37/bin/extras/catalina-jmx-remote.jar

    要找到对应tomcat版本的catalina-jmx-remote.jar。访问tomcat各个版本网站,从上面一直找下去。catalina-jmx-remote.jar文件在tomcat版本的/bin/extras/目录下,只要替换wget后面url即可。

    检查防火墙状态
    如果防火墙开启会报java.net.NoRouteToHostException: 没有到主机的路由
    查看防火墙状态:firewall-cmd --state
    关闭防火墙:systemctl stop firewalld.service

    测试
    下载cmdline-jmxclient-0.10.3.jar,百度网盘,提取码f37k。
    测试

    java -jar /usr/local/tomcat/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=Memory HeapMemoryUsage
    1
    结果

    [root@localhost bin]# java -jar /usr/local/tomcat/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:12345 java.lang:type=Memory HeapMemoryUsage
    01/31/2019 09:38:50 +0800 org.archive.jmx.Client HeapMemoryUsage:
    committed: 247332864
    init: 16777216
    max: 247332864
    used: 160725592

     

    启动tomcat

    ./bin/startup.sh

    zabbix添加tomcat监控

    配置zabbix-web
    打开界面,配置->主机->主机zabbix server(我的zabbix-java-gateway和zabbix-server安装在同一台虚拟机上)
    找到JMX接口,配置如下,然后点击添加按钮

    反过来看开头的那幅图,Zabbix-server通过JavaPollers进程调用zabbix-java-gateway获得tomcat数据,而zabbix-java-gateway就是通过这里配置的tomcat地址和端口,连接到tomcat从而获取到数据。
    找到主机,如果JMX显示颜色,则配置成功。

    注意,必需添加添加的tomcat的模板,如zabbix自带的Template App Apache Tomcat JMX或自定义的模板,后面JMX才能变绿,否则永远不亮
    或者查看/var/log/zabbix/zabbix-server.log日志,出现enabling JMX agent checks on host “192.168.1.239”: host became available则表示能连接上。

    跨域连接
    两台不同的IP的设置和上面是一样的,只有在tomcat/bin/catalina.sh文件里hostname要写具体IP。
    比如

    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.port=12345
    -Djava.rmi.server.hostname=192.168.1.239"

    配置windows系统客户端
    配置上tomcat
    除了编辑catalina.bat外其它都一样。
    windows系统上,如果是以服务方式启动tomcat,则12345是不会被监听的,必需以命令行启动tomcat。

    添加tomact中JMX的参数
    在tomcat/bin下找到catalina.bat文件,在set "CURRENT_DIR=%cd%"下加上:

    set JAVA_OPTS= -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.2.32
    1
    注意Djava.rmi.server.hostname=192.168.2.32要加了,除非是127.0.0.1

    添加catalina-jmx-remote.jar
    在tomcat/lib下执行:wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.37/bin/extras/catalina-jmx-remote.jar加粗样式

    要找到对应tomcat版本的catalina-jmx-remote.jar。访问tomcat各个版本网站,从上面一直找下去。catalina-jmx-remote.jar文件在tomcat版本的/bin/extras/目录下,只要替换wget后面url即可。

    重启tomcat
    执行bin目录下shell脚本

    ./shutdown.bat
    ./startup.bat

     如果发现监控项里有的item不支持,可使用jconsole工具来监控java运行情况:
    经验证OK
     
    jconsole是jdk自带的工具。所以要先安装jdk
     

    1.jconsole工具的路径:

    通过which jconsole来查看
    /usr/local/jdk1.7.0_79/bin/jconsole
     
    2.使用方式:
    在linux监控端的图形界面执行:/usr/local/jdk1.7.0_79/bin/jconsole 将出现图形化java监控和管理控制台。
     
    3.执行后出现JConsole新建连接,有两个选择:
    1.本地进程(可以监控本机的java)
    ——》org.apache.catalina.startup.Bootstartup start
     
    2.远程进程(用于监控其他主机的java)
    ——》填写需要被监控的主机名:监控端口,输入监控专用的用户名/密码(可选)
     
    步骤1:需在被监控的主机上修改catalina.sh配置文件:
    vi /opt/tomcat/conf/catalina.sh
    如不需密码验证,则在第二行开始添加下面3行:
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
    保存退出 //“12345”为监控端口号
     
    如需密码验证,则改为下面4行:
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.pwd.file=/usr/local/jdk1.7.0_79/jre/lib/management/jmxremote.password"
    保存退出
     
    步骤2:将/usr/local/jdk1.7.0_79/jre/lib/management/jmxremote.password.template复制一份:
     
    cp /usr/local/jdk1.7.0_79/jre/lib/management/jmxremote.password.template
    /usr/local/jdk1.7.0_79/jre/lib/management/jmxremote.password
     
    步骤3:添加用于远程监控的用户名和密码:
    vi jmxremote.password //用于添加用户名和密码
    monitorRole 12345678 //用户名:monitorRole,这个名字系统是预先设置好的
    admin 123456 //自定义了用户名:admin
    root 123456 //自定义了用户名:root
    强制保存退出
     
    vi jmxremote.access //自定义监控的用户名具有哪些权限
    添加:
    admin readonly //定义只读帐号,名字任意
    root readwrite  //定义读写帐号,名字任意
    create javax.management.monitor.*,javax.management.timer.*
    保存退出
     
     
    chmod 600 jmxremote.password
    chown uucp:uucp jmxremote.password //先用ls -l /usr/local/jdk1.7.0_79看看是属于哪个用户和组,再设置成相同的。
     
    注:如果JConsole不能访问本机的程序的话,添加如下内容:
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
     
    好了,可以连接了:
    输入要被监控的主机名cen01,端口:12345,
     
     

    查看某个监控项的具体信息,监控对象的名字ObjectName与zabbix中的对应,可以利用此在zabbix中自定义监控项,创建模板

    4.2 命令行测试

    在有java环境的机器上下载cmdline-jmxclient-0.10.3.jar包进行测试

    [root@zabbix tools]# java -jar cmdline-jmxclient-0.10.3.jar - 192.168.1.7:12345 java.lang:type=Memory NonHeapMemoryUsage

    06/26/2018 14:44:55 +0800 org.archive.jmx.Client NonHeapMemoryUsage:

    committed: 117006336

    init: 2555904

    max: -1

    used: 113687744

    成功取到值!

  • 相关阅读:
    JSON 之 SuperObject(10): Merge、Clone、ForcePath
    JSON 之 SuperObject(5): Format 与转义字符
    语法基础: 使用不同的数据类型标记数组
    JSON 之 SuperObject(9): TSuperType
    JSON 之 SuperObject(12): TSuperEnumerator、TSuperAvlIterator、ObjectFindFirst...
    JSON 之 SuperObject(7): 可以省略的双引号
    JSON 之 SuperObject(11): TSuperTableString、TSuperAvlEntry
    JSON 之 SuperObject(13): 关于 SO 与 SA 函数
    JSON 之 SuperObject(8): 关于乱码的几种情况 向 Henri Gourvest 大师报告
    安装万能五笔时会自动安装copyso
  • 原文地址:https://www.cnblogs.com/xuefy/p/11363139.html
Copyright © 2011-2022 走看看