SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!

请添加图片描述

各个指标信息的详细描述:

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

| — | — | — | — | — | — |

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

如果要查看具体的度量信息的话,直接在访问地址后面加上度量信息即可:

http://localhost:8080/actuator/metrics/jvm.buffer.memory.used

请添加图片描述

添加自定义的统计指标

除了使用metrics端点默认的这些统计指标外,我们还可以实现自定义统计指标,metrics提供了4中基本的度量类型:

  • gauge 计量器,最简单的度量类型,只有一个简单的返回值,他用来记录一些对象或者事物的瞬时值。

  • Counter 计数器 简单理解就是一种只增不减的计数器,它通常用于记录服务的请求数量,完成的任务数量,错误的发生数量

  • Timer 计时器 可以同时测量一个特定的代码逻辑块的调用(执行)速度和它的时间分布。简单来说,就是在调用结束的时间点记录整个调用块执行的总时间,适用于测量短时间执行的事件的耗时分布,例如消息队列消息的消费速率。

  • Summary 摘要)用于跟踪事件的分布。它类似于一个计时器,但更一般的情况是,它的大小并不一定是一段时间的测量值。在 micrometer 中,对应的类是 DistributionSummary,它的用法有点像 Timer,但是记录的值是需要直接指定,而不是通过测量一个任务的执行时间。

测试:

@RestController

public class UserController {

static final Counter userCounter = Metrics.counter(“user.counter.total”,“services”,“bobo”);

private Timer timer = Metrics.timer(“user.test.timer”,“timer”,“timersample”);

private DistributionSummary summary = Metrics.summary(“user.test.summary”,“summary”,“summarysample”);

@GetMapping(“/hello”)

public String hello(){

// Gauge

Metrics.gauge(“user.test.gauge”,8);

// Counter

userCounter.increment(1);

// timer

timer.record(()->{

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

});

summary.record(2);

summary.record(3);

summary.record(4);

return “Hello”;

}

}

访问 http://localhost:8080/hello 这个请求后在看 metrics 信息

请添加图片描述

多出了我们自定义的度量信息。

3.3 loggers

loggers是用来查看当前项目每个包的日志级别的。

请添加图片描述

默认的是info级别。

修改日志级别:

发送POST请求到 http://localhost:8080/actuator/loggers/[包路径]

请求参数为

{

“configuredLevel”:“DEBUG”

}

通过POSTMAN来发送消息

请添加图片描述

然后再查看日志级别发现已经变动了

请添加图片描述

控制台也可以看到

请添加图片描述

3.4 info

显示任意的应用信息。我们可以在 properties 中来定义

请添加图片描述

访问:http://localhost:8080/actuator/info

请添加图片描述

4.自定义Endpoint


如果我们需要扩展Endpoint,这时我们可以自定义实现,我们可以在类的头部定义如下的注解

@Endpoint

@WebEndpoint

@ControllerEndpoint

@RestControllerEndpoint

@ServletEndpoint

再给方法添加@ReadOperation,@ WritOperation或@DeleteOperation注释后,该方法将通过JMX自动公开,并且在Web应用程序中也通过HTTP公开。

于方法的注解有以下三种,分别对应get post delete 请求

| Operation | HTTP method |

| — | — |

| @ReadOperation | GET |

| @WriteOperation | POST |

| @DeleteOperation | DELETE |

案例:

/**

  • 自定义Endpoint

*/

@Component

@Endpoint(id = “sessions”)

public class MyHealthEndPoint {

/**

  • @Selector 获取传递的参数

*/

@ReadOperation

public Info get(@Selector String name){

return new Info(name,“18”);

}

}

请添加图片描述

5.Actuator的两种监控形态


  • http

  • jmx [Java Management Extensions] Java管理扩展

放开jmx

放开 jmx 的 endpoint

management.endpoints.jmx.exposure.include=*

spring.jmx.enabled=true

通过jdk中提供的jconsole来查看

请添加图片描述

请添加图片描述

6.监控系统


SpringBoot可以收集监控数据,但是查看不是很方便,这时我们可以选择开源的监控系统来解决,比如Prometheus

  • 数据采集

  • 数据存储

  • 可视化

Prometheus在可视化方面效果不是很好,可以使用grafana来实现

6.1 Prometheus

先来安装Prometheus:官网:https://prometheus.io/download/ 然后通过wget命令来直接下载

wget https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz

请添加图片描述

然后配置Prometheus。

请添加图片描述

  • job_name: ‘Prometheus’

static_configs:

metrics_path: ‘/actuator/prometheus’

scrape_interval: 5s

  • targets: [‘192.168.127.1:8080’]

labels:

instance: Prometheus

  • job_name:任务名称

  • metrics_path: 指标路径

  • targets:实例地址/项目地址,可配置多个

  • scrape_interval: 多久采集一次

  • scrape_timeout: 采集超时时间

执行脚本启动应用

./prometheus --config.file=prometheus.yml

请添加图片描述

访问应用: http://ip:9090

请添加图片描述

然后在我们的SpringBoot服务中添加 Prometheus的端点,先添加必要的依赖

io.micrometer

micrometer-registry-prometheus

然后就会有该端点信息

请添加图片描述

Prometheus服务器可以周期性的爬取这个endpoint来获取metrics数据,然后可以看到

请添加图片描述

6.2 Grafana

可视化工具:https://grafana.com/grafana/download

通过wget命令下载

wget https://dl.grafana.com/oss/release/grafana-8.0.6-1.x86_64.rpm

sudo yum install grafana-8.0.6-1.x86_64.rpm

启动命令

sudo service grafana-server start

sudo service grafana-server status

访问的地址是 http://ip:3000 默认的帐号密码 admin/admin

请添加图片描述

登录进来后的页面

请添加图片描述

添加数据源:

请添加图片描述

请添加图片描述

添加Dashboards https://grafana.com/grafana/dashboards 搜索SpringBoot的 Dashboards

请添加图片描述

找到Dashboards的ID

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
g" alt=“img” style=“zoom: 33%;” />

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

[外链图片转存中…(img-AOhGT7mU-1713411012126)]

[外链图片转存中…(img-wEIW17Eo-1713411012126)]

[外链图片转存中…(img-gtcM2WIa-1713411012126)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值