首页 > 编程语言 >Java项目开启JMX:Prometheus数据上报

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

时间:2023-04-13 18:03:08浏览次数:40  
标签:JMX management Java enabled prometheus Prometheus true

对于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 列表来配置开启哪些端点

比如上面种,这两个都只是保留 health 和 prometheus 两个断点。所以可以请求 /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"}

结果如下

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

可以看到采集到了相关的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 系统。

欢迎关注个人公众号

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

标签:JMX,management,Java,enabled,prometheus,Prometheus,true
From: https://blog.51cto.com/colinspace/6188292

相关文章

  • Spring IOC容器注解大全—基于Java的容器配置
    本节介绍了如何在你的Java代码中使用注解来配置Spring容器。它包括以下主题。基本概念:@Bean 和 @Configuration通过使用 AnnotationConfigApplicationContext 实例化Spring容器使用 @Bean 注解使用 @Configuration 注解构建基于Java的配置Bean定义配置PropertySource 抽象......
  • 万字详解 | Java 流式编程
    概述StreamAPI是Java中引入的一种新的数据处理方法。它提供了一种高效且易于使用的方法来处理数据集合。StreamAPI支持函数式编程,可以让我们以简洁、优雅的方式进行数据操作,还有使用Stream的两大原因:在大多数情况下,将对象存储在集合中就是为了处理它们,因此你会发现你把编程......
  • javaweb验证码
    publicclassmyfunction{publicstaticStringgetRandString(intlength){Stringstr="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";Randomrandom=newRandom();StringBuffersb=newStringBuffe......
  • Java实现:分治法求最近点对
    /*问题1:如何解决cannotbecasttojava.lang.Comparable问题?产生原因:TreeSet的特点是可排序、不重复,即TreeSet要求存放的对象必须是可排序的。如果对象之间不可排序,就会抛出这个异常。解决:实现Comparable接口问题2:JavaArrayListtoArray()方法解决:https://www.runoo......
  • Java集成工作流审批机制,多个项目实际运用优化版本(干货)
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot+vue+activiti集成了activiti在线编辑器,流行的前后端分离部署开发模式,快速开发平台,可插拔工作流服务。工作......
  • java.io.Serializable(序列化)接口
     一、概念Java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象。对象序列化是对象持久化的一种实现方法,它是将对象的属性和方法转化为一种序列化的形式用于存储和传输。反序列化就是根据这些保存的信息重建对象的过程。序......
  • Java常用实体类介绍:POJO、Domain、DO、DTO、VO
    POJOPOJO是PlainOldJavaObject的简称,它指的是一个没有限制或要求下的纯平对象。POJO用于表示没有任何框架或技术限制的纯数据对象。在Java开发中,POJO通常用于简化复杂对象和降低对象的耦合度,是面向对象编程中"高内聚、低耦合"设计思想的体现。示例代码:@Datapublic......
  • JavaScript黑科技:变量监听
    作者:JShaman团队,转载请保留功能目标实时监视一个变量的值,当值发生改变时,马上给出提示。实现方法一直观且朴素的方法,可以用setInterval,循环检测变量的值,示例代码:<html><body><script>//要监视的变量vartest_value=1;setInterval(function(){......
  • java故障处理(三)远程debug
    转载:https://blog.51cto.com/u_11554106/4930697一、remotedebug何为远程debug呢?通常我们在开发过程中,都会将代码部署到服务中,这个时候QA提出了一个bug,通过查看代码的逻辑发现问题十分的困难?一般情况下都是想着本地能不能复现一下,本地debug调试一下;或者通过arthas进行相关......
  • Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not fi
    用idea使用mybatis时<mappers><mapperresource="com/mybatis/mapper/UserMapper.xml"></mapper></mappers>遇到吐下错误时ErrorparsingSQLMapperConfiguration.Cause:java.io.IOException:Couldnotfindresourcecom/my......