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 还提供了通知功能,当应用上/下线的时候,可以通过邮件进行通知。

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

增加邮件发送的依赖:

<!--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/
我的 csdn 地址:https://blog.csdn.net/qq_35787138/article/details/96466789

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容