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

对于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中配置的相关参数做详细介绍

  • management.endpoint.metrics.enabled 是用于启用或禁用 Spring Actuator Metrics 端点的参数。

    该端点提供了当前应用程序的度量指标信息,一般是指通过 /actuator/metrics 提供如应用程序的请求量、响应时间、错误率等。

  • management.endpoint.prometheus.enabled 参数是用于启用或禁用 Prometheus 端点的开关。

    当设置为 true 时,Spring Boot 将启动一个 HTTP 服务器,向 /actuator/prometheus 路径提供可供 Prometheus 采集的指标数据。这些指标数据可以用于监控应用程序的性能、健康状态等信息。

  • management.metrics.export.prometheus.enabled 是 Spring Boot Actuator 库提供的一个配置参数,它用于启用或禁用 Prometheus 格式的度量指标的导出。

    默认情况下,该参数的值为 true,即启用 Prometheus 格式的度量指标的导出。

    但是当参数的值为 false 时,应用程序不会将度量指标以 Prometheus 格式导出。

    但是可以通过其他格式的导出方式访问度量指标,如 JSON 或 JMX

  • management.endpoints.jmx.exposure.include用于指定哪些端点将在 JMX 中暴露出来。

    默认情况下,JMX 中的所有端点都是开启的。可以使用逗号分隔的端点 ID 列表来配置开启哪些端点

  • management.endpoints.web.exposure.include 用于指定哪些端点将在 Web 界面上暴露出来。

    默认情况下,Web 界面上的所有端点都是开启的。同样可以使用逗号分隔的端点 ID 列表来配置开启哪些端点

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

  • management.metrics.tags.application

    用于在度量指标中添加标签,这里是添加了一个 application 标签,您可以根据自己需求添加

  • management.endpoint.health.show-details

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

  • management.health.redis.enabled

用于控制是否在/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 监控工具:

  • JConsole:Java 自带的监视工具,可通过 JDK 中的 bin 目录下的 jconsole 命令启动,提供了一些基本的监视功能和操作界面。

  • VisualVM:Java 自带的多合一监视和分析工具,集成了 JConsole 和 VisualGC 等插件,提供了更加详细的监视信息和功能。

  • Mission Control:Java 官方提供的高级监视和管理工具,提供了诊断、调优、性能分析等丰富的功能。

  • Zabbix:开源的网络监控和管理工具,支持通过 JMX 监控 Java 应用程序,提供了实时监视、性能分析、告警等功能。

  • Nagios:开源的网络监控和管理工具,可通过插件扩展支持 JMX 监控 Java 应用程序,提供了实时监视、告警等功能。

  • Prometheus:开源的监控和警报工具,可通过 Prometheus 的 JMX exporter 支持 JMX 监控 Java 应用程序,提供了度量和警报功能。

  • Jolokia:开源的 JMX-HTTP 桥接器,可将 JMX 接口转换为 HTTP/JSON 接口,方便其他监视工具集成。

  • JavaMelody:开源的 Java 应用程序性能监视工具,支持通过 JMX 监视 Java 应用程序,提供了实时监视、性能分析等功能。

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

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

  • prometheus:用于将度量数据导出到 Prometheus 监控系统。

  • graphite:用于将度量数据导出到 Graphite 监控系统。

  • influx:用于将度量数据导出到 InfluxDB 时间序列数据库。

  • stackdriver:用于将度量数据导出到 Google Cloud Stackdriver。

  • jmx:用于将 JMX bean 度量数据导出到 JMX 管理系统。

  • newrelic:用于将度量数据导出到 New Relic APM 系统。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 144,247评论 1 305
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,830评论 1 258
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 95,531评论 0 214
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,345评论 0 183
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 49,160评论 1 260
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,936评论 1 178
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,538评论 2 275
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,291评论 0 168
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 29,162评论 6 237
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,654评论 0 214
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,401评论 2 217
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,747评论 1 232
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,297评论 1 33
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,206评论 2 213
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,670评论 3 213
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,661评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,089评论 0 169
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,677评论 2 233
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,819评论 2 237

推荐阅读更多精彩内容