Spring Boot Admin 使用

简介

Spring Boot Admin 是一个开源社区项目,用于管理和监控你的 Spring Boot 项目,被监控的应用可以作为 Spring Boot Admin Client 注册到 Spring Boot Admin Server 上,由统一监控。Spring Boot Admin 的前端 UI 是由 Vue.js 写的一个应用程序,用于展示被监控应用的信息。

快速入门

Spring Boot Admin 有两个模块组成,Spring Boot Admin Server(服务端) 和 Spring Boot Admin Client(客户端)。

构建 Spring Boot Admin Server

新建服务端项目,在 pom.xml 文件中添加服务端依赖:

<!--spring boot admin server 依赖-->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>${spring.boot.admin.version}</version>
</dependency>
<!--web依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

在启动类上加上 @EnableAdminServer 注解加载配置:

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

启动服务端,访问 http://localhost:8080 可以看到如下界面:
spring boot admin server 端启动界面

构建 Spring Boot Admin Client

新建客户端项目,在 pom.xml 文件中,添加客户端依赖:

<!--spring boot admin client 依赖-->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>${spring.boot.admin.version}</version>
</dependency>

在 application.yml 文件上添加配置,将客户端注册到服务端上:

server.port: 8090
spring.boot.admin.client.url: http://localhost:8080
management.endpoints.web.exposure.include: "*"

spring.boot.admin.client.url 指定了服务端的地址,客户端将自己注册上去。在这里,为了简单起见我配置了management.endpoints.web.exposure.include=*,将客户端的所有 endpoint 暴露到 Http 上,生产环境需要谨慎的配置想要暴露的地址。启动客户端程序,然后刷新刚才的服务端地址(http://localhost:8080),发现 applications 下已经有客户端的信息:
spring boot admin 监控面板
客户端的详情信息

在 Spring Cloud 上集成

在 Spring Cloud 上集成 Spring Boot Admin,只需要将 Spring Boot Admin Server 注册到注册中心上就可以了,Spring Boot Admin Server 会从注册中心拉取注册到注册中心上的服务。
Spring Boot Admin 支持多种类型的注册中心,这里以 Eureka 为例,演示与 Spring Cloud 集成。

修改 Spring Admin Boot Server

修改服务端的 pom.xml,加入 Eureka 的客户端依赖:

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

在启动类加上 @EnableDiscoveryClient 注解:

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

在 application.yml 上添加 Eureka 配置:

server:
  port: 8080
spring:
  application:
    name: admin-server
eureka:
  instance:
    instance-id: ${spring.application.name}:${server.port}
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

修改 Spring Boot Admin Client

Spring Boot Admin Server 注册到注册中心的话,Spring Boot Admin Server 会从注册中心上拉去应用并对应用进行监控,所以应用无需再添加 Spring Boot Admin Client 依赖。
修改 pom.xml:

<!--删除 spring boot admin client 依赖-->
<!--<dependency>-->
    <!--<groupId>de.codecentric</groupId>-->
    <!--<artifactId>spring-boot-admin-starter-client</artifactId>-->
    <!--<version>${spring.boot.admin.version}</version>-->
<!--</dependency>-->

<!--添加 eureka 客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

在启动类上添加 @EnableDiscoveryClient 注解:

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

修改 application.yml :

spring:
  application:
    name: admin-client
server:
  port: 8090
# spring.boot.admin.client.url: http://localhost:8080 #不再需要配置,删除
management.endpoints.web.exposure.include: "*"
eureka:
  instance:
    # eureka 上的 status的名称这里配置的是:应用名:端口号
    instance-id: ${spring.application.name}:${server.port}
  client:
    service-url:
      default-zone: http://localhost:8761/eureka/

启动服务端跟客户端,可以看到,两个应用都已经注册到 Eureka 上了:
eureka 界面
访问 http://localhost:8080 在 applications 可以看到 Eureka 上的应用在监控面板上了:
spring boot admin 监控面板

安全认证

上面的例子由于没有安全认证,意味着当我们的 Spring Boot Admin Server 暴露在外网的时候,只要任何人知道了地址,就能访问我们的监控台,从而获取应用的关键信息,这是很危险的。想要集成安全认证功能也很简单,Spring Boot Admin 使用 Spring Security 做应用的安全认证,只需要引入 Security 的依赖,然后在配置文件中配置一下就可以了。下面演示如何集成 Security 安全认证。

在 pom.xml 中添加 security 依赖:

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

修改 application.yml :

spring:
  application:
    name: admin-client
  # 配置登录密码
  security:
    user:
      name: admin
      password: admin
server:
  port: 8090
# spring.boot.admin.client.url: http://localhost:8080 #不再需要配置,删除
management.endpoints.web.exposure.include: "*"
eureka:
  instance:
    # eureka 上的 status的名称这里配置的是:应用名:端口号
    instance-id: ${spring.application.name}:${server.port}
    metadata-map:
      user:
      	name: "admin"      #These two are needed so that the server
      	password: "admin"  #can access the protected client endpoints
  client:
    service-url:
      default-zone: http://localhost:8761/eureka/

在配置文件中,通过配置 security.user.name 和 security.user.password 配置登录密码,由于是 spring cloud 项目,还需将用户名密码配置到元数据中,这样就每个客户端在启动的时候就能拿到元数据,通过元数据的用户名密码注册到 ```Spring Boot Admin Server` 上。
重新启动服务端,访问 http://localhost:8080 发现,此时需要登录才能进入到监控台:
spring boot admin 登录界面
而且,登录进去后,在监控台的右上角有一个退出登录按钮:
spring boot admin 监控台

通知

Spring Boot Admin 还提供了通知功能,当应用上/下线的时候,可以通过邮件进行通知。

不止邮件一种通知方式哦,这里只是以邮件举例

增加邮件发送的依赖:

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

配置邮件信息:

spring:
  mail:
    # 邮箱服务器
    host: smtp.163.com
    # 邮箱地址
    username: xxxx@163.com
    # smtp授权码
    password: xxxx
  boot.admin.notify.mail:
    # 发送地址
    to: xxxx@163.com
    # 发送人
    from: xxxx@163.com

这样,在应用上/下线的时候,告警邮箱就会接收到如下的通知:

应用上线通知

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

公众号

觉得不错可以关注我的公众号,不定时更新工作中的踩坑经历,及一些工作思考
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值