1.什么是 JMX Exporter ?

 JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据,然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。

Java Management Extensions。 顾名思义,是管理 Java 的一种扩展框架,JMX Exporter 正是基于此框架来读取 JVM 的运行时状态的。

 

2.如何使用 JMX Exporter 暴露 JVM 监控指标 ?

 下面介绍如何通过 JMX Exporter 来暴露 Java 应用的 JVM 监控指标。

 JMX Exporter 的两种用法

 JMX-Exporter 提供了两种用法:

  1. 启动独立进程。JVM 启动时指定参数,暴露 JMX 的 RMI 接口,JMX-Exporter 调用 RMI 获取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
  2. JVM 进程内启动(in-process)。JVM 启动时指定参数,通过 javaagent 的形式运行 JMX-Exporter 的 jar 包,进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。

 官方不推荐使用第一种方式,一方面配置复杂,另一方面因为它需要一个单独的进程,而这个进程本身的监控又成了新的问题,所以本文重点围绕第二种用法讲如何使用 JMX Exporter 暴露 JVM 监控指标给Prometheus并展示在Grafana上。

 

3.准备

要通过Prometheus来收集JVM,除安装JMX-Exporter外还需要配置jmx_prometheus_javaagent的Jar包,用于将收集到的JVM运行时状态数据转换为Prometheus metrics 格式。

JMX-Exporter下载地址:https://github.com/prometheus/jmx_exporter/releases,Linux服务器上可以使用wget命令来获取安装包,命令如下,也可以通过windows把包下载下来然后通过FTP软件上传到Linux服务器上。

cd /usr/local
mkdir jmx_exporter #创建jmx_exporter目录
cd jmx_exporter 
wget https://github.com/prometheus/jmx_exporter/archive/refs/tags/parent-0.13.0.tar.gz   #这里选择的是0.13版本,版本可自由选择适合的

 

jmx_prometheus_javaagent下载地址:

cd /usr/local/jmx_exporter
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.14.0/jmx_prometheus_javaagent-0.14.0.jar

 

4. 配置

4.1 新增jmx_exporter配置文件

cd /usr/local/jmx_exporter/jmx_exporter-parent-0.13.0
vi jmx_exporter_config.yaml

  

vim中内容如下:

---   
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
blacklistObjectNames: []
rules:
  - pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'
    name: os_$1_bytes
    type: GAUGE
    attrNameSnakeCase: true
  - pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
    name: os_$1
    type: GAUGE
    attrNameSnakeCase: true

  4.2 修改Prometheus.yml,增加JMX Exporter节点

连接安装了Prometheus的机器,定位到Prometheus.yml目录下,执行

vim prometheus.yml

  新增内容如下:

prometheus监控 docker compose Prometheus监控jvm_JVM

5.启动

-javaagent:/usr/local/jmx_exporter/jmx_prometheus_javaagent-0.14.0.jar=8585:/usr/local/jmx_exporter/jmx_exporter-parent-0.13.0/jmx_exporter_config.yaml

  在java的启动参数中加上如上参数,就会自动jmx_exporter,同时开放8585端口

 

6.配置Grafana模板

因Grafana上已经配置了Prometheus数据库,这里就省去配置数据库配置,直接下载Grafana模板展示数据

Grafana官方模板下载地址:https://grafana.com/grafana/dashboards/

先在官方网站搜索JVM,在结果中找到合适的模板,比如这里找到的是ID为8878的模板,,PS:最好是将模板的json文件下载下来

 

 然后在Grafana上添加模板,如果下图

prometheus监控 docker compose Prometheus监控jvm_JVM_02

 

 

prometheus监控 docker compose Prometheus监控jvm_Java_03

该模板Json文件:

链接:https://pan.baidu.com/s/11LLF60LdcASrpnBxORtwPA
提取码:aqrs

可以通过ID来加载json文件,也可以自己将JSON文件内容复制到下面输入框中,点击Load

 

prometheus监控 docker compose Prometheus监控jvm_Java_04

 

 因为我这里已经添加了这个模板,所以会有这些提示,当然这些标红提示项都可以自己改的,改好之后点击Import按钮即可,会显示如下图的监控图

prometheus监控 docker compose Prometheus监控jvm_Prometheus监控JVM_05