`
jaychang
  • 浏览: 731185 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

用Zabbix通过JMX方式监控JVM/Tomcat/Weblogic/Websphere/Jboss等

 
阅读更多

 转载自:http://www.huilog.com/?p=688

JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

上面的介绍有点绕,我是这么简单粗暴地理解的:JMX之于JVM或JAVA,相当于SNMP之于OS。只是JMX比SNMP更强大,除了监控外,还可以通过JMX对JAVA程序进行管理,如更改一些配置等。

Zabbix已经集成JMX,可以用Zabbix通过JMX监控JVM,TOMCAT,Weblogic,Jboss等。要使用Zabbix监控 Weblogic,我们先要了解Zabbix的JMX监控架构,Weblogic的JMX信息,最后才能去实现怎么去配置监控和报警。

1. Zabbix 的JMX监控架构

zabbix jmx 监控架构图如上面的Zabbix JMX监控架构图所示,Zabbix是使用了一个叫做Java Gateway的应用去监控JMX的。Java Gateway集成在zabbix官方开发发布的。

2. Zabbix server及Java gateway的配置

rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm

yum -y install zabbix-java-gateway zabbix-web-mysql zabbix-server-mysql

也可以通过源码安装,请参考官方文档。

zabbix-server的配置我就不介绍了,我们着重看下与java-gateway相关的配置:

zabbix-java-gateway的配置文件是/etc/zabbix/zabbix_java_gateway.conf,配置文件很简单,如下:
# 监听地址
LISTEN_IP=”0.0.0.0″
# 监听端口
LISTEN_PORT=10052
# PID_FILE文件
PID_FILE=”/var/run/zabbix/zabbix_java.pid”
# 开启的工作线程数
START_POLLERS=5

启动zabbix-java-gateway:

service zabbix-java-gateway start

再修改zabbix-server的配置,编辑/etc/zabbix/zabbix_server.conf ,修改下面几个参数:

# JavaGateway的服务器IP地址
JavaGateway=192.168.89.204
# JavaGateway的服务端口
JavaGatewayPort=10052
# 从javaGateway采集数据的进程数
StartJavaPollers=5

配置文件修改后,重启zabbix-server:

service zabbix-server restart

好,现在zabbix-java-gateway就配置好了。

3. 开启JMX

使用JMX前需要先开启JMX,默认是关闭的,在启动JAVA程序时,加入下面的参数,就可以开启JMX:

enableJMX想更多的了解这些参数,可以参考下面这个链接:

http://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html

下面介绍几种常用的JAVA容器的JMX开启方式:

1)Apache Tomcat

如果是windows版本,编辑TOMCAT_HOME/bin/catalina.bat,在开头加入下面几行:
set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST
set CATALINA_OPTS=%CATALINA_OPTS% -Djavax.management.builder.initial=
set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote=true
set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote.port=JMX_PORT

set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false

如果是linux版本,编辑TOMCAT_HOME/bin/catalina.sh,在开头加入下面几行:

CATALINA_OPTS="${CATALINA_OPTS} -Djava.rmi.server.hostname=JMX_HOST"
CATALINA_OPTS="${CATALINA_OPTS} -Djavax.management.builder.initial="
CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote=true"
CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.port=JMX_PORT"
CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.ssl=false"
CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote.authenticate=false"

    

注意JMX_HOST为tomcat的主机名或IP地址,JMX_PORT为JMX端口,通常使用12345,然后重启tomcat,JMX就开启了。

注意:这里也可以把配置的内容放到setenv.sh单独的一个文件中(推荐这么做);CATALINA_OPTS="内容" (不加冒号的话,会报以下错误

./catalina.sh: line 96: -Djava.rmi.server.hostname=192.168.153.191: command not found
./catalina.sh: line 97: -Djavax.management.builder.initial=: command not found
./catalina.sh: line 98: -Dcom.sun.management.jmxremote=true: command not found
./catalina.sh: line 99: -Dcom.sun.management.jmxremote.port=12345: command not found
./catalina.sh: line 100: -Dcom.sun.management.jmxremote.ssl=false: command not found
./catalina.sh: line 101: -Dcom.sun.management.jmxremote.authenticate=false: command not found

 如果使用到用户名,密码,那么使用下面配置,jmxremote.access与jmxremote.password在$JAVA_HOME/jre/management目录下

  -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password

  -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access

 

2)IBM WebSphere AS

进入WebSphere Administrative Console open Servers → Server Types → WebSphere application servers → WAS_SERVER_NAME → Java and Process Management → Process definition → Java Virtual Machine.

在“Generic JVM arguments”增加下面环境变量:
-Djavax.management.builder.initial=

然后再进入 WebSphere Administrative Console, open Servers → Server Types → WebSphere application servers → WAS_SERVER_NAME → Java and Process Management → Process definition → Java Virtual Machine → Custom properties.

增加下面几个环境变量:
Name: java.rmi.server.hostname
Value: JMX_HOST
Name: javax.management.builder.initial
Value: none
Name: com.sun.management.jmxremote
Value: true
Name: com.sun.management.jmxremote.port
Value: JMX_PORT
Name: com.sun.management.jmxremote.ssl
Value: false
Name: com.sun.management.jmxremote.authenticate
Value: false

应用更改,重启应用就开启了。

3)Oracle GlassFish AS

进入GlassFish Console, open GAS_CONFIG → JVM Settings → JVM Options.
加入下面的环境变量到“JVM options”:
Value: -Djava.rmi.server.hostname=JMX_HOST
Value: -Dcom.sun.management.jmxremote=true
Value: -Dcom.sun.management.jmxremote.port=JMX_PORT
Value: -Dcom.sun.management.jmxremote.ssl=false
Value: -Dcom.sun.management.jmxremote.authenticate=false

重启就开启了。

4)Oracle WebLogic 11g (10.23.x) and 12c (12.1.x)

对于windows的版本,编辑WL_DOMAIN_HOME/bin/setDomainEnv.cmd,在文件结尾加入下面几行:
set JAVA_OPTIONS=%JAVA_OPTIONS% -Djava.rmi.server.hostname=JMX_HOST
set JAVA_OPTIONS=%JAVA_OPTIONS% -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote=true
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote.port=JMX_PORT
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote.authenticate=false

对于Linux的版本,编辑WL_DOMAIN_HOME/bin/setDomainEnv.cmd,在文件结尾加入下面几行:
JAVA_OPTIONS=”${JAVA_OPTIONS} -Djava.rmi.server.hostname=JMX_HOST” JAVA_OPTIONS=”${JAVA_OPTIONS} -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder” JAVA_OPTIONS=”${JAVA_OPTIONS} -Dcom.sun.management.jmxremote=true” JAVA_OPTIONS=”${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.port=JMX_PORT” JAVA_OPTIONS=”${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.ssl=false” JAVA_OPTIONS=”${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.authenticate=false” export JAVA_OPTIONS

然后重启weblogic,就开启了。

需要注意的是,如果你的应用不是布署在默认的应用服务器上,而是新增了一个应用服务器布署的话,应该使用下面这个方法:

进入weblogic控制台->环境->服务器->”你新增的服务器”->配置->服务器启动。在“参数”的输入框内输入:
-Dcom.sun.management.jmxremote.port=JMX_PORT -Djava.rmi.server.hostname=JMX_HOST -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false -Djavax.management.builder.initial=weblogic.management.jmx.mbeanserver.WLSMBeanServerBuilder
weblogic_jmx然后保存,激活更改,再重启这个应用服务器就开启JMX了。

4. 测试和查看JMX的配置和状态信息

JMX开启后,我们就可以通过相关的工具去查看JMX内的状态信息了,通常可以使用JDK的jconsole程序查看,对于weblogic,它自带了一些工具也可以查看,可以参考官方文档(http://docs.huihoo.com/oracle/middleware/fusion/11g/web.1111/e13715/nav_edit.htm#WLSTG175),另外还有一个叫cmdline-jmxclient-0.10.3.jar的工具也可以非常方便的查看这些信息。

1) 使用JDK的jconsole程序查看

jconsole在JDK_HOME/bin下面,打开它,输入服务器的IP和端口就可以连接了。如图:jconsole2 jconsole3 jconsole4 jconsole5

com.bea下面都是Weblogic相关的信息,其它为JVM级别的信息。jconsole6应用服务器下的ServerRuntime这个Mbeans就是WEBLOGIC这个应用服务器的实时状态信息。

2)使用cmdline-jmxclient-0.10.3.jar工具查看

cmdline-jmxclient-0.10.3.jar是一个非常方便的查看程序,它的下载地址为:http://crawler.archive.org/cmdline-jmxclient/
使用方法:
Usage: java -jar cmdline-jmxclient.jar USER:PASS HOST:PORT [BEAN] [COMMAND]
如查看服务器所有Mbeans的信息:
java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:12345
这个命令会输出所有的Mbeans,它能方便我们查找需要的Mbeans,如我们相查找和JDBC相关的Mbens,可以使用命令:
java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:12345 | grep JDBC

如查看JDBCConnectionPoolRuntime的信息:
java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:12345 com.bea:Name=fftdb,ServerRuntime=shfft,Type=JDBCConnectionPoolRuntime
java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:12345 com.bea:Name=fftdb,ServerRuntime=shfft,Type=JDBCConnectionPoolRuntime ActiveConnectionsCurrentCount

其中com.bea:Name=fftdb,ServerRuntime=shfft,Type=JDBCConnectionPoolRuntime是Mbeans名,ActiveConnectionsCurrentCount为这个Mbeans下的一个属性。

5. Weblogic的常用性能指标

JMSRuntime
JMSServersCurrentCount 返回当前JMS服务的连接数
ConnectionsCurrentCount 返回本JMS服务器上当前的连接数
JMSServersHighCount 返回自服务器启动后JMS服务的最大连接数
ConnectionsHighCount 返回本JMS服务器自上次重置后的最大连接数

JVMRuntime
HeapSizeCurrent 返回当前JVM堆中内存数,单位时字节
HeapFreeCurrent 返回当前JVM堆中空闲内存数,单位时字节

ExecuteQueueRuntime
ExecuteThreadCurrentIdleCount 返回队列中当前空闲线程数
PendingRequestOldestTime 返回队列中最长的等待时间
PendingRequestCurrentCount 返回队列中等待的请求数
Queue Length 队列长度

JDBCConnectionPoolRuntime
WaitingForConnectionHighCount    返回本JDBCConnectionPoolRuntimeMBean 上最大等待连接数
WaitingForConnectionCurrentCount 返回当前等待连接的总数
MaxCapacity 返回JDBC池的最大能力
WaitSecondsHighCount 返回等待连接中的最长时间等待者的秒数
ActiveConnectionsCurrentCount 返回当前活动连接总数
ActiveConnectionsHighCount 返回本JDBCConnectionPoolRuntimeMBean 上最大活动连接数

要想了解更多Weblogic的各种运行时Mbeans信息,请参考官方文档:http://docs.huihoo.com/oracle/middleware/fusion/11g/apirefs.1111/e13951/core/index.html

6. 添加Weblogic监控项到Zabbix

新增监控项,在key内填入:
jmx[“com.bea:Name={$JDBC_NAME},ServerRuntime={$JDBC_SERVER},Type=JDBCConnectionPoolRuntime”,ActiveConnectionsCurrentCount]
其中com.bea:Name={$JDBC_NAME},ServerRuntime= {$JDBC_SERVER},Type=JDBCConnectionPoolRuntime为 Mbeans,ActiveConnectionsCurrentCount为属性项。
zabbix1

注意Type内应该选择JMX Agent。zabbix2

最后看一张做出来的Weblogic JDBC连接池监控图:

weblogin_monitor

 

  • 大小: 52.1 KB
分享到:
评论

相关推荐

    Zabbix通过JMX方式监控java中间件

    ### Zabbix通过JMX方式监控Java中间件的关键知识点 #### 一、Zabbix与JMX监控简介 **Zabbix**是一款开源的企业级监控工具,它能够监控网络中的各种硬件资源和软件服务的状态,并且提供了丰富的功能,如自动发现、...

    Zabbix通过JMX监控java中间件.docx

    Zabbix 通过 JMX 监控 Java 中间件的工作原理是:Zabbix 服务器想知道一台主机上的特定的 JMX 值时,它向 Zabbix-Java-gateway 询问,而 Zabbix-Java-gateway 使用“JMX management API”去查询特定的应用程序,前提...

    zabbix监控tomcat模版及jar包

    本篇文章将详细介绍如何使用Zabbix监控Tomcat,特别是通过JMX(Java Management Extensions)来监控Tomcat,并涉及到相关的jar包和Zabbix模板。 首先,让我们了解一下`cmdline-jmx`和`catalina-jmx`这两个标签所指...

    zabbix_tomcat_weblogic监控模板.zip

    总结来说,Zabbix通过自定义的Tomcat和WebLogic监控模板,为IT管理员提供了强大的工具,帮助他们更有效地管理和维护Java应用环境。这种定制化的监控方案,不仅能及时发现潜在问题,还能优化资源利用率,提升整体系统...

    zabbix 监控 tomcat

    在监控 Tomcat 时,Zabbix 可以提供实时的性能监控、日志监控、状态监控等功能,帮助管理员快速发现问题并采取相应的措施。 安装和配置 Zabbix 在开始监控 Tomcat 之前,需要安装和配置 Zabbix。首先,需要安装 ...

    zabbix监控tomcat的监控模板

    zabbix监控tomcat的监控模板

    zabbix监控JAVA 进程 JVM数据统计分析告警监控

    zabbix自动发现JAVA进程,并进行自动添加监控JAVA 进程的JVM数据,统计分析告警监控。...支持多种中间件,tomcat、weblogic、微服务方式部署JAVA应用监控。 自带发现脚本和监控脚本,以及zabbix导入模板。

    Zabbix动态监控磁盘I/O

    例如,通过`disk.read[iodevices]`和`disk.write[iodevices]`等键,我们可以监控每个设备的读写操作次数,或者通过`disk_octets[read,iodevices]`和`disk_octets[write,iodevices]`来监控读写的数据量。 总的来说,...

    Zabbix使用JMX方式监控国产中间件东方通设备

    基础信息有:Classes、Compilation、Garbage Collector、General、Gzip Compression、Memory、MemoryPool、OperatingSystem、Runtime、Sessions、Status、hreads等指标

    zabbix监控tomcat(包含jvm监控)

    我们的监控系统是zabbix,最近刚做完jvm还有tomcat的监控,需要吐槽以下内容:zabbix官方提供的jvm和tomcat监控模版,存在item书写格式的坑,导致很多内容无法获取到监控。网友写的zabbix监控java文章,99%就只有...

    zabbix微信报警脚本文件wechat.py

    centos系统,zabbix监控 路径/usr/lib/zabbix/alertscripts/wechat.py 提示:请执行 chown zabbix.zabbix /usr/lib/zabbix/alertscripts/wechat.py chmod +x /usr/lib/zabbix/alertscripts/wechat.py 一定要赋予...

    zabbix-allinone_nginx_jvm_tomcat_MYSQL_zabbix_

    主要用来扩展zabbix的功能,增加对Tomcat/JVM/MYSQL/Redis/Memcache/Mongodb/Nginx等的监控目录下有readme.md说明文件,使用该目录下的配置文件、模板文件、脚本文件即可,具体按照说明文件操作即可

    JMX以RMI方式连接的场景示例

    我们的示例展示了如何使用JMX框架和RMI连接方式来实现远程监控和管理应用程序。JMX框架提供了一种灵活、可扩展和高效的方式来管理和监控应用程序,而RMI连接方式允许远程客户端访问MBean提供的管理功能。

    tomcat zabbix 监控模板

    UserParameter=jmx7[*],/usr/local/zabbix/script/tomcat_status.sh $1 $2 $3 $4 $5 $6 $7 其中jmx5为过滤$1=$2 && $3=$4后, $5项的值 jmx3 为过滤$1=$2后,$3项的值 jmx7 为过滤$1=$2 && $3=$4 && $5=$6...

    zabbix监控tomcat

    例如,监控Tomcat的JVM内存使用情况、线程池状态等关键指标。 ### 总结 通过上述步骤,我们不仅能够实现Tomcat的自动监控,还能够根据实际需求调整监控策略,提高系统的可用性和稳定性。这对于维护大规模部署的Java...

    zabbix3.4.4监控tomcat

    zabbix3.4.4监控tomcat实例,需将此类放在tomcat的lib下

    Zabbix监控tomcat所需模板

    3. **Tomcat.xml**:这个文件可能是通用的Tomcat监控模板,可能包含了非JMX的监控选项,如Tomcat的进程状态、磁盘使用情况、日志文件大小等。 在集成这些模板到Zabbix中,你需要: 1. 将模板文件导入Zabbix服务器,...

Global site tag (gtag.js) - Google Analytics