写于:2019-10-05 12:11:30

版本:Spring Boot Admin 2.1.6 Spring Boot 2.1.5.RELEASE

Spring Boot Admin 是 Spring Boot Actuator 应用监控 的图形化界面。

# 图形化界面:Spring Boot Admin

官网对 Spring Boot Admin 给出了说明

The UI is just a Vue.js application on top of the Spring Boot Actuator endpoints.

在提供有 Actuator 能力的 Spring Boot 应用,通过 HTTP 请求的方式,能够获取到 Spring Boot 应用相关的监测数据。但监测数据都是以 JSON 文本的格式进行展示,不利于阅读分析,且当应用存在多实例时,进行数据分析更困难。于是出现针对 Actuator 的图形化管理界面 Spring Boot Admin

# Spring Boot Admin 相关UI 界面展示

# Security 安全登录

通过引入:spring-security 实现 Spring Boot Admin 后台的安全校验

Actuator监控图形化界面[UI展示]登录

# 监控应用列表

展示当前监测的应用列表

Spring Boot Admin - Actuator监控图形化界面_[UI展示]监控应用列表

# 监控应用面板

展示当前监测应用的图形数据

Spring Boot Admin - Actuator监控图形化界面_[UI展示]监控应用面板

# 应用事件变更日志

Spring Boot Admin 请求相关应用 /actuator/* 监测数据的日志数据

Spring Boot Admin - Actuator监控图形化界面_[UI展示]监控应用事件变更日志

# 应用详细监控信息

单个应用实例的相关监测数据

  • info、health 信息

Spring Boot Admin - Actuator监控图形化界面_[UI展示]info_health监控信息

  • 应用进程进程、线程、堆栈内存监控信息

Spring Boot Admin - Actuator监控图形化界面_[UI展示]应用进程线程堆栈信息

  • 实时日志打印

Spring Boot Admin - Actuator监控图形化界面_[UI展示]实时日志打印

  • Http 请求监控

Spring Boot Admin - Actuator监控图形化界面_[UI展示]Http请求监控

更多内容,查看官网。

Spring Boot Admin 存在的意义:对 Spring Boot Actuator 文本监测数据进行图形化。

# 启动一个简单的 Spring Boot Admin 应用

Spring Boot Admin 支持两种应用监控方式:

  • 服务注册方式进行应用监控
  • 通过SBA client 端 进行监控信息上报

# 演示:Eureka 服务注册方式实现应用监控( 更多介绍,参考 Spring Boot Admin 官方网站)

# 服务介绍

服务名称 端口号 作用
feign-register 1111 服务注册中心
feign-SBA-server 9999 Spring Boot Admin 服务端
feign-consumer 9527 被监控服务

忽略注册中心(feign-register) 和 被监控服务(feign-consumer) 细节,只关注 监控配置详情

# 构建 Spring Boot Admin 服务端

# 1、依赖

A、Spring Boot Admin Server 依赖

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

B、Eureka Client 依赖

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

C、Security 依赖

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

# 2、application.properties 配置

A、Security 配置

# security 账户名密码
spring.security.user.name       = sba-wtf-user
spring.security.user.password   = sba-wtf-pwd

B、Eureka 注册配置

## eureka 服务地址
eureka.client.service-url.defaultZone              		 = http://user-wtf:pwd-wtf@localhost:1111/eureka/
eureka.instance.prefer-ip-address                   		= true
eureka.client.registry-fetch-interval-seconds  	  = 5
eureka.instance.lease-renewal-interval-in-seconds   = 10
## eureka 健康检查端口配置
eureka.instance.health-check-url                    = http://localhost:${server.port}/actuator/health
eureka.instance.status-page-url                     = http://localhost:${server.port}/actuator/info
eureka.instance.home-page-url                       = http://localhost:${server.port}/

# 客户端配置

# 1、引入 spring-boot-starter-actuator 依赖

# 2、application.properties 配置

A、开放 actuator 访问端口

## 开放 actuator 端点访问(可以根据需求进行控制)-更多内容参考官方文档
management.endpoints.web.exposure.include   = *
management.endpoint.health.show-details     = always

B、Eureka 注册

## eureka 服务地址
eureka.client.service-url.defaultZone                = http://user-wtf:pwd-wtf@localhost:1111/eureka/
eureka.instance.prefer-ip-address                    = true
eureka.client.registry-fetch-interval-seconds        = 5
eureka.instance.lease-renewal-interval-in-seconds    = 10
eureka.instance.health-check-url                     = http://${spring.cloud.client.ip-address}:${server.port}/actuator/health
eureka.instance.status-page-url                      = http://${spring.cloud.client.ip-address}:${server.port}/actuator/info
eureka.instance.home-page-url                        = http://${spring.cloud.client.ip-address}:${server.port}/
## 配置 Spring Boot Admin Server 的账号、密码
eureka.instance.metadata-map.user.name               = sba-wtf-user
eureka.instance.metadata-map.user.password           = sba-wtf-pwd
eureka.instance.metadata-map.management.address      = ${spring.cloud.client.ip-address}
eureka.instance.metadata-map.management.port         = ${server.port}

# 定制化 Spring Boot Admin

# 1、定制化 actuator Url 访问前缀

主要配置:

## 自定义 actuator 请求前缀
management.endpoints.web.base-path          = /wtf/actuator

关联的 eureka 配置修改:修改健康检查 Url 配置

eureka.instance.health-check-url = http://${spring.cloud.client.ip-address}:${server.port}${management.endpoints.web.base-path}/health
eureka.instance.status-page-url  = http://${spring.cloud.client.ip-address}:${server.port}${management.endpoints.web.base-path}/info
eureka.instance.home-page-ur= http://${spring.cloud.client.ip-address}:${server.port}$/
eureka.instance.metadata-map.management.context-path = ${management.endpoints.web.base-path}

# 2、定制化 actuator访问端口 port

主要配置:

## 自定义 actuator 访问端口
management.server.port                      = 9528

关联的 eureka 配置修改:健康检查 和 访问端口

eureka.instance.health-check-url                     = http://${spring.cloud.client.ip-address}:${management.server.port}/health
eureka.instance.status-page-url                      = http://${spring.cloud.client.ip-address}:${management.server.port}/info
eureka.instance.home-page-url                        = http://${spring.cloud.client.ip-address}:${management.server.port}/
eureka.instance.metadata-map.management.port         = ${management.server.port}

A、resource 目录下:创建:META-INF/spring-boot-admin-server-ui/img 目录

B、在 META-INF/spring-boot-admin-server-ui/img 中放入:logo 图片 - ui-brand-logo.jpg

C、在  application.properties 中配置

# 标签页标题 title
spring.boot.admin.ui.title  = WTF Monitoring Platform
# 标签页 favicon 图片
spring.boot.admin.ui.favicon=img/ui-brand-logo.jpg
# 标题栏图片
spring.boot.admin.ui.brand = <img src=\"img/ui-brand-logo.jpg\"><span>WTF Monitoring</span>

结果展示:

Spring Boot Admin - Actuator监控图形化界面_[定制化]logo_效果

更多定制信息,参考官方文档

# Spring Boot Admin 引入项目中,踩过的坑

# 问题1、Spring Boot Admin Server 启动报错:Calling [asyncError()] is not valid for a request with Async state [MUST_DISPATCH]

# 原因: Spring Boot Admin 2.1.6 与 Tomcat 9.X 存在冲突

# 解决:

  • 1、降低 Tomcat 版本

    <!-- 移除 web  tomcat -->
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    	 <exclusions>
    		<exclusion>
    			 <groupId>org.springframework.boot</groupId>
    		 </exclusion>
    	</exclusions>
    </dependency>
    
    <!-- 低版本 tomcat -->
    <dependency>
    	<groupId>org.apache.tomcat.embed</groupId>
    	<artifactId>tomcat-embed-core</artifactId>
    	<version>8.5.31</version>
     </dependency>
    
  • 2、使用 netty 作为容器

    <!-- 移除 web  tomcat -->
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    	 <exclusions>
    		<exclusion>
    			 <groupId>org.springframework.boot</groupId>
    		 </exclusion>
    	</exclusions>
    </dependency>
    <!-- 引入 netty -->
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	 <artifactId>spring-boot-starter-jetty</artifactId>
     </dependency>
    

# 问题2、项目中存在 context-path 配置时,无法进行正常监控问题

# 原因:context-path 的增加改变了原有 /actuator 的访问路径

# 解决

  • 1、修改 /actuator 访问端口,与 web 应用区分。 如上面:定制化 /actuator 访问端口

  • 2、直接修改 Spring Boot Admin 的监控请求路径 配置如下:(全部配置)

    # 健康检查配置,增加 ${server.servlet.context-path} 前缀
    eureka.instance.health-check-url                     = http://${spring.cloud.client.ip-address}:${server.port}${server.servlet.context-path}/health
    eureka.instance.status-page-url                      = http://${spring.cloud.client.ip-address}:${server.port}${server.servlet.context-path}${management.endpoints.web.base-path}/info
    eureka.instance.home-page-url                        = http://${spring.cloud.client.ip-address}:${server.port}${server.servlet.context-path}/
    eureka.instance.metadata-map.management.context-path = ${server.servlet.context-path}
    eureka.instance.metadata-map.management.address      = ${spring.cloud.client.ip-address}
    eureka.instance.metadata-map.management.port         = ${server.port}
    
精彩内容推送,请关注公众号!
最近更新时间: 4/5/2020, 3:33:26 PM