linux上使用JMX Exporter结合prometheus(二)

  • Post author:
  • Post category:linux




一、JMX Exporter是什么



Prometheus 社区开发了 JMX Exporter 来导出 JVM 的监控指标,以便使用 Prometheus 来采集监控数据。它是 Prometheus 官方组件,作为一个JAVA Agent 来提供本地 JVM 的 metrics,并通过 http 暴露出来。这也是官方推荐的一种方式,可以获取进程的信息,比如CPU和内存使用情况。




JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据,


以代理的形式收集目标应用的


JMX




指标,这样做的好处在于无需对目标应用做任何的改动。


然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。


那么,JMX 又是什么呢?它的全称是:Java Management Extensions。 顾名思义,是管理 Java 的一种扩展框架,JMX Exporter 正是基于此框架来读取 JVM 的运行时状态的。


本文将介绍如何利用 Prometheus 与 JMX Exporter 来监控你 Java 应用的 JVM。



二、JMX Exporter 的两种用法



1、启动独立进程。JVM 启动时指定参数,暴露 JMX 的 RMI 接口,JMX Exporter 调用 RMI 获取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。

2、VM 进程内启动(in-process)。JVM 启动时指定参数,通过 JAVA Agent 的形式运行 JMX Exporter 的 jar 包,进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。



官方不推荐使用第一种方式,一方面配置复杂,另一方面因为它需要一个单独的进程,而这个进程本身的监控又成了新的问题。




下载JMX Exporter



github地址:


GitHub – prometheus/jmx_exporter: A process for exposing JMX Beans via HTTP for Prometheus consumption


# 新建目录
mkdir -p /data/prometheus/jmx_exporter
# 进入目标目录
cd /data/prometheus/jmx_exporter
# 下载最新jmx_exporter:
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.16.0/jmx_prometheus_javaagent-0.16.0.jar


配置JMX Exporter

# 所在目录
cd /data/prometheus/jmx_exporter
# 新建配置文件simple-config.yml
vim simple-config.yml

#内容如下
---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
rules:
 - pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
   name: os_$1
   type: GAUGE
   attrNameSnakeCase: true

三、添加 Prometheus 监控配置

# 进入 prometheus 文件夹
cd /data/prometheus/prometheus-2.28.1.linux-amd64
# 编辑 prometheus 配置文件
vim prometheus.yml

# 添加内容如下
- job_name: 'java'
    scrape_interval: 30s
    static_configs:
    - targets: ['localhost:30100']
    
# 重启prometheus
/etc/init.d/prometheus-server restart


四、部署 java 应用

nohup java -javaagent:/data/prometheus/jmx_exporter/jmx_prometheus_javaagent-0.16.0.jar=30100:/data/prometheus/jmx_exporter/simple-config.yml -jar /mnt/baimao/sim/sim.jar >> /mnt/baimao/logs/sim.out 2>&1 &
# 参数注释
# -javaagent:/data/prometheus/jmx_exporter/jmx_prometheus_javaagent-0.16.0.jar=30100 表示 JMX Exporter 的代理端口为30100
# :/data/prometheus/jmx_exporter/simple-config.yml 表示 JMX Exporter 的配置文件
# /mnt/baimao/sim/sim.jar 表示 java 应用的位置
# /mnt/baimao/logs/sim.out 表示 java 应用的日志



版权声明:本文为manba_24原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。