springboot 整合 actuator监控详情

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等

pom文件中添加

<!-- actuator start-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>${springboot.version}</version>
</dependency>
<!-- actuator end-->

yaml文件
监控端口必须单独配置,否则请求不到

server:port: 8091
#必须配置,否则端点默认禁用
management:endpoints:web:# 路径配置# base-path: /manage 修改默认的actuator/* exposure:include: "*"# “*”号代表启用所有的监控端点,可以单独启用,例如,health,info,metrics等# exclude: beans  #关闭部分监控点server:port: 8091endpoint:health:show-details: always

启动项目,请求接口:http:/localhost:8092/actuator 返回的是可以查看的所有接口

health接口
如果项目中同步引用了oracle和redis,请求接口/health 时会带出状态,但信息不是很详细

{"status":"UP","components":{"db":{"status":"UP","details":{"database":"Oracle","validationQuery":"isValid()"}},"diskSpace":{"status":"UP","details":{"total":427390136320,"free":412959125504,"threshold":10485760,"exists":true}},"ping":{"status":"UP"},"redis":{"status":"UP","details":{"version":"5.0.5"}}}
}

如果想关闭特定的检查指标

management:health:redise:enabled: false

info接口
就是在配置文件中以info开头的配置信息比如

info:app:name:spring-boot-actuatorversion: 1.0.0test: test

调用接口展示如下

{"app": {"name": "spring-boot-actuator","version": "1.0.0","test":"test"}
}

beans
展示了 bean 的别名、类型、是否单例、类的地址、依赖等信息。
conditions
可以在应用运行时查看代码了某个配置在什么条件下生效,或者某个自动配置为什么没有生效。

heapdump
访问actuator/heapdump 会自动生成一个jvm的堆文件heapdump 可以用jdk自带的jvm监控工具visualVM打开查看
shutdown
接口关闭springboot服务,需要配置文件开启

management:endpoint:shutdown:enabled: true

只支持post接口

curl -X POST "http://localhost:8080/actuator/shutdown" 
{"message": "stop"
}

mappings
展示全部的uri路径,和控制器的关系
在项目统计的时候还是蛮有用的

{"contexts":{"application":{"mappings":{"dispatcherServlets":{"dispatcherServlet":[{"handler":"example.controller.TestController#get(String)","predicate":"{GET /test/get}","details":{"handlerMethod":{"className":"example.controller.TestController","name":"get","descriptor":"(Ljava/lang/String;)Ljava/lang/Object;"},"requestMappingConditions":{"consumes":[],"headers":[],"methods":["GET"],"params":[],"patterns":["/test/get"],"produces":[]}}},{"handler":"ResourceHttpRequestHandler [\"classpath:/META-INF/resources/webjars/\"]","predicate":"/webjars/**","details":null},{"handler":"ResourceHttpRequestHandler [\"classpath:/META-INF/resources/\", \"classpath:/resources/\", \"classpath:/static/\", \"classpath:/public/\", \"/\"]","predicate":"/**","details":null}]},"servletFilters":[{"servletNameMappings":[],"urlPatternMappings":["/*"],"name":"webMvcMetricsFilter","className":"org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter"}],"servlets":[{"mappings":[],"name":"default","className":"org.apache.catalina.servlets.DefaultServlet"}]},"parentId":null}}
}

threaddump接口
会产生当前线程活动的快照,主要展示线程名称、线程id、线程状态等
示例如下

{"threads":[{"threadName":"boundedElastic-evictor-1","threadId":109,"blockedTime":-1,"blockedCount":0,"waitedTime":-1,"waitedCount":24,"lockName":"java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@20ab793d","lockOwnerId":-1,"lockOwnerName":null,"inNative":false,"suspended":false,"threadState":"TIMED_WAITING","stackTrace":[{"methodName":"take","fileName":"ScheduledThreadPoolExecutor.java","lineNumber":809,"className":"java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue","nativeMethod":false}]}]
}

loggers接口
可以查看当前应用的日志级别等信息

metrics接口

任一方问一个可以获得对应的指标
http://localhost:8092/actuator/metrics/jvm.buffer.memory.used

{"name":"jvm.buffer.memory.used","description":"An estimate of the memory that the Java virtual machine is using for this buffer pool","baseUnit":"bytes","measurements":[{"statistic":"VALUE","value":65537}],"availableTags":[{"tag":"id","values":["direct","mapped"]}]
}

序号 参数 参数说明 是否监控 监控手段 重要度
JVM

1 jvm.memory.max JVM 最大内存
2 jvm.memory.committed JVM 可用内存 是 展示并监控堆内存和 Metaspace 重要
3 jvm.memory.used JVM 已用内存 是 展示并监控堆内存和 Metaspace 重要
4 jvm.buffer.memory.used JVM 缓冲区已用内存
5 jvm.buffer.count 当前缓冲区数
6 jvm.threads.daemon JVM 守护线程数 是 显示在监控页面
7 jvm.threads.live JVM 当前活跃线程数 是 显示在监控页面;监控达到阈值时报警 重要
8 jvm.threads.peak JVM 峰值线程数 是 显示在监控页面
9 jvm.classes.loaded 加载 classes 数
10 jvm.classes.unloaded 未加载的 classes 数
11 jvm.gc.memory.allocated GC 时,年轻代分配的内存空间
12 jvm.gc.memory.promoted GC 时,老年代分配的内存空间
13 jvm.gc.max.data.size GC 时,老年代的最大内存空间
14 jvm.gc.live.data.size FullGC 时,老年代的内存空间
15 jvm.gc.pause GC 耗时 是 显示在监控页面
TOMCAT
16 tomcat.sessions.created tomcat 已创建 session 数
17 tomcat.sessions.expired tomcat 已过期 session 数
18 tomcat.sessions.active.current tomcat 活跃 session 数
19 tomcat.sessions.active.max tomcat 最多活跃 session 数 是 显示在监控页面,超过阈值可报警或者进行动态扩容 重要
20 tomcat.sessions.alive.max.second tomcat 最多活跃 session 数持续时间
21 tomcat.sessions.rejected 超过 session 最大配置后,拒绝的 session 个数 是 显示在监控页面,方便分析问题
22 tomcat.global.error 错误总数 是 显示在监控页面,方便分析问题
23 tomcat.global.sent 发送的字节数
24 tomcat.global.request.max request 最长时间
25 tomcat.global.request 全局 request 次数和时间
26 tomcat.global.received 全局 received 次数和时间
27 tomcat.servlet.request servlet 的请求次数和时间
28 tomcat.servlet.error servlet 发生错误总数
29 tomcat.servlet.request.max servlet 请求最长时间
30 tomcat.threads.busy tomcat 繁忙线程 是 显示在监控页面,据此检查是否有线程夯住
31 tomcat.threads.current tomcat 当前线程数(包括守护线程) 是 显示在监控页面 重要
32 tomcat.threads.config.max tomcat 配置的线程最大数 是 显示在监控页面 重要
33 tomcat.cache.access tomcat 读取缓存次数
34 tomcat.cache.hit tomcat 缓存命中次数
CPU
35 system.cpu.count CPU 数量
36 system.load.average.1m load average 是 超过阈值报警 重要
37 system.cpu.usage 系统 CPU 使用率
38 process.cpu.usage 当前进程 CPU 使用率 是 超过阈值报警
39 http.server.requests http 请求调用情况 是 显示 10 个请求量最大,耗时最长的 URL;统计非 200 的请求量 重要
40 process.uptime 应用已运行时间 是 显示在监控页面
41 process.files.max 允许最大句柄数 是 配合当前打开句柄数使用
42 process.start.time 应用启动时间点 是 显示在监控页面
43 process.files.open 当前打开句柄数 是 监控文件句柄使用率,超过阈值后报警 重要

监控页面

<dependency><groupId>cn.pomit</groupId><artifactId>spring-boot-monitor</artifactId><version>0.0.1</version>
</dependency>

启动后访问
http://localhost:8091/monitor

只有一个应用点进去

参考文章:
https://www.pomit.cn/SpringBootMonitor/#/
https://blog.csdn.net/yunfeather/article/details/122581536

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Grind75第9天 | 733.图像渲染、542.01矩阵、1235.规划兼职工作

733.图像渲染 题目链接&#xff1a;https://leetcode.com/problems/flood-fill 解法&#xff1a; 可以用深度优先搜索和广度优先搜索。 深度优先搜索。每次搜索到一个方格时&#xff0c;如果其与初始位置的方格颜色相同&#xff0c;就将该方格的染色&#xff0c;然后继续对…

CMake Error at CMakeLists.txt:14 (project): The CMAKE_CXX_COMPILER:

报错 CMake Error at CMakeLists.txt:14 (project):The CMAKE_CXX_COMPILER:arm-none-eabi-g 解决办法1 Arm GNU Toolchain Downloads – Arm Developer x86_64 linux上&#xff1a; x86_64 Linux hosted cross toolchains AArch32 bare-metal target (arm-none-eabi)arm-g…

Qt构建MSVC2015环境过程

Qt构建MSVC2015环境过程 前言 之前用的Qt都是基于默认的MinGW编译器&#xff0c;由于目前工作的QT界面主要是跑在X86上&#xff0c;所以记录一下Qt配置MSVC2015的配置过程。根据查阅了解以后&#xff0c;个人理解的MinGW跟MSVC的区别在于前者主要是用于跨平台程序构建&#x…

代码随想录算法训练营第八天|344.反转字符串 ,541. 反转字符串II ,151.翻转字符串里的单词,55.右旋转字符串

刷题建议 刷题建议与debug 代码随想录目前基本都有了视频讲解&#xff0c;一定要先看视频&#xff0c;事半功倍。写博客&#xff0c;将自己的感悟沉淀下来&#xff0c;不然会忘大家提问的时候&#xff0c;记得要把问题描述清楚&#xff0c;自己在哪一步遇到了问题&#xff0c…

Redis命令 - Hashes命令组常用命令

1、HSET key field value 设置 key 指定的哈希集中指定字段的值。 HSET key field value 返回值&#xff1a;1代表field是一个新的字段。0代表field已存在 如果 key 指定的哈希集不存在&#xff0c;会创建一个新的哈希集并与 key 关联。如果字段在哈希集中存在&#xff0c;它将…

软件需求分析报告—word

技术要求 1.1接口要求 1.2可靠性&#xff0c;稳定性&#xff0c;安全性&#xff0c;先进性&#xff0c;拓展性&#xff0c;性能&#xff0c;响应。 2.系统安全需求 2.1物理设计安全 2.2系统安全设计 2.3网络安全设计 2.4应用安全设计 2.5用户安全管理 进主页获取更多资料

靶场实战(15):OSCP备考之VulnHub STAPLER

打靶思路 资产发现 主机发现服务发现漏洞发现&#xff08;获取权限&#xff09; 21端口/FTP服务 组件漏洞口令漏洞139端口/SMB服务 组件漏洞口令漏洞666端口/doom服务 组件漏洞其它漏洞80端口/HTTP服务 组件漏洞URL漏洞12380端口/HTTP服务 组件漏洞URL漏洞12380端口/HTTPS服务 …

watch监听一个对象中的属性 - Vue篇

vue中提供了watch方法&#xff0c;可以监听data内的某些数据的变动&#xff0c;触发相应的方法。 1.监听一个对象 <script>export default {data() {return {obj: {name: ,code: ,timePicker:[]}}},watch: {obj: {handler(newVal, oldVal) {//todo},immediate: true,deep…

idea常用快捷键 生成注释 生成方法 实现类方法

单行注释 ctrl/ 再次输入取消注释 多行注释 ctrlshift/ 再次输入取消注释 文档注释 输入 /** 加enter 生成方法 altenter 生成实现类方法 ctrlo 全局查找 ctrlshiftR 查看方法 ctrl左键 选中方法 查看实现类 altenter go to implementation 或 ctrlaltB

gitee创建远程仓库并克隆远程仓库到电脑

1、首先点加号新建一个仓库 2、输入仓库名&#xff0c;路径会自动填充&#xff0c;填写简单的仓库介绍&#xff0c;先选择私有&#xff0c;在仓库创建之后&#xff0c;可以改为开源 3、打开建好的仓库 4、复制仓库链接 5、打开一个文件夹(想要存储远程仓库的地址)&#xff0c;在…

创建大模型的新方法 - 配比两个模型

原文&#xff1a;创建大模型的新方法 - 配比两个模型 - 知乎 现在&#xff0c;创建大模型的新方法还可以使用配比两个模型- 正如炼金术巫师那样。 工具1 medusa&#xff1a;https://github.com/FasterDecoding/Medusa Medusa 为 LLM 添加了额外的“头”&#xff0c;以同时预测…

C# 图解教程 第5版 —— 第24章 预处理指令

文章目录 24.1 什么是预处理指令24.2 基本规则24.3 符号指令&#xff08;#define、#undef &#xff09;24.4 条件编译&#xff08;#if、#else、#elif、#endif&#xff09;24.5 条件编译结构24.6 诊断指令&#xff08;#warning、#error&#xff09;24.7 行号指令&#xff08;#li…

Web后端开发

一、Maven 1.1 简介 1.2 作用 1.3 流程 通过各种插件实现项目的标准化构建。 1.4 安装 1.5 配置环境 1.5.1 当前工程环境 1.5.2 全局环境 1.6 创建 Maven项目 1.7 导入项目 1.8 依赖管理 1.8.1 依赖配置 1.8.2 依赖传递 pom.xml——右键——Diagrams——show dependen…

隧道应用1-netsh端口映射内网

测试环境信息 物理机内网 IP &#xff1a;192.168.249.1 win7 虚拟机 IP &#xff1a; 192.168.249.131 win10 虚拟机 IP &#xff1a;192.168.249.129 我们在 win7 上配置 netsh 端口映射&#xff0c;将 win7 作为跳板机&#xff0c;进而访问到 win10 的服务。 端口映射与…

flutter 打包IOS及常用配置

修改APP名称 项目名字配置是在 ios/Runner/Info.plist 文件中的 dict 下的 CFBundleName testapp 。如下图所示: String里面就可以修改名称 修改项目 &#xff08;testapp&#xff09;的 Logo 图标 iOS 项目 Logo的配置是在 ios/Runner/Assets.xcassets/AppIcon.appiconset 文…

第24集《佛法修学概要》

庚三、不邪淫戒 辛一、解释名义 分五&#xff1a;辛一、解释名义&#xff1b;辛二、具缘成犯&#xff1b;辛三、犯戒轻重&#xff1b;辛四、开缘情况&#xff1b;辛五、持犯得失 请大家打开讲义第六十八页&#xff0c;我们讲到庚三不邪淫戒。这条戒是五戒的第三条。 辛一、解…

Golang 文件操作

读取 一次性读取data, err := os.ReadFile("filename.txt") if err != nil {log.Fatal(err) } fmt.Println(string(data))按行读取方式1:bufio.NewScanner file, err := os.Open("filename.txt") if err != nil {panic(err) } defer file.Close()scanner…

TypeScript泛型的高级用法:第三部分

泛型在开发第三方库时非常有用 在本文中&#xff0c;我将介绍如何使用TypeScript泛型来声明一个 defineStore 函数(类似于Pinia库中的 defineStore 函数)来完成以下挑战。在挑战中&#xff0c;我还会介绍一些非常有用的TypeScript知识。掌握了以后&#xff0c;应该会对你的工作…

用 AI 生成 Vue 组件?

大家好我是奇兵&#xff0c;三个月前&#xff0c;Vercel 推出了其 AI 代码生成工具 —— v0&#xff08;v0.dev&#xff09;&#xff0c;这款工具可以快速生成前端组件代码&#xff0c;引起了前端圈的广泛关注。通过简单的描述&#xff0c;v0能够快速生成前端页面&#xff0c;让…

拥抱Guava之集合操作

深入Guava集合操作 在Java开发中&#xff0c;Google Guava库是处理集合的强大工具。起源于Google内部需求&#xff0c;Guava以简洁性、性能优化为理念&#xff0c;提供高效不可变集合和实用工具类。本文深入剖析Guava的核心功能&#xff0c;为开发者呈现集合操作的全新视角&am…