Zabbix-(六) JMX监控
Zabbix-(六) JMX监控
一.前言
Zabbix提供了JMX监控,它通过JMX API获取JVM信息,从而提供监控数据。本文讲述使用JMX监控Tomcat的JVM信息。
准备
- Zabbix Server 4.4 (ip: 192.168.152.140)
- 运行Java应用的主机 以下简称Server-A (已被Zabbix监控) (ip:192.168.152.142)
二.安装Zabbix-Java-gateway
Zabbix Server通过Zabbix Java gateway收集JMX监控数据,因此首先需要安装Zabbix-Java-gateway,同时修改Zabbix Server的配置。
安装Zabbix-Java-gateway
可以在其他主机安装Zabbix-Java-gateway,只需要修改Zabbix-server配置文件,指定Zabbix-Java-gateway的地址和端口,这里就在部署Zabbix Server的主机上部署Zabbix-Java-gateway。
# yum install zabbix-java-gateway
配置Zabbix-Java-gateway
配置文件是
/etc/zabbix/zabbix_java_gateway.conf文件,文本采取默认配置,配置项详细信息可以参考下图或者参考官方Zabbix-java-gateway配置项。
启动Zabbix-Java-gateway
# systemctl start zabbix-java-gateway
修改Zabbix server配置
需要在zabbix server配置文件中增加zabbix-java-gateway相关配置
# vim /etc/zabbix/zabbix_server.conf
修改配置信息
# zabbix-java-gateway地址
JavaGateway=192.168.152.140 # zabbix-java-gateway端口
JavaGatewayPort=10052 StartJavaPollers=5
重启Zabbix server
# systemctl restart zabbix-server
三.修改Java应用启动参数
本文是采用docker部署tomcat,因此本文中是修改tomcat的catalina.sh脚本,主要是添加以下几个jvm启动参数
-Dcom.sun.management.jmxremote
# java应用ip地址(docker部署 使用宿主机ip)
-Djava.rmi.server.hostname=192.168.152.142
# jmx端口
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.rmi.port=12345
# 不开启认证
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
在tomcat catalina.sh脚本则可以在文件前面添加
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.152.142"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
重新启动tomcat容器,暴露JMX 12345端口,并挂载数据卷(主要是配置tomcat的catalina.sh),这里可以先启动一个tomcat容器,将容器中的catalina.sh docker cp到宿主机上再做修改
# docker rm -f tomcat
# docker run --name tomcat -p 8080:8080 -p 12345:12345 -v /data/zabbix/catalina.sh:/usr/local/tomcat/bin/catalina.sh -dit tomcat:jdk8-adoptopenjdk-hotspot
启动后可以通过jconsole工具测试一下能不能监控tomcat容器


四.在Zabbix界面配置JMX
服务启动后,需要在zabbix界面为Server-A主机上增加JMX监控。
点击【配置】-【主机】-选择【Server-A】

增加JMX配置
| 配置项 | 值 |
|---|---|
| IP地址 | 192.168.152.142 |
| 端口 | 12345 |

五.自定义JMX监控模板
实际上Zabbix 4.4自带了两个JMX模板Template App Apache Tomcat JMX和Template App Generic Java JMX模板一个可以监控Tomcat应用、一个可以监控普通Java应用。读者可以直接为被监控主机增加链接上述两个模板,也可以快速进行监控。
本文采用自定义的方式创建JMX监控模板
注:Zabbix提供的 JMX模板不一定适配所有 JDK 版本,例如 Template App Generic Java JMX 模板中提供了Perm Gen 永久代的监控项,而 JDK 8中已经将 Perm Gen永久代替换为了 Metaspace元空间,而模板中没有元空间的监控项
创建自定义JMX模板
创建模板过程就不贴出来了,不清楚如何创建自定义模板的读者可以参考之前的文章如何创建自定义模板。这里创建了一个群组Java Server Group和自定义模板Custom JMX Template
创建监控项
JMX监控项的键值格式为
jmx[object_name,attribute_name],其中object_name是MBean的ObjectName,attribute_name为需要读取的属性值。如何确定需要监控的数据可以参考文末的JMX问题。官方对键值的说明:

读者可以查看JMX监控项的官方文档
堆内内存监控项
配置项 值 * 名称 堆内内存监控项 类型 JMX agent代理程序 * 键值 jmx["java.lang:type=Memory","HeapMemoryUsage.used"] * JMX 端点 service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi 单位 B 其他配置项 根据需要配置 
JVM线程总数监控
配置项 值 * 名称 JVM线程总数监控 类型 JMX agent代理程序 * 键值 jmx["java.lang:type=Threading","ThreadCount"] * JMX 端点 service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi 其他配置项 根据需要配置 Tomcat请求总数监控
配置项 值 * 名称 Tomcat请求总数监控 类型 JMX agent代理程序 * 键值 jmx["Catalina:type=GlobalRequestProcessor,name="http-nio-8080"",requestCount] * JMX 端点 service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi 其他配置项 根据需要配置 其中\"http-nio-8080\" 是使用tomcat的默认端口8080,如果修改了端口这里也要做对应调整。作为模板配置可以把这个参数在模板中配置成自定义宏,在主机中可以修改宏的值。
Tomcat每分钟请求监控
配置项 值 * 名称 Tomcat每分钟请求监控 类型 JMX agent代理程序 * 键值 change("jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",requestCount]") * JMX 端点 service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi 其他配置项 根据需要配置 JVM老年代已使用内存监控
配置项 值 * 名称 JVM老年代已使用内存监控 类型 JMX agent代理程序 * 键值 jmx["java.lang:type=MemoryPool,name=Tenured Gen", "Usage.used"] * JMX 端点 service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi 其他配置项 根据需要配置 JVM老年代总内存监控
配置项 值 * 名称 JVM老年代已使用内存监控 类型 JMX agent代理程序 * 键值 jmx["java.lang:type=MemoryPool,name=Tenured Gen", "Usage.committed"] * JMX 端点 service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi 其他配置项 根据需要配置 老年代内存使用比例监控
配置项 值 * 名称 JVM老年代已使用内存监控 类型 可计算的 * 键值 jmx.old * 公式 100 * (last("jmx[\"java.lang:type=MemoryPool,name=Tenured Gen\", \"Usage.used\"]"))
/
last("jmx[\"java.lang:type=MemoryPool,name=Tenured Gen\", \"Usage.committed\"]")* 信息类型 浮点数 单位 % 其他配置项 根据需要配置
六.DashBoard创建图形
创建图形的步骤本文就忽略了,添加图形步骤可以参考Zabbix-(三)监控主机CPU、磁盘、内存并创建监控图形

七.其他
如何确定JMX的object_name和attribute_name
jmx监控项格式: jmx[object_name,attribute_name]
使用jconsole连接到JVM,选择MBean

找到需要监控的MBean,查看Bean信息和它的属性信息


!

结合上面的步骤,那么zabbix监控项就可以填写为
jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
Zabbix-(六) JMX监控的更多相关文章
- zabbix使用jmx监控tomcat
zabbix监控Tomcat/JVM实例性能(115) – 运维生存时间http://www.ttlsa.com/zabbix/zabbix-use-jmx-monitor-tomcat/ zabbi ...
- Zabbix 通过 JMX 监控 java 进程
参考: [ JMX monitoring ] [ Zabbix Java gateway ] [ JMX Monitoring (Java Gateway) not Working ] [ Monit ...
- zabbix通过jmx监控tomcat
Zabbix版本: Zabbix 3.0.2 一.服务端配置 1.安装jdk(版本1.7.0_79) 安装与配置比较简单,过程省略.执行java -version命令,出现类似界面表示成功. 2. ...
- zabbix 部署 jmx 监控tomcat
zabbix提供了一个java gateway的应用去监控jmx(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以 ...
- 性能测试之监控--zabbix通过jmx监控tomcat
前提: 已经安装好了zabbix server 实验环境 Centos 7 Zabbix 3.0 Tomcat 7.0 JDK 1.8 安装JDK tar -zxvf jdk-8u181-linux- ...
- Tomcat开启JMX监控
搭建模拟环境: 操作系统:centos7内存:1Gjdk:1.8.0_131tomcat:8.0.48 环境准备我们这里就不直接演示了,直接配置tomcat的jmx 1.进入到tomcat的bin目录 ...
- zabbix 基于JMX的Tomcat监控
zabbix 基于JMX的Tomcat监控 一.环境 ubuntu14.04 LTS Java 1.7.0 zabbix 2.4.5 二.安装配置 1.安装JavaGateway 在ubuntu14. ...
- Zabbix通过JMX方式监控java中间件
Zabbix2.0添加了支持用于监控JMX应用程序的服务进程,称为“Zabbix-Java-gateway”:它是用java写的一个程序. 工作原理: zabbix_server想知道一台主机上的特定 ...
- zabbix监控tomcat(使用jmx监控,但不使用系统自带模版)
一,zabbx使用jmx监控tomcat的原理分析 1.Zabbix-Server找Zabbix-Java-Gateway获取Java数据 2.Zabbix-Java-Gateway找Java程序(j ...
- Zabbix系列之三——部署JMX监控tomcat
zabbix提供了一个java gateway的应用去监控jmx(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以 ...
随机推荐
- JetBrains系列软件激活码
T3ACKYHDVF-eyJsaWNlbnNlSWQiOiJUM0FDS1lIRFZGIiwibGljZW5zZWVOYW1lIjoi5bCP6bifIOeoi+W6j+WRmCIsImFzc2lnb ...
- python列表与集合,以及循环时的注意事项
一.python列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,往后数的最后一个为-1依此类推. Python有6个序 ...
- Python之路(第四十篇)进程池
一.进程池 进程池也是通过事先划分一块系统资源区域,这组资源区域在服务器启动时就已经创建和初始化,用户如果想创建新的进程,可以直接取得资源,从而避免了动态分配资源(这是很耗时的). 线程池内子进程的数 ...
- NetworkManager网络通讯_networkReader/Writer(六)
unet客户端和服务端进行消息发送时可以采用上一节中方法,也可以直接用networkReader/Writer类进行发送 (一)服务端/客户端注册消息 ; m_Server.RegisterHandl ...
- vue之页面缓存问题(基于2.0)
为什么会有这篇文章 在vue2.0中出现了列表页面是每次都重新加载数据,但是详情页面却只在第一次加载的时候调用数据,如果返回到列表再进入详情那么页面是不会重新渲染页面. 1 用vue-router 重 ...
- Unity3d粒子特效:制作火焰效果
效果 分析 真实的火焰效果,通常包括:火.火光.火星等组成部分,而火焰对周围环境的烘焙,可以通过灯光实现,如点光源. 针对火焰组成部分,我们可以创建对应的粒子系统组件,实现相应的效果,如下图所示: 1 ...
- git .gitignore详解
1.最近使用git又遇到一个陷阱: 场景:A和B使用的不同的编译器做的同一个解决方案下的不同的项目工程,刚开始没考虑到版本问题,后来发现A上传的csproj在B需要做很麻烦修改才能打开,后来想到各自用 ...
- GPS学习笔记
预备知识 1. 卫星发送信号时,是以特定频率的电磁波为载波,调整信号到载波上的.多普勒效应就是,卫星和接收机是相对运动的,那么载波的频率会随运动距离发生改变.(<GPS测量与数据处理>p3 ...
- OA权限设计
Action表,有多少个Action,就有多少个记录; UserAction表,记录条数 = User数 * Action数,用于最终确定用于能否请求某个action Role角色表,自定义条数; R ...
- Go defer使用
defer使用语法 //defer后面必须是函数调用语句或方法调用语句,不能是其他语句,否则编译器会出错. package main import ( "fmt" ) func f ...