一般 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 当前打开句柄数 是 监控文件句柄使用率,超过阈值后报警 重要

最新文章

  1. 利用 crontab 來做 Linux 固定排程
  2. webstorm--破解
  3. 解决Web部署 svg/woff/woff2字体 404错误
  4. 《深入理解bootstrap》读书笔记:第4章 CSS组件(上)
  5. Jmeter 函数
  6. android消息处理机制之2handler与looper,MessageQueue:的关系
  7. RESideMenu左右半侧滑的功能实现,主视图会和状态栏(StatusBar)不会随着一起滑动
  8. 数学 ACdream 1196 KIDx&#39;s Triangle
  9. C# 截取图片区域,并返回所截取的图片
  10. Tiny6410之MMU开启
  11. Docker进阶之五:容器管理
  12. 2-08. 用扑克牌计算24点(25) (ZJU_PAT 数学 枚举)
  13. T-SQL:CTE用法(十)
  14. 【论文笔记】使用SPSS 进行 T Test (T检验)
  15. timestamp 字段
  16. Alias自定义命令
  17. Hibernate中常见问题 No row with the given identifier exists问题
  18. asp.net 练习 js 调用webservice
  19. String.valueof;和String = &quot;&quot;+1;的区别
  20. DBA操作常用命令

热门文章

  1. Deep Learning-深度学习(一)
  2. ERROR .web.servlet.DispatcherServlet - Context initialization failed
  3. identity server4 授权成功页面跳转时遇到错误:Exception: Correlation failed. Unknown location的解决方法
  4. 算法竞赛进阶指南0x35高斯消元与线性空间
  5. 在Linux虚拟机中添加多个固定ip地址
  6. .net6与英雄联盟邂逅之——根据官方LCU API制作游戏助手
  7. gitlab+jenkins自动构建jar包并发布
  8. python 上下文管理(with、contextmanager)
  9. Docker Php + mysql + nginx
  10. Radmin自动登录器 v3.0