Spring Boot Admin解析

简介: 之前文章我们讲解了Spring Boot提供的 Actuator 模块以实现应用的监控与管理。具体可参考:Spring Boot Actuator解析。Spring Boot Actuator基于http、jmx、ssh、telnet等组件实现应用程序的管理和监控。同时,提供了应用的审计(Auditing)、健康(health)状态信息、数据采集(metrics gathering)统计等监控运维的功能。除此之外,我们可以自定义扩展 Actuator 端点(Endpoint) 监控指标。

      之前文章我们讲解了Spring Boot提供的 Actuator 模块以实现应用的监控与管理。具体可参考:Spring Boot Actuator解析Spring Boot Actuator基于http、jmx、ssh、telnet等组件实现应用程序的管理和监控。同时,提供了应用的审计(Auditing)、健康(health)状态信息、数据采集(metrics gathering)统计等监控运维的功能。除此之外,我们可以自定义扩展 Actuator 端点(Endpoint) 监控指标。

      使用Spring Boot Actuator端点很难监视微服务。如果微服务的数量增加,则意味着执行器端点的数量也增加。在这种情况下,很难管理和监视微服务。Spring Boot Admin Server管理和监视所有微服务。 为了处理这种情况,CodeCentric提供了Spring Boot Admin UI,该UI可在单个位置管理和监视所有微服务Spring Boot Actuator。

      在本文中,我们讲述下另一款开源监控产品Spring Boot Admin。Spring Boot Admin是一个社区开源项目,用于管理和监控Spring Boot应用。应用通过Spring Boot Admin Client注册到Spring Boot Admin Server中,可通过HTTP请求或者Spring Cloud发现(例如Eureka、Consul),UI展示通过Vue在Spring Boot Actuator端点上获取应用监控数据进行管理。

      在进行解析之前,我们先了解下Spring Boot Admin的基本原理:Spring Boot Admin 实现主要基于以下几点:

  • 所有需要被监控的服务,均加上SpringBoot提供的Actuator包。
  • 启动Admin Server端,作为注册中心,监控所有客户端当前状态(自己也需要被注册

并且被监控)。

  • 启动Admin Clinet端,第一次主动向Admin Server端提供健康信息。
  • Admin Server端定时轮询所有监控Admin Client端的节点及时获得最新信息。
  • Admin Client端如果发生异常,Admin Server端提供了邮件功能等,及时通知用户进行

修复。

     本文的工程项目基于Spring Cloud 2.x 版本,所采用的Spring Boot版本为2.2.5.RELEASE,Spring v5.2.4.RELEASE。例采用Maven多module形式,父pom文件引入以下的依赖如下:


<groupId>luga.springboot</groupId>
    <artifactId>parent</artifactId>
    <version>2.0</version>
    <packaging>pom</packaging>
    ...
    <name>spring-boot-luga</name>
    <description>spring-boot-luga Project</description>
    ...
    <properties>
        <utf8>UTF-8</utf8>
        <boot.artifact.name>bootstrap-${project.version}</boot.artifact.name>
        <assembly.name>spring-boot-luga-server-${project.version}</assembly.name>
        <admin.artifact.name>admin-${project.version}</admin.artifact.name>
        <admin.assembly.name>admin-${project.version}</admin.assembly.name>
        <project.build.sourceEncoding>${utf8}</project.build.sourceEncoding>
        <project.reporting.outputEncoding>${utf8}</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
        <spring-boot-admin.version>2.2.2</spring-boot-admin.version>
        <mybatis-plus-boot-starter.version>3.3.1</mybatis-plus-boot-starter.version>
        ...
    </properties>

      在工程的启动类AdminApplication加上@EnableAdminServer注解,开启AdminServer的功能,代码如下:


package luga.springboot.admin;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
/**
 * Spring Boot Admin 启动类
 *
 * @author luga
 * @date 2020/3/20
 **/
@Slf4j
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
@SpringBootApplication
public class AdminApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(AdminApplication.class, args);
        ConfigurableEnvironment environment = context.getEnvironment();
        String serverPort = environment.getProperty("server.port");
        log.info("SpringBootAdmin: http://192.168.1.12:" + serverPort);
    }
}

       在工程的配置文件application.yml中配置程序名和程序的端口,代码如下:


server:
  port: 8000
# Spring Boot Admin Server配置
spring:
  boot:
    admin:
      monitor:
        period: 100000
        status-lifetime: 100000
        connect-timeout: 100000
        read-timeout: 100000
      ui:
        external-views:
          - label: "  "
            url: https://springboot.luga
            order: 2000
# Spring Boot Admin 登录账号密码
spring-boot-luga:
  admin:
    username: admin
    password: admin

       此时,Admin Server端已配置Ok,我们可以启动服务,进行查看:

       然后进行验证,具体如下:


[administrator@JavaLangOutOfMemory luga %] curl -i http://192.168.1.12:8000/
HTTP/1.1 401 
Set-Cookie: XSRF-TOKEN=74ded483-0b31-4cdf-a551-ad248a7483b1; Path=/
Set-Cookie: JSESSIONID=3D2C334F90B4CC5307682985248B35E7; Path=/; HttpOnly
WWW-Authenticate: Basic realm="Realm"
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sun, 24 Jan 2021 03:41:01 GMT
{"timestamp":"2021-01-24T03:41:00.746+0000","status":401,"error":"Unauthorized","message":"Unauthorized","path":"/"}%

      此时已表明服务启动成功,然后输入application.yml文件中定义的账户信息(admin: admin),进行登陆,如下所示:

      此时,我们去Applications监控管理页面查看所注册的Clietn端应用进行,如下所示:

      通过Spring Boot Admin管理控制台可以发现,实例数为0,即没有应用注册进来的,页面是数据是空白的,整个页面简洁干净,接下来我们启动一个 Client客户端程序让其注册进来,再次查看,发现已经注册成功,数字由0变为1,具体如下所示:

       如果为联机负载呢?即相同的客户端服务同时注册到服务端,比如,2个相同的服务,此时,窗体将显示如下信息:

      那如果不同的服务呢?首页将显示不同的应用类型。具体可参考以下:

      此时,我们进入首页,可以看到整体的概览信息,包含版本参数,服务健康度以及相关指标度量信息,具体如下所示:

      下面为应用程序的基本信息查看,包括进程状态、线程使用图表、堆内存使用图表、非堆内存使用图表等等。

      在Insights——>Mertrics窗体,我们可以自定义各种各样的指标监控信息,具体如下:

      下面为我们的应用服务日志相关打印信息:

      更为牛逼的地方,Spring Boot Admin管理平台针对Java虚拟机的监控较为丰富,可随时生成各种转储文件(包括HeapDump和ThreadDump),有利于对Java应用程序性能问题的定位与分析。具体如下所示:

      除此之外,Spring Boot Admin管理平台还提供丰富的日志事件报表功能,可有助于进行业务故障排查,具体如下所示:

      其他配置参数属性相关



[administrator@JavaLangOutOfMemory ~ %] curl -X GET "http://192.168.1.12:8888/api/hello/world" -H "accept: */*" -H "X-XSRF-TOKEN: bf679f83-d596-4622-be15-4a76cee44135"
{"code":200,"success":true,"message":"操作成功","data":"Hello World","time":"2021-01-24 12:57:21"}%

      以上为Spring Boot Admin监控管理平台的相关部署搭建,通过上述解析,我们可以清晰地看到:此管理平台功能丰富,能够在列表中浏览所有被监控Spring-Boot项目的基本信息,详细的Health信息、内存信息、JVM信息、垃圾回收信息、各种配置信息(比如数据源、缓存列表和命中率)等,还可以直接调整Logger的Level。借助此平台,使得我们能够全方位对整个Spring Cloud生态链路进行无缝监控及管理,从而提升我们的服务运维效能。


相关文章
|
4月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
5795 83
|
5月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
5月前
|
缓存 安全 Java
Spring Security通用权限管理模型解析
Spring Security作为Spring生态的核心安全框架,结合RBAC与ACL权限模型,基于IoC与AOP构建灵活、可扩展的企业级权限控制体系,涵盖认证、授权流程及数据库设计、性能优化等实现策略。
404 0
|
5月前
|
缓存 安全 Java
Spring Security权限管理解析
Spring Security是Spring生态中的核心安全框架,采用认证与授权分离架构,提供高度可定制的权限管理方案。其基于过滤器链实现认证流程,通过SecurityContextHolder管理用户状态,并结合RBAC模型与动态权限决策,支持细粒度访问控制。通过扩展点如自定义投票器、注解式校验与前端标签,可灵活适配多租户、API网关等复杂场景。结合缓存优化与无状态设计,适用于高并发与前后端分离架构。
438 0
|
5月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
1970 0
|
5月前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
590 0
|
4月前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
|
4月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
4月前
|
XML JSON Java
【SpringBoot(三)】从请求到响应再到视图解析与模板引擎,本文带你领悟SpringBoot请求接收全流程!
Springboot专栏第三章,从请求的接收到视图解析,再到thymeleaf模板引擎的使用! 本文带你领悟SpringBoot请求接收到渲染的使用全流程!
385 3

推荐镜像

更多
  • DNS