在prometheus官方下载页面没有看到jvm_exproter的下载地址但是官方页面是有推荐下载地址的 访问 Prometheus - Monitoring system & time series database prometheus官方网址
官方推荐地址下载是在github网络访问不方便的可以用下面的网址
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar
国内JMX_exporter下载地址
Central Repository: io/prometheus/jmx/jmx_prometheus_javaagent
根据需求选择版本这里我使用的是19.0版本
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar
页面的提示中可以看到启动jmx exporter的时候需要有一个config.yaml的文件,config.yaml配置文件的示例在example_configs目录中
mkdir /data/jmx_exporter 创建存储目录
cd /data/jmx_exporter/
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/jmx_prometheus_javaagent-0.19.0.jar
创建配置文件
vim config.yaml
rules:
- pattern: ".*"
Jmx_exporter启动命令
java -javaagent:jmx_prometheus_javaagent-0.19.0.jar=12345:config.yaml -jar OKMInstaller.jar
这个OKMInstaller.jar是我从网上随便下载了一个javaweb包运行起来测试监控的
Download | OpenKM 测试运行的可以自行下载
启动运行到这一步可以不用管了,到这就可以监控到数据了。
启动命令格式
java -javaagent: + jmx-exporter.jar的路径=启动端口 : config.yamll文件路径 + -jar + xxx.jar(被监控的项目jar包路径)
启动成功后可以来的浏览器访问192.168.197.137:12345/metrics 查看采集的数据
启动以后来的prometheus来配置
- job_name: "jvm"
static_configs:
- targets: ["192.168.197.137:12345"]
重启prometheus
systemctl restart prometheus
重启完成后来到grafana导入模板我这里推荐模板id10519 有些模块没有数据是因为表达式不匹配,有些我修改过后贴在下面了,还有几个没写可以吧模块删掉就行。
cpu load 模块表达式需要换成
sum(rate(java_lang_OperatingSystem_SystemCpuLoad[5m])) * 100
System load average 模块表达式需要换成
java_lang_OperatingSystem_SystemLoadAverage{job="$job", instance="$instance"}
Available CPUs 模块表达式需要换成
java_lang_OperatingSystem_AvailableProcessors{instance="$instance"}
Open file descriptors 模块表达式换成
process_open_fds{instance="$instance"}
Class loading 模块表达式换成
jvm_classes_loaded_total{job="$job", instance="$instance"}
下面是grafana模块标签的含义
Memory area [heap]:堆内存区域,用于存储对象实例。
Memory area [noheap]:非堆内存区域,用于存储其他数据结构和元数据。
Memory pool [Code Cache]:代码缓存池,存储编译后的机器代码。
Memory pool [Compressed Class Space]:压缩类空间池,存储压缩的类和元数据。
Memory pool [Metaspace]:元空间池,存储类元数据。
Memory pool [PS Eden Space]:新生代(Eden)内存池,用于存放新创建的对象。
Memory pool [PS Old Gen]:老年代内存池,用于存放长时间存活的对象。
Memory pool [PS Survivor Space]:幸存者空间内存池,用于存放幸存的新生代对象。
GC count increase:垃圾回收次数的增量。
GC time:垃圾回收所消耗的时间。
Threads used:使用的线程数量。
Class loading:类加载情况的指标,包括已加载的类数量、加载失败的类数量等。
Physical memory:物理内存的使用情况。
下面是关于gc总时长告警模板
#gc总时长告警规则
groups:
- name: jvm_gc_time
rules:
- alert: GC总时长
expr: jvm_gc_collection_seconds_sum > 1.0
for: 30s
labels:
severity: warning
annotations:
summary: "{{ $labels.instance }} 当前服务gc总时长超过10秒 "
resolved: "{{ $labels.instance }} 当前主机服务gc时长恢复正常"
#gc总次数告警规则
rules:
- alert: GC总次数
expr: jvm_gc_collection_seconds_count{gc="PS Scavenge",} > 200
for: 30s
labels:
severity: warning
annotations:
description: "{{ $labels.instance }} 当前服务gc总次数超过200次 "
resolved: "{{ $labels.instance }} 当前主机服务gc总次数恢复正常"