Prometheus+Grafana监控JVM实战
1.什么是 JMX Exporter ?
JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据,然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。
那么,JMX 又是什么呢?它的全称是:Java Management Extensions
。 顾名思义,是管理 Java 的一种扩展框架,JMX Exporter 正是基于此框架来读取 JVM 的运行时状态的。
2.如何使用 JMX Exporter 暴露 JVM 监控指标 ?
下面介绍如何通过 JMX Exporter 来暴露 Java 应用的 JVM 监控指标。
JMX Exporter 的两种用法
JMX-Exporter 提供了两种用法:
- 启动独立进程。JVM 启动时指定参数,暴露 JMX 的 RMI 接口,JMX-Exporter 调用 RMI 获取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
- 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
新增内容如下:
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上添加模板,如果下图
该模板Json文件:
链接:https://pan.baidu.com/s/11LLF60LdcASrpnBxORtwPA
提取码:aqrs
可以通过ID来加载json文件,也可以自己将JSON文件内容复制到下面输入框中,点击Load
因为我这里已经添加了这个模板,所以会有这些提示,当然这些标红提示项都可以自己改的,改好之后点击Import按钮即可,会显示如下图的监控图