一般 Java 集成 Prometheus 监控指标有两种方式。一种是依赖中引入,另外一种是通过agent执行。

依赖引入

<!-- The client -->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.15.0</version>
</dependency>
<!-- Hotspot JVM metrics-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<version>0.15.0</version>
</dependency>
<!-- Exposition HTTPServer-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_httpserver</artifactId>
<version>0.15.0</version>
</dependency>
<!-- Pushgateway exposition-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_pushgateway</artifactId>
<version>0.15.0</version>
</dependency>

对于基于 Springboot 开发的 Java 框架,一定要引入micrometer-registry-prometheus这个依赖, Spring Boot使用 Micrometer ,一个应用 metrics 组件,将 actuator metrics 整合到外部监控系统中。

它支持很多种监控系统,比如Netflix Atalas, AWS Cloudwatch, Datadog, InfluxData, SignalFx, Graphite, Wavefront和Prometheus等。

这时只需要在 application 配置文件中添加如下端口配置,即可对外暴露 JVM 指标。

management:
health:
db:
enabled: false
server:
port: 8080
endpoint:
web:
exposure:
include: '*'
exclude: env
health:
show-details: always
shutdown:
enabled: false
metrics:
tags:
application: ${spring.application.name}

agent 方式执行

下载 Java JMX Jar https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.15.0/jmx_prometheus_javaagent-0.15.0.jar

并将下载的 .jar 文件放在类路径中,具体路径可以自己设计,比如打到镜像特定路径下,或者放到 tomcat 服务指定路径下。

为您的应用程序配置 Config.yaml 文件

将 Jar 作为 Java 代理运行

java $JAVA_OPTS -javaagent:./jmx_prometheus_javaagent-0.13.0.jar=8080:config.yaml -Xlog:gc=debug:file=gc.txt -DApp.config.file=application.properties -cp "orderauditservice.jar: *” org.springframework.boot.loader.JarLauncher

具体如何采集除 JVM 之外的指标,请参考:https://github.com/prometheus/client_java

现在可以通过http://localhost:8080/metrics访问指标

grafana可配置指标

使用 Prometheus 指标准备示例 Grafana 仪表盘,我们可以获取到已经抓取到的指标, springboot 提供了如下指标可用于grafana展示使用。

JVM

  • jvm.memory.max JVM最大内存
  • jvm.memory.committed JVM可用内存 是 展示并监控堆内存和Metaspace 重要
  • jvm.memory.used JVM已用内存 是 展示并监控堆内存和Metaspace 重要
  • jvm.buffer.memory.used JVM缓冲区已用内存
  • jvm.buffer.count 当前缓冲区数
  • jvm.threads.daemon JVM守护线程数 是 显示在监控页面
  • jvm.threads.live JVM当前活跃线程数 是 显示在监控页面;监控达到阈值时报警
  • jvm.threads.peak JVM峰值线程数 是 显示在监控页面
  • jvm.classes.loaded 加载classes数
  • jvm.classes.unloaded 未加载的classes数
  • jvm.gc.memory.allocated GC时,年轻代分配的内存空间
  • jvm.gc.memory.promoted GC时,老年代分配的内存空间
  • jvm.gc.max.data.size GC时,老年代的最大内存空间
  • jvm.gc.live.data.size FullGC时,老年代的内存空间
  • jvm.gc.pause GC耗时 是 显示在监控页面

TOMCAT

  • tomcat.sessions.created tomcat已创建session数
  • tomcat.sessions.expired tomcat已过期session数
  • tomcat.sessions.active.current tomcat活跃session数
  • tomcat.sessions.active.max tomcat最多活跃session数 是 显示在监控页面,超过阈值可报警或者进行动态扩容 重要
  • tomcat.sessions.alive.max.second tomcat最多活跃session数持续时间
  • tomcat.sessions.rejected 超过session最大配置后,拒绝的session个数 是 显示在监控页面,方便分析问题
  • tomcat.global.error 错误总数 是 显示在监控页面,方便分析问题
  • tomcat.global.sent 发送的字节数
  • tomcat.global.request.max request最长时间
  • tomcat.global.request 全局request次数和时间
  • tomcat.global.received 全局received次数和时间
  • tomcat.servlet.request servlet的请求次数和时间
  • tomcat.servlet.error servlet发生错误总数
  • tomcat.servlet.request.max servlet请求最长时间
  • tomcat.threads.busy tomcat繁忙线程 是 显示在监控页面,据此检查是否有线程夯住
  • tomcat.threads.current tomcat当前线程数(包括守护线程) 是 显示在监控页面 重要
  • tomcat.threads.config.max tomcat配置的线程最大数 是 显示在监控页面 重要
  • tomcat.cache.access tomcat读取缓存次数
  • tomcat.cache.hit tomcat缓存命中次数

CPU

  • system.cpu.count CPU数量
  • system.load.average.1m load average 是 超过阈值报警 重要
  • system.cpu.usage 系统CPU使用率
  • process.cpu.usage 当前进程CPU使用率 是 超过阈值报警
  • http.server.requests http请求调用情况 是 显示10个请求量最大,耗时最长的URL;统计非200的请求量 重要
  • process.uptime 应用已运行时间 是 显示在监控页面
  • process.files.max 允许最大句柄数 是 配合当前打开句柄数使用
  • process.start.time 应用启动时间点 是 显示在监控页面
  • process.files.open 当前打开句柄数 是 监控文件句柄使用率,超过阈值后报警 重要

在云原生中监控JVM指标的更多相关文章

  1. 如何优雅地使用云原生 Prometheus 监控集群

    作者陈凯烨,腾讯云前端开发工程师.负责 TKE 集群,弹性集群和云原生监控等模块控制台开发. 概述 Prometheus 是一套开源的系统监控报警框架.2016 年,Prometheus 正式加入 C ...

  2. 云原生应用 Kubernetes 监控与弹性实践

    前言 云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider.CRD C ...

  3. 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考

    理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年.2008 年左右,Hadoop 成 ...

  4. 重磅 | 腾讯云服务网格开源项目 Aeraki Mesh 加入 CNCF 云原生全景图

    作者 赵化冰,腾讯云工程师,Aeraki Mesh 创始人,Istio member,Envoy contributor,目前负责 Tencent Cloud Mesh 研发工作. 摘要 近日,腾讯云 ...

  5. 云原生 - Istio可观察性之监控(四)

    作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...

  6. 打造云原生大型分布式监控系统(四): Kvass+Thanos 监控超大规模容器集群

    概述 继上一篇 Thanos 部署与实践 发布半年多之后,随着技术的发展,本系列又迎来了一次更新.本文将介绍如何结合 Kvass 与 Thanos,来更好的实现大规模容器集群场景下的监控. 有 Tha ...

  7. Sentry(v20.12.1) K8S 云原生架构探索,1分钟上手 JavaScript 性能监控

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

  8. Longhorn,企业级云原生容器分布式存储 - 监控(Prometheus+AlertManager+Grafana)

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...

  9. Sentry(v20.12.1) K8S 云原生架构探索,JavaScript 性能监控之管理 Transactions

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

随机推荐

  1. 蒸腾量与蒸散量(ET)数据、潜在蒸散量、实际蒸散量数据、气温数据、降雨量数据

    ​   数据下载链接:数据下载链接 引言 多种卫星遥感数据反演地表蒸腾与蒸散率(ET)产品是地理遥感生态网推出的生态环境类数据产品之一,产品包括2000-2009年三个波段RGB数据,值域0-252之 ...

  2. ReentrantLock 公平锁源码 第0篇

    ReentrantLock 0 关于ReentrantLock的文章其实写过的,但当时写的感觉不是太好,就给删了,那为啥又要再写一遍呢 最近闲着没事想自己写个锁,然后整了几天出来后不是跑丢线程就是和没 ...

  3. Qt+ECharts开发笔记(二):Qt窗口动态调整大小,使ECharts跟随Qt窗口大小变换而变换大小

    前言   上一篇将ECharts嵌入Qt中,在开始ECharts使用之前,还有一个很重要的功能,就是在窗口变换大小的时候,ECharts的图表尺寸也要跟随Qt窗口变换大小而变换大小.   Demo演示 ...

  4. MISC 2022/4/21 刷题记录-千字文

    1.千字文 得到名为png的无类型文件,010 Editor查看,png,改后缀,得到二维码 QR扫描,得到一句话"这里只有二维码" 思路不对,binwalk一下,发现有错误信息 ...

  5. 4 zookeeper集群和基本命令

    4 zookeeper集群和基本命令 集群思路:先搞定一台服务器,再克隆出两台,形成集群! 1 安装zookeeper 我们的zookeeper是安装在/opt目录下 2 配置服务器编号 在/opt/ ...

  6. 事务_基本演示和事务_默认自动提交&手动提交

    事务的基本介绍 概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败 操作: 开启事务:start transaction; 回滚:rollback; 提交:co ...

  7. 针对新手 按照使用顺序和频率整理的git常用指令

    PS:以下内容中的所有 aaaaaa 均为可替换的自定义内容 git status 查看当前版本状态,判断有没有未提交的变动 git add . 添加到暂存区(注意有个点)git commit -m ...

  8. 【转载】一封面向社会,关于对近日来 CCF 不当行为之抗议的公开信

    原文链接:https://101001011.github.io/2022/06/11/zhi-ccf-de-yi-feng-gong-kai-xin/ 原文作者:CCA(CCA's Blog) 前天 ...

  9. 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

    摘要:本篇文章结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现. 本文分享自华为云社区<[Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽 ...

  10. 基于Anacoda搭建虚拟环境cudnn6.0+cuda8.0+python3.6+tensorflow-gpu1.4.0

    !一定要查准cudnn,cuda,tensorflow-gpu对应的版本号再进行安装,且本文一切安装均在虚拟环境中完成. 下文以笔者自己电脑为例,展开安装教程阐述(省略anaconda安装教程): 1 ...