Prometheus监控JVM

这里只是对prometheus监控JVM的配置过程做个记录,方便以后查阅。

jmx exporter是prometheus和JMX的桥梁。
在我们的工程里面,它是以Java Agent的方式运行,它的功能是收集本地的JVM信息,并通过HTTP服务暴露出来。

github地址:https://github.com/prometheus/jmx_exporter

1.下载jmx_exporter

新建一个目录,用于存放jmx_exporter和config配置

1
2
3
[admin@haifly-bj-tomcat2 ~]$ mkdir jmx_exporter
[admin@haifly-bj-tomcat2 ~]$ cd jmx_exporter
[admin@haifly-bj-tomcat2 jmx_exporter]$ wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar

2.监控tomcat

2.1 添加名为tomcat.yml的配置文件

将以下github链接里的内容复制到tomcat.yml文件

github地址:https://github.com/chanjarster/prometheus-learn/blob/master/jvm-monitoring/jmx-exporter-config.yml

1
2
3
4
5
6
7
8
9
10
11
[admin@haifly-bj-tomcat2 jmx_exporter]$ cat tomcat.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

2.2 修改tomcat启动文件

修改tomcat启动文件增加以下配置

1
2
3
[admin@haifly-bj-tomcat1 ~]$ vim apache-tomcat-7.0.70/bin/catalina.sh

CATALINA_OPTS="-Xms64m -Xmx2048m -javaagent:/work/admin/jmx_exporter/jmx_prometheus_javaagent-0.3.1.jar=58080:/work/admin/jmx_exporter/tomcat.yml"

-Xms64m -Xmx2048m 用于限制tomcat使用可使用的内存资源
58080端口就是用于获取metrics监控指标的,可根据实际环境修改

修改完后重启tomcat服务

2.3 配置prometheus 拉取监控指标

1
2
3
4
5
6
7
8
9
10
- job_name: 'tomcat'
static_configs:
- targets: ['192.168.6.223:9100']
labels: {cluster: 'product',type: 'basic',env: 'tomcat',job: 'tomcat1',export: 'tomcat1'}
- targets: ['192.168.6.223:58080']
labels: {cluster: 'product',type: 'middle',env: 'tomcat',job: 'tomcat1',course: "tomcat",export: 'jmx_export'}
- targets: ['192.168.3.101:9100']
labels: {cluster: 'product',type: 'basic',env: 'tomcat',job: 'tomcat2',export: 'tomcat2'}
- targets: ['192.168.3.101:58080']
labels: {cluster: 'product',type: 'middle',env: 'tomcat',job: 'tomcat2',course: "tomcat",export: 'jmx_export'}

重启prometheus

如果开启了api管理功能,可以如下方式热加载配置

1
curl -X POST http://127.0.0.1:9090/-/reload

3.监控微服务组件

这里以dubbo服务为例

3.1 添加名为dubbo.yml的配置文件

跟2.1的tomcat文件内容一样

1
2
3
4
5
6
7
8
9
10
11
[admin@haifly-bj-dubbo1 jmx_exporter]$ vim dubbo.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

3.2 修改dubbo服务启动参数

我这里是使用supervisor来管理服务进程

1
2
3
4
5
[program:accservice]
command=/work/admin/jdk1.8.0/bin/java -javaagent:/work/admin/jmx_exporter/jmx_prometheus_javaagent-0.3.1.jar=50881:/work/admin/jmx_exporter/dubbo.yml -Xmx512M -Xms512m -Xmn192m -classpath conf:lib:accservice.jar com.ll.vbox.accservice.main.AccServiceMainClient
directory=/work/admin/accservice
redirect_stderr=true
autorestart = true

50881端口对外暴露该服务的监控指标,可根据实际环境修改

修改完后重启dubbo组件

3.3 配置prometheus 拉取监控指标

1
2
3
4
5
6
7
8
- job_name: 'dubbo'
static_configs:
- targets: ['192.168.6.218:9100']
labels: {cluster: 'product',type: 'basic',env: 'dubbo',job: 'dubbo1',export: 'dubbo'}
- targets: ['192.168.6.218:50881']
labels: {cluster: 'product',type: 'middle',env: 'dubbo',job: 'dubbo1',course: "accservice",export: 'jmx_export'}
- targets: ['192.168.3.97:9100']
labels: {cluster: 'product',type: 'basic',env: 'dubbo',job: 'dubbo2',export: 'dubbo'}

重启prometheus

1
curl -X POST http://127.0.0.1:9090/-/reload

4.grafana出图

推荐使用8563

效果如下

上图面板经过一定的修改可能略有不同,仅供参考

-------------本文结束感谢您的阅读-------------