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

场景

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

插件构建成功后即可使用,为 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 后,点击 查询 。如果正常返回图表,则说明查询条件是正确的。标题的定义尽量清晰明了,并在有必要的情况下明确单位。

更多指标可参考 官方文档

扩展Grafana

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

  1. 获取 rbd-monitor 服务 CLUSTER IP 。

$ kubectl get svc -l name=rbd-monitor -n rbd-systemNAME          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面板展示应用监控信息。

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集群,提供企业级应用的全生命周期管理,功能包括应用开发环境、应用市场、微服务架构、应用持续交付、应用运维、应用级多云管理等。

全部评论

相关推荐

03-25 19:43
湖北大学 C++
点赞 评论 收藏
分享
03-06 18:20
门头沟学院 Java
点赞 评论 收藏
分享
03-27 22:42
南京大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4372次浏览 77人参与
# AI面会问哪些问题? #
28190次浏览 565人参与
# 厦门银行科技岗值不值得投 #
8090次浏览 188人参与
# 你的实习产出是真实的还是包装的? #
20352次浏览 343人参与
# 找AI工作可以去哪些公司? #
9332次浏览 246人参与
# 春招至今,你的战绩如何? #
66067次浏览 584人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15361次浏览 223人参与
# 从事AI岗需要掌握哪些技术栈? #
9154次浏览 320人参与
# 中国电信笔试 #
32055次浏览 295人参与
# 你做过最难的笔试是哪家公司 #
34200次浏览 244人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340947次浏览 2175人参与
# 哪些公司真双非友好? #
69692次浏览 289人参与
# 阿里笔试 #
178948次浏览 1317人参与
# 机械人避雷的岗位/公司 #
62708次浏览 393人参与
# 小马智行求职进展汇总 #
25139次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14852次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22211次浏览 284人参与
# 担心入职之后被发现很菜怎么办 #
291381次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26271次浏览 310人参与
# 应届生第一份工资要多少合适 #
20694次浏览 86人参与
# HR最不可信的一句话是__ #
6334次浏览 114人参与
# 沪漂/北漂你觉得哪个更苦? #
10019次浏览 194人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务