【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

时间:2021-12-07 08:56:02

利用 Spring Boot Admin 进行项目监控管理

一、Spring Boot Admin 是什么

Spring Boot Admin (SBA) 是一个社区开源项目,用于管理和监视 Spring Boot 应用程序。应用程序通过 http 的方式注册到 Spring Boot 管理客户端,或者通过 Spring Cloud 的服务发现机制,然后针对 actuator 接口将数据通过 Vue.js 进行可视化管理。

对于我们来说,我们可以通过 Spring Boot Admin 浏览所有被监控的 Spring Boot 项目,详细的 Health 信息、内存信息、JVM 系统和环境属性、垃圾回收信息等。

二、Spring Boot Admin 起步

Spring Boot Admin 由两种角色组成:一种是 Server 端;一种是 Client 端,即要被监控的应用。下面分别进行两种角色的配置:

Spring Boot Admin Server

引入依赖 [pom.xml]

<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.0.0</version>
</dependency>

@EnableAdminServer 注解

@SpringBootApplication
@EnableAdminServer
public class AdminApplication { public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
} }

application.yml 配置

spring:
application:
name: spring-boot-admin-server server:
port: 8080 management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: '*'

启动后访问 http://localhost:8080 就可以看见一个 UI 界面

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

此时应用和实例都是,是因为我们没有注册客户端,接下来我们实现来客户端。

Spring Boot Admin Client

引入客户端依赖 [pom.xml]

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

程序入口没有特别需要修改的地方

@SpringBootApplication
public class AdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(AdminClientApplication.class, args);
}
}

application.yml 配置

spring:
application:
name: spring-boot-admin-client
boot:
admin:
client:
url: http://localhost:8080 server:
port: 8081

此时再访问 localhost:8080 就可以发现新增了一个应用实例,如下图所示:

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

那么到这里我们一个基本的 Spring Boot Admin 应用就配置成功了。

点击菜单栏中的 wallboard,再点击要查看的应用程序,就可以访问应用的信息,如内存状态信息等:

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

三、SBA 结合 Spring Cloud 注册中心

除了上面案例中,直接在客户端中配置相应的 SBA 配置外,还可以配合 Spring Cloud 的服务注册与发现应用(例如:Eureka, Consul) ,接下来演示如何配置:

新建统一的依赖管理

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.jojo</groupId>
<artifactId>admin-demo-dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging> <name>admin-demo-dependencies</name>
<description>Demo project for Spring Boot Admin</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/>
</parent> <properties>
<!-- Environment Settings -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!-- Spring Settings -->
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
<spring-boot-admin.version>2.1.0</spring-boot-admin.version>
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

搭载服务注册中心

引入依赖

<dependencies>
<!-- Spring Boot Begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot End --> <!-- Spring Cloud Begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- Spring Cloud End -->
</dependencies>

应用程序入口

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}

application.yml

spring:
application:
name: admin-demo-eureka server:
port: 8761 eureka:
instance:
hostname: localhost
client:
service-url:
default-zone: http://${eureka.instance.hostname}:${server.port}/eureka
register-with-eureka: false
fetch-registry: false management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS

配置成功后启动应用程序,访问 localhost:8761,可以看到类似下图的 UI 界面:

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

创建 SBA 服务端

引入依赖

<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>

应用程序入口

@SpringBootApplication
@EnableAdminServer
@EnableDiscoveryClient
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}

application.yml 配置

spring:
application:
name: admin-demo-admin-server
server:
port: 8769
eureka:
client:
registryFetchIntervalSeconds: 5
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS

创建 SBA 客户端

引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

applicaion.yml 配置文件

spring:
application:
name: admin-demo-admin-client
server:
port: 8762
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health client:
registryFetchIntervalSeconds: 5
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS

应用程序入口

@SpringBootApplication
@EnableDiscoveryClient
public class AdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(AdminClientApplication.class, args);
}
}

将三个应用启动后,访问 localhost:8769 就可以监控各个应用的运行情况了:

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

四、集成邮件通知

SBA 中也可以集成邮件通知,当注册的服务下线、宕机时,向指定的邮箱发送信息邮件。其配置也十分容易,只需要在 yaml 配置文件中配置邮箱的发送方和邮件的收件方,以及在 pom 文件中引入 `` 的依赖即可。下面演示这段配置:

pom.xml配置:加入 mail 的依赖

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

application.yml:在配置文件中配置收件人以及发件方信息,并且开启邮箱提醒

spring:
boot:
admin:
notify:
mail:
enabled: true
from: youemail@example.com ... spring.mail.host: smtp.example.com
spring.mail.username: youemail@example.com
spring.mail.password: # 授权码
spring.boot.admin.notify.mail.to: admin@example.com

配置并启动完成后,可以尝试将 Client 项目中止:

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

然后打开收件方的邮箱,就可以看见 SBA 发送的邮件了

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

五、参考

SBA 官方文档:https://codecentric.github.io/spring-boot-admin/current/

【Spring Boot】利用 Spring Boot Admin 进行项目监控管理的更多相关文章

  1. 【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型

    // org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便 ...

  2. 【Spring】利用Spring最简单地使用异步方法

    有时候我们想异步地调用某个方法. 比如这个场景:在业务处理完毕后,需给用户发送通知邮件.由于邮件发送需调用邮箱服务商,有可能发生阻塞,我们就可以异步调用.当然有个前提,即如果邮件发送失败,不需要提示用 ...

  3. 利用spring boot&plus;vue做的一个博客项目

    技术栈: 后端 Springboot druid Spring security 数据库 MySQL 前端 vue elementUI 项目演示: GitHub地址: 后端:https://githu ...

  4. SpringBoot &vert; 第二十八章:监控管理之Spring Boot Admin使用

    前言 上一章节,我们介绍了Actuator的使用,知道了可通过访问不同的端点路径,获取相应的监控信息.但使用后也能发现,返回的监控数据都是以JSON串的形式进行返回的,对于实施或者其他人员来说,不是很 ...

  5. spring boot利用swagger和spring doc生成在线和离线文档

    参考博客地址: 在线文档:http://blog.didispace.com/springbootswagger2/ 离线文档:http://www.jianshu.com/p/af7a6f29bf4 ...

  6. spring boot利用controller来测试写的类

    我们在开发spring boot应用程序的时候,往往需要测试某个写好的类,但是在测试的时候发现不太好测试,用Junit等测试框架,总是会报一些问题,大致是找不到配置文件以及无法利用spring创建的对 ...

  7. spring boot 利用redisson实现redis的分布式锁

    原文:http://liaoke0123.iteye.com/blog/2375469 利用redis实现分布式锁,网上搜索的大部分是使用java jedis实现的. redis官方推荐的分布式锁实现 ...

  8. 利用Spring Boot&plus;zxing,生成二维码还能这么简单

    在网站开发中,经常会遇到要生成二维码的情况,比如要使用微信支付.网页登录等,本文分享一个Spring Boot生成二维码的例子,这里用到了google的zxing工具类. 本文目录 一.二维码简介二. ...

  9. Spring Boot,Spring Cloud,Eureka,Actuator,Spring Boot Admin,Stream,Hystrix

    Spring Boot,Spring Cloud,Eureka,Actuator,Spring Boot Admin,Stream,Hystrix 一.Spring Cloud 之 Eureka. 1 ...

随机推荐

  1. paip&period;mysql 性能测试 报告 home right

    paip.mysql  性能测试 报告 home right 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog ...

  2. JavaScript&sol;jQuery 表单美化插件小结

    Niceforms Niceforms是一款独立的表单美化工具,当前版本为2.0 官方主页:http://www.emblematiq.com/lab/niceforms/ 官方演示:http://w ...

  3. SpringSecurityOauth RCE &lpar;CVE-2016-4977&rpar; 分析与复现

    目录 0x00 前言 0x01 调试分析 0x02 补丁分析 0x03 参考 影响版本: 2.0.0-2.0.9 1.0.0-1.0.5 0x00 前言 这个漏洞与之前那个SpringBoot的SpE ...

  4. C&num;发送带附件的邮件的代码

    如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m. ...

  5. 使用Chrome浏览器访问谷歌和*

    安装chrome插件 谷歌访问助手即可 就这么简单

  6. Reservoir sampling

    在看蚂蚁***的时候看到这道题,真心觉得有趣,所以啊,一定要投入其中,知识的美妙啊~ 小明在天猫上开了一个网店,某天要开展一个抽奖活动,奖品数量100个.为了保证活动的公平,小明希望保证每个顾客中奖概 ...

  7. python的os模块总结

    python的os模块总结 目录 常用方法和属性总结 文件操作 目录操作 常用方法和属性总结 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir(&quo ...

  8. nodejs&plus;mysql入门实例&lpar;链接到数据库&rpar;

    //连接数据库 var mysql = require('mysql'); var connection = mysql.createConnection({ host: '******', //数据 ...

  9. 20165214 2017-2018-2 《Java程序设计》课程总结

    20165214 2017-2018-2 <Java程序设计>课程总结 每周任务链接 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安装 ...

  10. 关于Python matplotlib显示汉字乱码问题

    我也是一个初学者,在今天编程时遇到的一个问题,我是基于Eclipse编写Python代码,在使用matplotlib进行数据可视化时,发现显示不了汉字并且出现乱码问题. (1)使用中文注释时报错: 解 ...