Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Boot Admin的使用

Spring Boot Admin的使用

作者头像
阿杜
发布于 2018-08-06 06:13:55
发布于 2018-08-06 06:13:55
1.9K00
代码可运行
举报
文章被收录于专栏:阿杜的世界阿杜的世界
运行总次数:0
代码可运行

上一篇文章中了解了Spring Boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量、当前应用的并发数、延迟以及其他度量信息。这次我们了解如何利用Spring-boot-admin对应用信息进行可视化,如何添加度量信息。

准备

spring-boot-admin的Github地址在:https://github.com/codecentric/spring-boot-admin,它在Spring Boot Actuator的基础上提供简洁的可视化WEB UI

  1. 首先在start.spring.io中创建简单的admin应用,主要步骤如下:
  2. Group: org.sample.admin
  3. Artifact: spring-boot-admin-web
  4. Name: Spring Boot Admin Web
  5. Description: Spring Boot Admin Web Application
  6. Package Name: org.sample.admin
  7. **Type: ** Maven Project
  8. Packaging: Jar
  9. Java Version: 1.8
  10. Language: Java
  11. Spring Boot Version: 1.3.1
  12. Ops组选项中选择Actuator
  13. 选择Generate Project下载应用
  14. 使用IDEA打开工程,在pom.xml文件中添加下列依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
   <groupId>de.codecentric</groupId>
   <artifactId>spring-boot-admin-server</artifactId>
   <version>1.3.2</version>
</dependency>
<dependency>
   <groupId>de.codecentric</groupId>
   <artifactId>spring-boot-admin-server-ui</artifactId>
   <version>1.3.2</version>
</dependency>
  1. SpringBootAdminWebApplication.java文件中添加@EnableAdminServer注解
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@EnableAdminServer
public class SpringBootAdminWebApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminWebApplication.class, args);
    }
}
  1. 在application.properties文件中添加如下配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server.port = 8090
spring.application.name=Spring Boot Admin Web
spring.boot.admin.url=http://localhost:${server.port}
spring.jackson.serialization.indent_output=true
endpoints.health.sensitive=false
  1. 启动应用程序,在后台给定如下提示:

spring-boot-admin应用启动日志

  1. 在浏览器中访问上图中提示的地址,可以看到下图的信息

spring-boot-admin应用

How Do

  1. 启动Admin Web应用后,现在可以添加针对BookPub应用的度量信息了。在文章Spring Boot应用的健康监控中,我们曾定制自己的Health Indicator,用来监控四个数据库接口的健康状态,这次我将利用spring-boot-admin对这些信息进行可视化管理。
  2. 在db-count-starter模块下添加代码,首先在db-count-starter/src/main/java/com/test/bookpubstarter/dbcount目录下添加DbCountMetrics类:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class DbCountMetrics implements PublicMetrics {
    private Collection<CrudRepository> repositories;
    public DbCountMetrics(Collection<CrudRepository> repositories) {
        this.repositories = repositories;
    }
    @Override
    public Collection<Metric<?>> metrics() {
        List<Metric<?>> metrics = new LinkedList<>();
        for (CrudRepository repository: repositories) {
            String name =
 DbCountRunner.getRepositoryName(repository.getClass());
            String metricName = "counter.datasource." + name;
            metrics.add(new Metric(metricName, repository.count()));
        }
        return metrics;
    }
}
  1. DbCountAutoConfiguration定义对应的Bean,由Spring Boot完成自动注册
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean
public PublicMetrics dbCountMetrics(Collection<CrudRepository> repositories) {
    return new DbCountMetrics(repositories);
}
  1. 启动BookPub应用,访问http://localhost:8080/metrics,可以看到DbCountMetrics已经添加到metrics列表中了。

新添加的DbCountMetrics

  1. 在db-count-starter模块下的pom文件中添加spring-boot-admin-starter-client依赖,
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>1.3.2</version>
</dependency>
  1. 在BookPub应用下的application.properties中配置下列属性值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring.application.name=@project.description@
server.port=8080
spring.boot.admin.url=http://localhost:8090
  1. 启动BookPub应用,然后在浏览器中访问http://localhost:8090

监控BookPub应用

  1. 点击右侧的“Details”,可以看到该应用的详细信息

BookPub应用的详细信息

分析

Spring Boot Admin就是将Spring Boot Actuator中提供的endpoint信息可视化表示,在BookPub应用(被监控)的这一端,只需要进行一点配置即可。

  • spring-boot-admin-starter-client,作为客户端,用于与Spring Boot Admin Web的服务器沟通;
  • spring.boot.admin.url=http:localhost:8090用于将当前应用注册到Spring Boot Admin。

如果希望通过Web控制系统的日志级别,则需要在应用中添加Jolokia JMX库(org.jolokia:jolokia-core),同时在项目资源目录下添加logback.xml文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <jmxConfigurator/>
</configuration>

然后再次启动BookPub应用,然后在Spring Boot Admin的页面中查看LOGGING,则可以看到如下页面:

通过Spring Boot Admin修改日志级别

Spring Boot提供的度量工具功能强大且具备良好的扩展性,除了我们配置的DbCountMetrics,还监控BookPub应用的其他信息,例如内存消耗、线程数量、系统时间以及http会话数量。

gague和counter的定制

gague和counter度量通过GagueServiceCountService实例提供,这些实例可以导入到任何Spring管理的对象中,用于度量应用信息。例如,我们可以统计某个方法的调用次数,如果要统计所有RESTful接口的调用次数,则可以通过AOP实现,在调用指定的接口之前,首先调用counterService.increment("objectName.methodName.invoked");,某个方法被调用之后,则对它的统计值+1。具体的实验步骤如下:

  1. 在pom文件中添加AOP依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  1. 在BookPub应用中添加Aspect组件,表示在每个Controller的方法调用之前,首先增加调用次数。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Aspect
@Component
public class ServiceMonitor {
    @Autowired
    private CounterService counterService;
    @Before("execution(* com.test.bookpub.controller.*.*(..))")
    public void countServiceInvoke(JoinPoint joinPoint) {
        counterService.increment(joinPoint.getSignature() + "");
    }
}
  1. 在application.properties中设置打开AOP功能:spring.aop.auto=true 然后启动BookPub应用,通过浏览器访问http://localhost:8080/books/9876-5432-1111,然后再去Spring Boot Admin后台查看对应信息,发现该方法的调用次数已经被统计好了

统计接口的调用次数

如果希望统计每个接口的调用时长,则需要借助GagueService来实现,同样使用AOP实现,则需要环绕通知:在接口调用之前,利用long start = System.currentTimeMillis();,在接口调用之后,计算耗费的时间,单位是ms,然后使用gugeService.submit(latency)更新该接口的调用延时。

  1. ServiceMonitor类中添加对应的监控代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Autowired
private GaugeService gaugeService;
@Around("execution(* com.test.bookpub.controller.*.*(..))")
public void latencyService(ProceedingJoinPoint pjp) throws Throwable {
    long start = System.currentTimeMillis();
    pjp.proceed();
    long end = System.currentTimeMillis();
    gaugeService.submit(pjp.getSignature().toString(), end - start);
}
  1. 然后在Spring Boot Admin后台可以看到对应接口的调用延迟

统计接口的调用延时

这两个service可以应付大多数应用需求,如果需要监控其他的度量信息,则可以定制我们自己的Metrics,例如在之前的例子中我们要统计四个数据库接口的调用状态,则我们定义了DbCountMetrics,该类实现了PublishMetrics,在这个类中我们统计每个数据库接口的记录数量。

PublishMetrics这个接口只有一个方法:Collection<Metric<?>> metrics();,在该方法中定义具体的监控信息;该接口的实现类需要在配置文件中通过@Bean注解,让Spring Boot在启动过程中初始化,并自动注册到MetricsEndpoint处理器中,这样每次有访问/metrics的请求到来时,就会执行对应的metrics方法。

参考资料

  1. Chapter 6. 使用Spring进行面向切面编程(AOP)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015.12.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【图像分类】Vision Transformer理论解读+实践测试
Vision Transformer是2021年谷歌在ICLR上提出的算法,算法原理并不复杂,但是其价值是开创性的。它首次将NLP领域火热的Transformer模型架构移植到了CV领域,打破了这两个领域壁垒,并取得不错的成效。
zstar
2022/09/20
3K0
【图像分类】Vision Transformer理论解读+实践测试
带掩码的自编码器MAE详解和Pytorch代码实现
监督学习是训练机器学习模型的传统方法,它在训练时每一个观察到的数据都需要有标注好的标签。如果我们有一种训练机器学习模型的方法不需要收集标签,会怎么样?如果我们从收集的相同数据中提取标签呢?这种类型的学
deephub
2021/12/15
3.8K0
带掩码的自编码器MAE详解和Pytorch代码实现
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
本文证明了蒙面自动编码器(MAE)是一种可扩展的计算机视觉自监督学习器。我们的MAE方法很简单:我们屏蔽输入图像的随机补丁并重建丢失的像素。
机器学习炼丹术
2021/12/06
1.3K0
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
一文了解视觉Transformer解析 !!
自2017年“注意力就是一切”的理念问世以来,Transformer模型便迅速再自然语言处理(NLP)领域展露头角,确立了其领先地位。到了2021年,“一张图片等于16x16个单词”的理念成功将Transformer模型引入计算机视觉任务中。自此以后,众多基于Transformer的架构纷纷涌现,应用于计算机视觉领域。
JOYCE_Leo16
2025/02/02
4361
一文了解视觉Transformer解析 !!
解析 Token to Token Vision Transformer
Vision Transformer!的提出让我们看到了Transformer模型在图像方向的潜力,但其有一些缺点,如需要超大型数据集(JFT)预训练,才能达到现在CNN的精度。本文分析了ViT的一些不合理之处:
BBuf
2021/03/11
7.7K0
【固本强基】Vision Transformers的注意力层概念解释和代码实现
“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理和神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。
马上科普尚尚
2024/03/11
4910
【固本强基】Vision Transformers的注意力层概念解释和代码实现
【YOLOv8】YOLOv8改进系列(8)----替换主干网络之Swin Transformer
论文介绍了一种新的视觉Transformer模型——Swin Transformer,它旨在成为计算机视觉领域的通用骨干网络。Swin Transformer通过其独特的层次化结构和移位窗口(Shifted Windows)机制,解决了传统Transformer在视觉任务中的计算复杂度问题,并在图像分类、目标检测和语义分割等多个任务中取得了优异的性能。
HABuo
2025/03/19
3210
【YOLOv8】YOLOv8改进系列(8)----替换主干网络之Swin Transformer
VIT Vision Transformer | 先从PyTorch代码了解
【前言】:看代码的时候,也许会不理解VIT中各种组件的含义,但是这个文章的目的是了解其实现。在之后看论文的时候,可以做到心中有数,而不是一片茫然。
机器学习炼丹术
2021/03/04
2.3K0
图像恢复SwinIR: Image Restoration Using Swin Transformer
在图像超分辨率、图像去噪、压缩等图像修复(Image restoration)任务中,卷积神经网络目前仍然是主流。但是卷积神经网络有以下两个缺点:
JOYCE_Leo16
2024/03/19
1.4K0
图像恢复SwinIR: Image Restoration Using Swin Transformer
CvT: 如何将卷积的优势融入Transformer
与之前BoTNet不同,CvT虽然题目中有卷积的字样,但是实际总体来说依然是以Transformer Block为主的,在Token的处理方面引入了卷积,从而为模型带来的局部性。最终CvT最高拿下了87.7%的Top1准确率。
BBuf
2022/01/27
9570
CvT: 如何将卷积的优势融入Transformer
MoA-Transformer | Swin-Transformer应该如何更好地引入全局信息?
基于Transformer的体系结构在自然语言处理(NLP)领域取得了巨大的成功。受Transformer在语言领域的巨大成功的启发,Vision Transformer被提出,并在ImageNet数据集上取得了优秀的性能。Vision Transformer就像NLP中的word token一样,将图像分割成patches并输入Transformer之中,并通过Transformer的几个multi-head self-attention层来建立远程依赖关系。
集智书童公众号
2022/02/11
9830
MoA-Transformer | Swin-Transformer应该如何更好地引入全局信息?
图解swin transformer
针对上述两个问题,我们提出了一种包含滑窗操作,具有层级设计的Swin Transformer。
BBuf
2021/04/30
5.5K1
Vision Transformer(ViT)
Transformer[1]是Google在2017年提出的一种Seq2Seq结构的语言模型,在Transformer中首次使用Self-Atttention机制完全代替了基于RNN的模型结构,使得模型可以并行化训练,同时解决了在基于RNN模型中出现了长距离依赖问题,因为在Self-Attention中能够对全局的信息建模。
felixzhao
2023/02/26
1.4K0
金字塔ViT | 华为提出使用金字塔结构改进Transformer,涨点明显(Pytorch逐行解读)
新的“PyramidTNT”通过建立层次表示,显著地改进了原来的TNT。PyramidTNT相较于之前最先进的Vision Transformer具有更好的性能,如Swin-Transformer。
集智书童公众号
2022/02/10
1K0
金字塔ViT | 华为提出使用金字塔结构改进Transformer,涨点明显(Pytorch逐行解读)
CNN、Transformer、MLP架构的经验性分析
ViT的兴起挑战了CNN的地位,随之而来的是MLP系列方法。三种架构各有特点,为了公平地比较几种架构,本文提出了统一化的框架SPACH来对比,得到了具有一定insight的结论。论文来自微软的A Battle of Network Structures: An Empirical Study of CNN, Transformer, and MLP
BBuf
2021/12/27
1.1K0
CNN、Transformer、MLP架构的经验性分析
LLM入门5 | SAM代码从入门到出门 | MetaAI
非常好加载,基本上pytorch和torchvision版本不太落后就可以加载。里面的model_type需要和模型参数对应上,"vit_h"或者"vit_l"或者"vit_b",即便加载最大的2.4G的vit_h模型,也只需要占用8G的显卡。算是非常小的模型了。这里SAM测试的效果,很多情况下效果并不太好,是一个foundation model,我觉得主要原因是模型参数比较少。导致他不能很好的解决所有的问题。正确用法是对小领域最微调。
机器学习炼丹术
2023/09/02
1.3K0
LLM入门5 | SAM代码从入门到出门 | MetaAI
使用Pytorch手写ViT — VisionTransformer
《The Attention is all you need》的论文彻底改变了自然语言处理的世界,基于Transformer的架构成为自然语言处理任务的的标准。
deephub
2022/11/11
8220
使用Pytorch手写ViT — VisionTransformer
Swin-T图像论文复现
在计算机视觉领域,卷积神经网络(CNN)一直是构建模型的主流选择。自从AlexNet在ImageNet竞赛中取得了突破性的成绩后,CNN的结构不断演进,变得更庞大、更深入、更多样化。与此同时,自然语言处理领域的网络架构发展则呈现不同的轨迹,目前最流行的是Transformer模型。这种模型专为处理序列数据和转换任务而设计,以其能够捕捉数据中的长距离依赖关系而著称。Transformer在语言处理方面的显著成就激发了研究者探索其在计算机视觉领域的应用潜力,近期的研究表明,它在图像分类、目标检测、图像分割等任务上已经取得了令人鼓舞的成果。 实验得到该模型在图像分类、图像检测、目标检测有很好的效果。
Srlua
2024/11/30
1750
Swin-T图像论文复现
FAST-VQA(论文复现)
现实世界视频分辨率的提高对于深度视频质量评估(VQA)在效率与准确性之间提出了一个难题。一方面,保持原始分辨率将导致不可接受的计算成本。另一方面,现有的实践方法,如图像缩放和裁剪,会因为细节和内容的丢失而改变原始视频的质量,因此对质量评估是有害的。通过对人类视觉系统中的时空冗余以及视觉编码理论的研究,我们观察到,一个邻域周围的质量信息通常是相似的,这促使我们研究一种有效的、对质量敏感的邻域表征方案用于VQA。在这项工作中,我们提出了一种统一的方案,即时空网格小立方体采样(St-GMS),以获得一种新型样本,我们称之为片段。首先将全分辨率视频按照预设的时空网格划分为小型立方体,然后对齐时间上的质量代表进行采样,以组成用于VQA的片段。此外,我们设计了一个专门为片段量身定制的网络架构,即片段注意力网络(FANet)。利用片段和FANet,所提出的效率端到端的FAST-VQA和FasterVQA在所有VQA基准测试上的性能显著优于现有方法,同时仅需要1/1612的FLOPs,相较于当前最先进技术大幅降低。
Srlua
2024/11/30
1850
FAST-VQA(论文复现)
金字塔Transformer,更适合稠密预测任务的Transformer骨干架构
以CNN为骨干的方案在计算机视觉的各个领域均取得极大的成功,本文研究了一种简单的无卷积骨干网络用于诸多稠密预测任务(包含检测、分割等)。近来提出的Transformer(ViT)主要是针对图像分类任务而设计,我们提出稠密预测任务提出了一种PVT方案(Pyramid Vision Transformer),它克服了将ViT向稠密预测任务迁移的困难。(1) 不同于ViT的低分辨率输出、高计算复杂度与内存消耗,PVT不仅可以得到更高分辨率的输出(这对于稠密预测任务尤为重要),同时按照金字塔形式渐进式收缩特征分辨率;(2) PVT继承了CNN与Transformer的优势,通过简单的替换CNN骨干使其成为不同视觉任务的统一骨干结构;(3) 通过充分的实验验证了PVT的优越性,在目标检测、语义分割、实例分割等任务上PVT均取得了优异性能。比如RetinaNet+PVT在COCO数据集上取得了40.4AP指标,超越了RetinaNet+ResNet50的36.3AP。
AIWalker
2021/03/04
1.1K0
金字塔Transformer,更适合稠密预测任务的Transformer骨干架构
推荐阅读
相关推荐
【图像分类】Vision Transformer理论解读+实践测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验