Java项目开启JMX:Prometheus数据上报

2023-04-12  本文已影响0人  菩提老鹰

对于Java项目而言,开启JMX 进行JVM监控是很有必要的,可以帮忙开发人员分析、定位问题

常规开启Java JMX 方法

一般可以在启动脚本中添加相关的参数

-Dcom.sun.management.jmxremote.port=6543 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

上述的配置项,会在指定的端口(比如6543)开启JMX,这样的话像JConsole这样的监视器就可以通过这个端口连接到应用程序。

同时连接不需要身份认证和SSL

关于都有哪些常见的 JMX 监控工具,详见文末小福利

Java spring boot 框架开启JMX

最常见的就是在Java项目的 applicaiton.properties 文件中添加如下配置

spring.jmx.enabled=true

但是现在基本都是使用 spring boot 框架开发,有更简便的方案。

案例中是使用 spring boot 框架 加 apollo 配置中心。所以核心配置都是在Apollo中进行配置。

在Java项目的 applicaiton.properties 文件中进行如下配置加载 Apollo

# 服务ID,对应的Apollo中的服务ID 
app.id=xxxx-service
    
# apollo 相关配置
apollo.cluster=default
# Apollo的访问地址
apollo.meta=http://apollo.xxxx.local
apollo.cacheDir=/data/apollo-config
apollo.bootstrap.enabled = true
apollo.bootstrap.eagerLoad.enabled = true
apollo.bootstrap.namespaces = application,elasticsearch,redis,tech.consul,tech.site,logger,tech.database

Apollo中JMX 相关配置及说明

# apollo中项目对应的application 命名空间
management.endpoint.metrics.enabled = true
management.endpoint.prometheus.enabled = true
management.endpoints.jmx.exposure.include = health,prometheus
management.endpoints.web.exposure.include = health,prometheus

management.metrics.export.prometheus.enabled = true
management.metrics.tags.application = ${spring.application.name}

management.endpoint.health.show-details = ALWAYS
management.health.redis.enabled = false

细心的同学已经发现,在项目的 applicaiton.properties 中没有配置 spring.jmx.enabled=true

那么上述的配置是否真的开启了JMX呢?答案是肯定的,已经开启了。

这是因为:

在SpringBoot中 management.endpoints.jmx.enabled 默认为True,它会自动开启JMX监控功能。

在Spring Boot框架中提供了对JMX的自动配置,当检测到management.endpoints.jmx.enabled属性为true时,会自动开启JMX监控功能,并将MBean注册到MBean服务器中。

因此,即使在应用的配置文件中没有显式地配置 spring.jmx.enabled=true,Spring Boot应用也会开启JMX监控功能。


下面对Apollo中配置的相关参数做详细介绍

比如上面种,这两个都只是保留 healthprometheus 两个断点。所以可以请求/actuator/health/actuator/prometheus 。 虽然 management.endpoint.metrics.enabled = true 开启可以通过 /actuator/metrics 获取数据 , 但是实际上 JMX 或者Web形式都没有进行暴露,所以请求 /actuator/metrics 是 404

该参数用于控制是否在/actuator/health 接口中是否展示所有细节,如果请求可以开启,有助于排查问题

用于控制是否在/actuator/health 接口是否检测该项目链接的所有Redis,如果开启,会检测所有的,如果有一个Redis有问题连接不上,就会导致这个服务的健康检查为 Down 无法注册到Consul ,进而无法对外提供服务。

配置Prometheus

然后在Prometheus中就可以通过服务暴漏的/actuator/prometheus 接口获取服务的性能数据,然后通过grafana进行 监控数据的呈现

# 
- job_name: 'consul-discovery-service'
    scrape_interval: 30s
    metrics_path: '/actuator/prometheus'
    consul_sd_configs:
    - server: 'consul.xxxx.local'
    

因为服务都是注册在 Consul中的,所以通过 consul_sd_configs 的形式可以简化配置

然后在Prometheus自带的Web页面中进行查询

jvm_memory_used_bytes{job="consul-discovery-service"}

结果如下

prometheus-jvm.png

可以看到采集到了相关的JVM数据,然后进行Grafana配置即可。

网上有合适的JVM模板,自行搜索导入Grafana即可。

小福利

1、常见的 JMX 监控工具:

这些工具中,你了解和熟悉那些呢?

2、在 management.metrics.export 配置下,常见的 reporter 包括:

欢迎关注个人公众号 , 搜索 全栈运维

上一篇 下一篇

猜你喜欢

热点阅读