JMX-Exporter虚拟机JVM监控采集部署
一、背景简介
虚拟机部署的Java应用没有集成SpringBoot自带监控Actuator,需要额外手动配置采集JVM监控。JMX-Exporter作为Prometheus生态系统中重要的组件,能够将JMX(Java Management Extensions)指标转换为Prometheus格式,实现对Java应用的深度监控。
二、JMX Agent部署步骤
2.1. 部署文件
在开始部署之前,需要准备以下核心文件:
文件类型 | 文件名称 | 说明 |
---|---|---|
JVM监控Agent | jmx_prometheus_javaagent-1.2.0.jar |
JMX指标收集器 |
监控配置文件 | exporter.yaml |
JMX指标采集规则配置 |
exporter.yaml
rules:
- pattern: ".*"
2.2. 部署步骤
(1)文件部署
- Agent部署:将
jmx_prometheus_javaagent-1.2.0.jar
文件添加到Java应用模块的lib
目录下 - 配置文件部署:将
exporter.yaml
配置文件添加到应用模块的conf
目录下 - 启动脚本修改:修改Java应用模块的启动脚本,增加jmx-agent的启动参数
(2)修改应用启动脚本配置
基础配置示例:
java -javaagent:./lib/jmx_prometheus_javaagent-1.2.0.jar=8585:./conf/exporter.yaml
完整启动脚本示例:
java -javaagent:./lib/jmx_prometheus_javaagent-1.2.0.jar=8585:./conf/exporter.yaml \
${JAVA_OPTS} \
-cp ${CLASSPATH} \
com.example.application.server.ApplicationServer \
> ${SERVER_LOG} 2>&1 &
2.3. 重启应用模块
修改启动脚本后,需要重启应用模块使配置生效:
# 停止应用
./stop.sh
# 启动应用
./start.sh
2.4. 验证Agent启动
使用浏览器或curl命令验证JMX-Exporter是否正常工作:
curl http://host:8585/metrics
三、Prometheus监控采集配置
3.1. 配置Kubernetes Endpoints
创建应用名称-jmx-exporter-endpoints.yaml
文件:
apiVersion: v1
kind: Endpoints
metadata:
name: 应用名称-jmx-exporter
namespace: monitoring
subsets:
- addresses:
- ip: 192.168.1.10 # JMX服务器IP1
- ip: 192.168.1.11 # JMX服务器IP2
ports:
- name: http
port: 8585 # jmx-exporter端口
protocol: TCP
3.2. 配置Kubernetes Service
创建应用名称-jmx-exporter-service.yaml
文件:
apiVersion: v1
kind: Service
metadata:
labels:
app: jmx-exporter
platform: app-platform # 应用所属平台
modules: 应用名称 # 具体应用模块名
name: jmx-exporter
namespace: monitoring
spec:
ports:
- port: 8585 # jmx-exporter端口
protocol: TCP
targetPort: http
type: ClusterIP
3.3. 配置ServiceMonitor
创建jmx-exporter-monitor.yaml
文件:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: jmx-exporter
namespace: monitoring
spec:
endpoints:
- interval: 15s # 采集间隔
path: /metrics # 指标暴露路径
port: http
targetLabels:
- platform
- modules
namespaceSelector:
matchNames:
- monitoring
selector:
matchLabels:
app: jmx-exporter
3.4. 启用配置
按顺序执行以下命令启用监控配置:
# 创建Endpoints
kubectl apply -f 应用名称-jmx-exporter-endpoints.yaml
# 创建Service
kubectl apply -f 应用名称-jmx-exporter-service.yaml
# 创建ServiceMonitor
kubectl apply -f jmx-exporter-monitor.yaml
验证配置生效:
# 查看Endpoints状态
kubectl get endpoints -n monitoring | grep jmx-exporter
# 查看Service状态
kubectl get service -n monitoring | grep jmx-exporter
# 查看ServiceMonitor状态
kubectl get servicemonitor -n monitoring | grep jmx-exporter
四、监控指标说明
4.1. 核心JVM指标
JMX-Exporter采集的主要JVM指标包括:
4.2. 告警规则配置
基于JMX指标可以配置相应的告警规则:
groups:
- name: jvm_alerts
rules:
- alert: JVMMemoryHigh
expr: jvm_memory_bytes_used / jvm_memory_bytes_max > 0.9
for: 2m
labels:
severity: warning
annotations:
summary: "JVM内存使用率过高"
description: "{{ $labels.instance }} JVM内存使用率超过90%"
- alert: JVMGCTimeHigh
expr: rate(jvm_gc_duration_seconds_sum[5m]) > 0.1
for: 1m
labels:
severity: critical
annotations:
summary: "JVM GC时间过长"
description: "{{ $labels.instance }} GC时间占比超过10%"
五、故障排查
5.1. 常见问题
5.2. 日志排查
# 查看应用启动日志
tail -f application.log
# 查看Prometheus采集日志
kubectl logs -n monitoring prometheus-xxx
# 检查ServiceMonitor状态
kubectl describe servicemonitor jmx-exporter -n monitoring
总结
JMX-Exporter为传统Java应用提供了现代化的监控能力,通过本方案可以实现:
- 统一监控体系:将JMX指标纳入Prometheus监控生态
- 自动化采集:通过Kubernetes原生组件实现自动发现和采集
- 灵活配置:支持自定义指标采集规则和告警策略
- 可扩展性:支持多实例、多应用的统一管理
通过标准化的部署流程,可以快速为现有Java应用添加完善的JVM监控能力,提升系统可观测性。
参考文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 逐光の博客!
评论