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的配置。

  1. 安装Zabbix-Java-gateway

    可以在其他主机安装Zabbix-Java-gateway,只需要修改Zabbix-server配置文件,指定Zabbix-Java-gateway的地址和端口,这里就在部署Zabbix Server的主机上部署Zabbix-Java-gateway。

    # yum install zabbix-java-gateway
  2. 配置Zabbix-Java-gateway

    配置文件是 /etc/zabbix/zabbix_java_gateway.conf文件,文本采取默认配置,配置项详细信息可以参考下图或者参考官方Zabbix-java-gateway配置项

  3. 启动Zabbix-Java-gateway

    # systemctl start zabbix-java-gateway
  4. 修改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 JMXTemplate App Generic Java JMX模板一个可以监控Tomcat应用、一个可以监控普通Java应用。读者可以直接为被监控主机增加链接上述两个模板,也可以快速进行监控。

本文采用自定义的方式创建JMX监控模板

注:Zabbix提供的 JMX模板不一定适配所有 JDK 版本,例如 Template App Generic Java JMX 模板中提供了Perm Gen 永久代的监控项,而 JDK 8中已经将 Perm Gen永久代替换为了 Metaspace元空间,而模板中没有元空间的监控项

  1. 创建自定义JMX模板

    创建模板过程就不贴出来了,不清楚如何创建自定义模板的读者可以参考之前的文章如何创建自定义模板。这里创建了一个群组Java Server Group和自定义模板Custom JMX Template

  2. 创建监控项

    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]

  1. 使用jconsole连接到JVM,选择MBean

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

    !

  3. 结合上面的步骤,那么zabbix监控项就可以填写为

    jmx["java.lang:type=Memory","HeapMemoryUsage.used"]

Zabbix-(六) JMX监控的更多相关文章

  1. zabbix使用jmx监控tomcat

    zabbix监控Tomcat/JVM实例性能(115) – 运维生存时间http://www.ttlsa.com/zabbix/zabbix-use-jmx-monitor-tomcat/ zabbi ...

  2. Zabbix 通过 JMX 监控 java 进程

    参考: [ JMX monitoring ] [ Zabbix Java gateway ] [ JMX Monitoring (Java Gateway) not Working ] [ Monit ...

  3. zabbix通过jmx监控tomcat

    Zabbix版本: Zabbix 3.0.2 一.服务端配置 1.安装jdk(版本1.7.0_79) 安装与配置比较简单,过程省略.执行java -version命令,出现类似界面表示成功.   2. ...

  4. zabbix 部署 jmx 监控tomcat

    zabbix提供了一个java gateway的应用去监控jmx(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以 ...

  5. 性能测试之监控--zabbix通过jmx监控tomcat

    前提: 已经安装好了zabbix server 实验环境 Centos 7 Zabbix 3.0 Tomcat 7.0 JDK 1.8 安装JDK tar -zxvf jdk-8u181-linux- ...

  6. Tomcat开启JMX监控

    搭建模拟环境: 操作系统:centos7内存:1Gjdk:1.8.0_131tomcat:8.0.48 环境准备我们这里就不直接演示了,直接配置tomcat的jmx 1.进入到tomcat的bin目录 ...

  7. zabbix 基于JMX的Tomcat监控

    zabbix 基于JMX的Tomcat监控 一.环境 ubuntu14.04 LTS Java 1.7.0 zabbix 2.4.5 二.安装配置 1.安装JavaGateway 在ubuntu14. ...

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

    Zabbix2.0添加了支持用于监控JMX应用程序的服务进程,称为“Zabbix-Java-gateway”:它是用java写的一个程序. 工作原理: zabbix_server想知道一台主机上的特定 ...

  9. zabbix监控tomcat(使用jmx监控,但不使用系统自带模版)

    一,zabbx使用jmx监控tomcat的原理分析 1.Zabbix-Server找Zabbix-Java-Gateway获取Java数据 2.Zabbix-Java-Gateway找Java程序(j ...

  10. Zabbix系列之三——部署JMX监控tomcat

    zabbix提供了一个java gateway的应用去监控jmx(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以 ...

随机推荐

  1. Flink整合oozie shell Action 提交任务 带kerberos认证

    最近这段时间一直在忙新集群迁移,上了最新的cdh6.3.0 于是Flink 提交遇到了许多的问题 还好有cloudera License 有了原厂的帮助和社区的伙伴,问题解决起来快了不少,手动滑稽 集 ...

  2. freertos学习

    freertos的基本框架如下 注意有三点很重要: 1.任务的资源 (1)任务优先级:freertos 能够调度的任务优先级在freertosConfig.h中的configMAX_PRIORITIE ...

  3. 《Java并发编程实战》读书笔记-第4章 对象的组合

    设计线程安全的类 三个基本要素: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问管理策略 实例封闭 将数据封装在对象内部,可以将数据的访问限制在对象的方法上,从而更容 ...

  4. vue 父组件动态传值至子组件

    1.进行数据监听,数据每次变化就初始化一次子组件,进行调取达到传递动态数据的目的普通的监听: watch:{ data: function(newValue,oldValue){ doSomeThin ...

  5. gulp——用自动化构建工具增强你的工作流程

    想要使用gulp,就要了解gulp,就像追自己的爱豆,你要知道爱豆的喜好.兴趣 简单的了解你的新爱豆———安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 ...

  6. 学习了解Shiro框架

    有关Shiro安全框架 实现权限的几种方式 1)通过表来实现 2)shiro框架 3)Spring Security框架 shiro有哪些主要功能 1.授权 访问控制的过程,即确定谁有权访问 2.身份 ...

  7. git jenkins 基本部署 gitlab私有仓库

    从代码私有性方面来看,公司不希望员工获取到全部的代码,这个时候 GitLab 无疑是最佳的选择.但对于开源项目而言,GitHub 依然是代码托管的首选平台. 1.安装gitlab[root@gitla ...

  8. 两行代码玩转SUMO!

    两行代码玩转SUMO! 这篇博客很简单,但是内容很丰富 如何生成如下所示的研究型路网结构? 只需要打开ubuntu终端输入如下代码即可,grid.number代表路口数量,grid.length代表路 ...

  9. (六)添加adbmingling

    给环境变量Path添加adb命令路径,即adb.exe所在的目录 C:\Users\LIU Liang\AppData\Local\Android\Sdk\platform-tools

  10. Dockerfile 定制镜像

    从上一篇文章中我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置.文件等信息,但是命令毕竟只是命令,每次定制都得去重复执行这个命令,而且还不够直观,如果我们可以把每一层修改.安装.构建.操作的 ...