Spring Boot Admin,贼好使!

d8975943091ab7db2d413ca3b2c047aa.png

作者 | 磊哥

来源 | Java中文社群(ID:javacn666)

转载请联系授权(微信ID:GG_Stone)

Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序。应用程序可以通过 http 的方式,或 Spring Cloud 服务发现机制注册到 SBA 中,然后就可以实现对 Spring Boot 项目的可视化管理和查看了。

Spring Boot Admin 可以监控 Spring Boot 单机或集群项目,它提供详细的健康 (Health)信息、内存信息、JVM 系统和环境属性、垃圾回收信息、日志设置和查看、定时任务查看、Spring Boot 缓存查看和管理等功能。接下来我们一起来搭建和使用吧。

它最终的展示效果如下:

5b47ba451705ec0341db00c21efcc4d2.png

1.搭建SBA监控端

我们需要创建一个 Spring Boot Admin 项目,用来监控和管理我们的 Spring Boot 项目,搭建的方式和创建普通的 Spring Boot 项目类似,具体步骤如下。使用 Idea 创建一个 Spring Boot 项目:8f328c65f23ebd9efd5b8275106f4f9f.pngdca2868f8dee6e512ddff533ca9e6862.png这里需要注意,需要添加 Spring Boot Admin(Server)服务端框架的支持,如下图所示:96409e51dacfc673f4e4753ce48a8f58.png也就是创建的 Spring Boot 项目需要添加以下两个重要的框架支持:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>

1.1 开启SBA服务

创建完项目之后,需要在启动类上开启 SBA 服务:

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableAdminServer // 添加此行代码
@SpringBootApplication 
public class SbaserverApplication {public static void main(String[] args) {SpringApplication.run(SbaserverApplication.class, args);}
}

1.2 配置SBA端口号

在 application.properties 中配置一个项目的端口号就可以直接启动了,我配置的端口号是 9001:

server.port=9001

PS:配置端口号的主要目的是为了不和其他 Spring Boot 项目冲突,如果 SBA 是单独部署此步骤可以忽略。

启动项目之后,就可以看到 SBA 的主页了,如下图所示:ec605f6357e7c058d68e10008d222f72.png此时 SBA 中还没有添加任何需要监控的项目,接下来我们再创建一个 Spring Boot 项目,加入到 SBA 中来进行监控和管理吧。

2.创建一个普通SpringBoot项目

首先,我们需要创建一个普通的 Spring Boot 项目,具体的创建步骤这里就不演示了。当创建好 Spring Boot 项目之后,需要在这个 Spring Boot 项目中需要添加 SBA 客户端框架的支持,也就是在 pom.xml 中配置如下内容:

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

然后在 application.properties 文件中配置 SBA 服务器端地址,也就是咱们第一步创建 SBA 项目的地址,配置内容如下:

# 当前项目端口号
server.port=8080
# Spring Boot Admin 监控服务器端地址
spring.boot.admin.client.url=http://localhost:9001

其中“spring.boot.admin.client.url”为 SBA 监控地址。

3.SpringBootAdmin监控总览

配置完以上信息之后,此时查看 Spring Boot Admin 页面中就有被监控的 Spring Boot 项目了,如下图所示:3868e6d0dd0fbb524c059be38ecacb5d.png也可以点击“应用墙”查看 Spring Boot Admin 中所有被监控的 Spring Boot 项目,如下图所示:91a337616e88f86c85ef2f501a9c13f0.png点击应用进入详情页面,如下图所示:b1b0390dd0ba1322af4a771895afabed.png4b4a9a9792f7fc3f20a67d8931833cb8.png事件日志中包含 Spring Boot 各种状态的展示(UP 为正常、OFFLINE 为异常)和发生的时间,如下图所示:c48bc13a5ac74d666e4d4cc52da95323.png

4.SpringBoot异常监控

当我们手动把被监控的 Spring Boot 项目停止之后,在 Spring Boot Admin 中就可以查看到一个应用已经被停掉了,如下图所示:1b53449b05fa1f2725bc1a39058bccab.png我们也可以通过事件日志查看 Spring Boot 宕机的具体时间,如下图所示:8130c1057c5b1391b9dbb4aa4def030c.png

5.配置查看更多监控项

通过上面的内容我们可以看出,监控的 Spring Boot 选项还是比较少的,怎么才能查看更多的监控项呢?要解决这个问题,我们需要在被监控的 Spring Boot 项目中添加 spring-boot-starter-actuator 框架的支持,并开启查看所有监控项的配置才行,最终展示效果如下:ec644cd8d6a547eb1b5d4809b3f2df18.png接下来我们来配置一下这些监控项。

5.1 添加actuator框架支持

在被监控的 Spring Boot 项目中添加 actuator 框架支持,也就是在 pom.xml 中添加以下配置:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

手动点击 Maven 导入依赖包(如果开启了自动导入,此步骤可忽略)。

5.2 配置开放所有监控项

在被监控的 Spring Boot 项目中添加以下配置:

# 开启监控所有项
management.endpoints.web.exposure.include=*

以上的配置是开放监控所有选项,配置完之后,重启此 Spring Boot 项目,然后再刷新 Spring Boot Admin 更多的监控项就展示出来了,如下图所示:12538fd13797e5aad4fc54e265c9c3cf.png

5.3 监控项目预览

将 Spring Boot 的所有监控项都开启之后,通过 SBA 就可以查看以下内容了:

  • 启动时间、累计运行时间;

  • 进程和线程数量和占用的 CPU 资源;

  • 垃圾回收详情信息,回收次数和花费时间;

  • JVM 线程转储、内存转储详情和对应的文件下载;

  • 可以查看和配置 Spring Boot 项目中的日志级别;

  • 查看 Spring Boot 项目性能监控;

  • 查看 Spring Boot 运行环境信息;

  • 查看 Spring Boot 所有类信息;

  • 查看 Spring Boot 中的定时任务;

  • 查看和管理 Spring Boot 项目中的所有缓存。

以下是几个重要页面的截图,我们一起来看。

5.3.1 查看运行环境

be95c3340589a62ab65b80e5c83a63b7.pnge7a0f8484c7fdbd4059ab600f1af6c79.png

5.3.2 查看定时任务

b1643019dd156e992043a4c6c219ece1.png
image.png

5.3.3 项目日志级别配置

6fe43a20dd145ab53b214202da1b953b.png我们可以通过 Spring Boot Admin 来动态的配置项目中的日志级别。

5.3.4 JVM线程和内存查看

62d72fd7edc8348a4474c6af010cceb3.png
image.png

5.3.5 查看SpringBoot所有缓存

934006d94d43ebb4526e7f924c28296c.png当然我们还可以对这些缓存进行删除操作。

6.查看项目实时日志

想要查看监控项目中的日志信息,有一个前提条件,前提条件是你被监控的 Spring Boot 项目,必须配置了日志的保存路径或者日志保存文件名,只有配置这两项中的任意一项,你的 Spring Boot 项目才会将日志保存到磁盘上,这样才能通过 SBA 查看到,我配置的是日志路径,在 Spring Boot 的 application.properties 配置文件中添加以下配置:

# 设置日志保存路径
logging.file.path=C:\\work\\log

设置完成之后,重启你的 Spring Boot 项目,然后刷新 SBA 页面,最终展示效果如下:1bbe88be7a30e08e33b2a0bb43bfdcf4.png此时我们就可以查看实时的日志信息了,当然你也可以随时下载日志,如果需要的话。

总结

Spring Boot Admin(SBA)是一个社区开源项目,用于管理和监视 Spring Boot 应用程序,它提供详细的健康 (Health)信息、内存信息、JVM 系统和环境属性、垃圾回收信息、日志设置和查看、定时任务查看、Spring Boot 缓存查看和管理等功能。

我们需要创建一个 SBA 服务器端用来监控一个或多个 Spring Boot 项目,被监控的 Spring Boot 项目要添加 SBA Client 框架的支持,且添加 actuator 框架和相应的配置,就可以实现对 Spring Boot 项目的完美监控了。

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java面试真题解析

a958e2941a8c543fb134a3d4e4453fc9.gif

往期推荐

60c2bc6afd46efa3e08a4f2cec737fd6.png

Bean放入Spring容器,你知道几种方式?


9690a0d420446cac376643bd788587e7.png

SpringBoot 热部署神器快速重启的秘密!


fac5e2d09ed7b11b08fb545478d378c0.png

查询MySQL字段注释的 5 种方法!


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

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

相关文章

适用于各种列表操作的Python程序

Here, we are implementing a python program for various list operations, following operations are being performed in the list, 在这里&#xff0c;我们正在为各种列表操作实现python程序&#xff0c;正在列表中执行以下操作&#xff0c; Declaring an integer list 声…

一个障碍,就是一个超越自我的契机

一个障碍&#xff0c;就是一个新的已知条件&#xff0c;只要愿意&#xff0c;任何一个障碍&#xff0c;都会成为一个超越自我的契机。 有一天&#xff0c;素有森林之王之称的狮子&#xff0c;来到了 天神面前&#xff1a;"我很感谢你赐给我如此雄壮威武的体格、如此强大无…

JAVA基础之容器基础内容

Java Collections框架 Java Collections框架中包含了大量的集合接口以及这些接口的实现类和操作它们的方法&#xff0c;具体包含了Set(集合&#xff09;、List(列表)、Map(键值对)、Queue(队列)、Stack(栈)等&#xff0c;其中List、Set、Queue、Stack都继承了Collection接口。…

更快的Maven构建工具mvnd和Gradle哪个性能更好?

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Maven 作为经典的项目构建工具相信很多人已经用很久了&#xff0c;但如果体验过 Gradle&#xff0c;那感觉只有两个字“真香…

页面访问的常见错误码解析

200 OK 一切正常301 Moved Permanently 客户请求的文档在其他地方&#xff0c;新的URL在Location头中给出&#xff0c;浏览器应该自动地访问新的URL。 302 Found 类似于301&#xff0c;但新的URL应该被视为临时性的替代&#xff0c;而不是永久性的。注意&#xff0c;在HTT…

aptitude_PHP Numbers Aptitude问题与解答

aptitudeThis section contains Aptitude Questions and Answers on PHP Numbers. 本节包含有关PHP数字的能力问题。 1) PHP supports automatic type conversion? YesNo Answer & Explanation Correct answer: 1Yes Yes, PHP supports automatic type conversion. 1)PHP…

SpringBoot + ShardingSphere 秒级分库分表!

Spring Boot 作为主流微服务框架&#xff0c;拥有成熟的社区生态。市场应用广泛&#xff0c;为了方便大家&#xff0c;整理了一个基于spring boot的常用中间件快速集成入门系列手册&#xff0c;涉及RPC、缓存、消息队列、分库分表、注册中心、分布式配置等常用开源组件&#xf…

JAVA基础之自定义容器实现

容器 容器主要是指Collection所包含的实现类&#xff0c;常用的有List、Map以及Set三种结构。本文主要介绍了几种常见的集合实现类&#xff0c;对它们进行自定义实现。 ArrayList&#xff1a;有序的容器列表&#xff0c;顺序存储着元素&#xff0c;可以使用下标进行索引&…

git reset, git checkout, git revert 区别 (译)

博客原文地址: http://blog.mexiqq.com/index.php/archives/3/题记&#xff1a;团队中大多数成员使用 sourceTree 和 github 两款 git 工具&#xff0c;然而大家对于图形化工具提供的 reset,checkout,revert 功能点并不是很了解&#xff0c;甚至于混淆,然后凭借猜测去使用。功夫…

Redis笔记之基本数据结构 动态字符串SDS

简单动态字符串 传统上的C语言的字符串表示是以空字符结尾的字符数组&#xff08;C字符串&#xff09;&#xff0c;redis自己实现一个动态字符串&#xff08;SDS&#xff09;&#xff0c;两者之间的区别以及使用SDS的好处有&#xff1a; 结构不同。C字符串以空字符结尾的字符…

weakhashmap_Java WeakHashMap size()方法与示例

weakhashmapWeakHashMap类的size()方法 (WeakHashMap Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to get the number of key-value pairs that exist in this map. size()方法用于获取此映…

扯一把 Spring 的三种注入方式,到底哪种注入方式最佳?

1. 实例的注入方式首先来看看 Spring 中的实例该如何注入&#xff0c;总结起来&#xff0c;无非三种&#xff1a;属性注入set 方法注入构造方法注入我们分别来看下。1.1 属性注入属性注入是大家最为常见也是使用最多的一种注入方式了&#xff0c;代码如下&#xff1a;Service p…

在项目中引入领域驱动设计的经验

Chris Patuzzo近期在一次演讲中介绍了领域驱动设计&#xff08;DDD&#xff09;的原则&#xff0c;并结合一个基于Ruby on Rails的真实项目进行讲解。在这次项目之前&#xff0c;Chris所在的团队为重新设计公司的主营网站所做的两个概念验证都因为可伸缩性方面的问题而失败了。…

Redis笔记之基本数据结构 链表

链表 链表具有空间存储不连续&#xff0c;增删节点快的优点&#xff0c;因此redis在列表键、发布与订阅、慢查询、监视器等使用了链表作为底层实现。由于C语言中没有内置的链表实现&#xff0c;因此redis自己进行了实现。 双向链表。每个listtNode都有perv和next指针&#x…

treeset java_Java TreeSet iterator()方法与示例

treeset javaTreeSet类的iterator()方法 (TreeSet Class iterator() method) iterator() method is available in java.util package. iterator()方法在java.util包中可用。 iterator() method is used to iterate the elements of this TreeSet is ascending or increasing or…

SpringCloud组件:Ribbon负载均衡策略及执行原理!

大家好&#xff0c;我是磊哥。今天我们来看下微服务中非常重要的一个组件&#xff1a;Ribbon。它作为负载均衡器在分布式网络中扮演着非常重要的角色。本篇主要内容如下&#xff1a;在介绍 Ribbon 之前&#xff0c;不得不说下负载均衡这个比较偏僻的名词。为什么说它偏僻了&…

Redis笔记之基本数据结构 字典

字典 符号表、关联数组或者映射&#xff0c;有点类似于java中的map&#xff0c;用于保存键值对key-value。字典中的键key是独一无二的。底层实现为哈希表。下面进行简述&#xff1a; 哈希表。哈希表主要包含table数组、size、sizemask以及used。table用于保存哈希表节点&…

【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

本文目录 前言一、编写第一个C语言程序-Hello World二、编译程序三、链接程序四、运行程序五、总结六、学习建议七、clang指令汇总回到顶部前言 前面已经唠叨了这么多理论知识&#xff0c;从这讲开始&#xff0c;就要通过接触代码来学习C语言的语法。学习任何一门语言&#xff…

安卓平板体验Java开发,还能白嫖一年阿里无影云,真香!(内含白嫖方法,人人可领)...

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;阿里无影云早有耳闻&#xff0c;前两天看朋友发体验照片&#xff0c;可能是程序员天生爱折腾的特性又发挥作用了&#xff0c…

Linux命令(三)

echo&#xff1a;输出信息echo ”abc”echo “字符串” |passwd --stdin USERNAME :利用管道修改用户密码输出重定向&#xff1a;>覆盖输出&#xff08;会覆盖原文件中的内容&#xff09;>>追加输出 &#xff08;原有内容会被保留&#xff09;Set –c &#xff1a…