使用JMX Exporter监控Rainbond上的Java应用

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 可通过本文了解部署在 Rainbond 上的 Java 应用如何使用 JMX Exporter 暴露 JVM 监控指标。

场景

Prometheus 社区开发了 JMX Exporter 用于导出 JVM 的监控指标,以便使用 Prometheus 来采集监控数据。当您的 Java 应用部署在Rainbond上后

可通过本文了解部署在 Rainbond 上的 Java 应用如何使用  JMX Exporter 暴露 JVM 监控指标。

JMX Exporter 简介

Java Management Extensions,JMX 是管理 Java 的一种扩展框架,JMX Exporter 基于此框架读取 JVM 的运行时状态。JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的监控数据,然后将其转换为 Prometheus 可辨识的 metrics 格式,让 Prometheus 对其进行监控采集。

JMX Exporter 提供 启动独立进程JVM 进程内启动(in-process)两种方式暴露 JVM 监控指标:

启动独立进程

JVM 启动时指定参数,暴露 JMX 的 RMI 接口。JMX Exporter 调用 RMI 获取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。

JVM 进程内启动(in-process)

JVM 启动时指定参数,通过 javaagent 的形式运行 JMX Exporter 的 jar 包,进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。

官方不建议使用 启动独立进程 方式,该方式配置复杂且需单独的进程,进程本身的监控又引发了新的问题。本文以 JVM 进程内启动(in-process)方式为例,在 Rainbond 中使用 JMX Exporter 暴露 JVM 监控指标。

在 Rainbond 上使用 JMX Exporter

在Rainbond上对于构建类型不同的组件有不同的处理方式,如下

通过源码构建的Java应用

自V5.3版本后通过 Rainbond 源码构建的 JAVA 应用,默认都会将 JMX Exporter 打包,用户使用时只需添加环境变量开启即可。

  1. 为 JAVA 服务组件添加一个指定的环境变量 ES_ENABLE_JMX_EXPORTER = true ,即可开启 jmx_exporter
  2. 在 JAVA 服务组件的端口管理处添加一个 5556 端口,这是 jmx_exporter 默认监听的端口。

通过镜像构建的Java应用

对于镜像或应用市场构建的应用,可以使用初始化类型的插件实现注入 jmx_agent

往期文章中详细讲解过其实现原理,可以参考:Rainbond通过插件整合SkyWalking,实现APM即插即用 Agent插件实现原理部分。

  • 构建 jmx_exporter 插件

进入团队 -> 插件 -> 新建插件,创建初始化类型插件,源码地址:https://github.com/goodrain-apps/jmx_exporter.git

create_jmx.png

插件构建成功后即可使用,为 JAVA 服务组件开通此插件即可。

  • 挂载存储

为 JAVA 服务组件挂载存储 /tmp/agent,使其可以与插件共享存储。

通过共享存储,初始化插件将所需的配置文件以及 Agent 放在共享存储中供主服务使用,实现服务无侵入。

  • 添加环境变量

为 JAVA 服务组件添加环境变量 JAVA_OPTS = -javaagent:/tmp/agent/jmx_prometheus_javaagent-0.16.1.jar=5556:/tmp/agent/prometheus-jmx-config.yaml

可挂载配置文件 /tmp/agent/prometheus-jmx-config.yaml 替换现有的配置文件。

  • 添加端口

在组件的端口管理处,添加新的端口 5556

最后更新组件即可生效。

添加应用监控点

应用监控是基于 rbd-monitor 实现,当我们添加了监控点后就相当于创建了一个 servicemonitor

进入组件内 -> 监控 -> 业务监控 -> 管理监控点,新增监控点,填写以下信息:

  • 配置名:自定义
  • 收集任务名称:自定义
  • 收集间隔时间:10秒
  • 指标路径:/metrics
  • 端口号:选择 jmx_exporter 端口

添加完后更新组件使其生效。

添加监控图表

接下来就可以添加一个监控图表,来展示 JAVA 服务组件中 JVM 的指标行:

点击业务监控面板上方的 添加图表

输入新的标题,以及对应的查询条件 jvm_memory_bytes_used 后,点击 查询。如果正常返回图表,则说明查询条件是正确的。标题的定义尽量清晰明了,并在有必要的情况下明确单位。

更多指标可参考 官方文档

java-exporter-2.png

扩展Grafana

可通过grafana 展示,以下简述操作步骤:

  1. 获取 rbd-monitor 服务 CLUSTER IP

$ kubectl get svc -l name=rbd-monitor -n rbd-system

NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
rbd-monitor   ClusterIP   10.43.112.131   <none>        9999/TCP   13d

  1. 在平台上添加第三方服务,填写 rbd-monitor 服务的 CLUSTER IP
  2. 从开源应用商店安装 Grafana并添加依赖。
  3. 进入Grafana,Configuration -> Add Data Source -> URL为 http://127.0.0.1:9999 ,导入 JVM dashboard ID 8878 ,通过Grafana面板展示应用监控信息。

grafana-dashboard.png

References Link

jmx_export 插件Github  https://github.com/goodrain-apps/jmx_exporter.git

jmx_export 官方  https://github.com/prometheus/jmx_exporter.git

jvm dashboard  https://grafana.com/grafana/dashboards/8878

关于Rainbond

Rainbond 是一个开源的云原生应用管理平台,使用简单,不需要懂容器和Kubernetes,支持管理多个Kubernetes集群,提供企业级应用的全生命周期管理,功能包括应用开发环境、应用市场、微服务架构、应用持续交付、应用运维、应用级多云管理等。

🌟 Github:https://github.com/goodrain/rainbond

😊 官网:https://www.rainbond.com

😉 微信群:请搜索 Rainbond 并关注微信公众号进入技术交流群

🤔 钉钉群:请搜索钉钉群号 31096419

相关文章
|
1月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
242 3
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
126 8
|
2月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
478 12
|
2月前
|
监控 Kubernetes Java
使用 New Relic APM 和 Kubernetes Metrics 监控 EKS 上的 Java 微服务
在阿里云AKS上运行Java微服务常遇性能瓶颈与OOMKilled等问题。本文教你通过New Relic实现集群与JVM双层监控,集成Helm部署、JVM代理注入、GC调优及告警仪表盘,打通从节点资源到应用内存的全链路观测,提升排障效率,保障服务稳定。
200 1
|
2月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
407 1
|
3月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
监控 网络协议 Java
使用 JMX 监控和管理 Java 程序(二)
使用 JMX 监控和管理 Java 程序(二)
741 0
使用 JMX 监控和管理 Java 程序(二)
|
设计模式 监控 网络协议
使用 JMX 监控和管理 Java 程序(一)
使用 JMX 监控和管理 Java 程序
772 0
使用 JMX 监控和管理 Java 程序(一)
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
154 1