Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用

1. 引言

在上一篇文章《Spring Boot (九): 微服务应用监控 Spring Boot Actuator 详解》我们介绍了 Spring Boot 基于 Spring Boot Actuator 的服务监控, Spring Boot Actuator 提供了对单个 Spring Boot 的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了 Spring Boot 应用的整个生命周期。但是, Spring Boot Actuator 只为我们提供了监控的数据接口,而且返回的数据量非常的大,我们不可能通过人工肉眼的方式去分析这些返回的数据,肯定是希望能有一个图形化的界面帮助我们去分析这些信息,同时,在微服务的体系中,我们的服务数量是非常多的,这同样不方便我们人工管理,在这样的背景下,诞生了另一个开源软件,也是本篇文章要介绍的: Spring Boot Admin

2. Spring Boot Admin 简介

Spring Boot Admin 是一个 Web 应用,用于管理和监视 Spring Boot 应用程序的运行状态。每个 Spring Boot 应用程序都被视为客户端并注册到管理服务器。背后的数据采集是由 Spring Boot Actuator 端点提供。前端 Spring Boot Admin UI 展示使用 VueJs 将数据展示在前端。

本文将介绍如何使用 Spring Boot Admin 对 Spring Boot 进行监控。

3. 工程实战

3.1 创建父工程 spring-boot-admin

依赖文件 pom.xml 如下:

代码清单:spring-boot-admin/pom.xml
***

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
    <spring-boot-admin.version>2.1.5</spring-boot-admin.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<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>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-dependencies</artifactId>
            <version>${spring-boot-admin.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • <dependencyManagement> 中增加 spring-boot-admin-dependencies 的版本配置,因为 spring-boot-admin 有关的版本信息未集成在 spring-boot-dependencies 中,咱也不知道为啥,咱也不敢问。

3.2 创建子工程 spring-boot-admin-server

Spring Boot Admin 可以用作单台服务的监控,也可用于集群的监控,我们先介绍单台服务的监控配置。

pom.xml 配置文件如下:

代码清单:spring-boot-admin/spring-boot-admin-server/pom.xml
***

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

注意: 如果只是单台服务使用,只需引入 spring-boot-admin-starter-server 的依赖即可, spring-cloud-starter-netflix-eureka-client 此依赖是 Spring Boot Admin 基于 Eureka 服务中心会使用到的依赖。

配置文件 application.yml 如下:

代码清单:spring-boot-admin/spring-boot-admin-server/src/main/resources/application.yml
***

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

注意: 单机版本无需配置其中的 eureka.***.*** 等相关内容。

启动主类 SpringBootAdminServerApplication.java 如下:

代码清单:spring-boot-admin/spring-boot-admin-server/src/main/java/com/springboot/springbootadminserver/SpringBootAdminServerApplication.java
***

@SpringBootApplication
@EnableAdminServer
@EnableEurekaClient
public class SpringBootAdminServerApplication {

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

}

注意: 单机版本无需添加 @EnableEurekaClient 注解。

3.3 创建子工程 spring-boot-admin-clienta

此工程为 Spring Boot Admin 单机版演示用例。

pom.xml 如下:spring-boot-admin/spring-boot-admin-clienta/pom.xml

代码清单:
***

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
  • 此工程仅需引入 spring-boot-admin-starter-client Spring Boot Admin 的客户端即可。

配置文件 application.yml 如下:

代码清单:spring-boot-admin/spring-boot-admin-clienta/src/main/resources/application.yml
***

server:
  port: 9090
spring:
  application:
    name: spring-boot-clienta
  boot:
    admin:
      client:
        url: http://localhost:8888
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
  • spring.application.name 配置的名称会在 Spring Boot Admin 的 UI 界面中显示出来。
  • spring.boot.admin.client.url 配置的是我们 Spring Boot Admin 服务端的地址。
  • management.endpoints.web.exposure.include 开启 Spring Boot Actuator 的全部监控。
  • management.endpoint.health.show-details 开启 Spring Boot Actuator 监控的应用的详细的应用健康信息。

启动 spring-boot-admin-server 工程和 spring-boot-admin-clienta ,稍等一会, spring-boot-admin-clienta 会自动注册到 spring-boot-admin-server 上面去。

打开浏览器访问 http://localhost:8888/ ,这时我们可以看到 Spring Boot Admin 监控图,如下:

点击后会进入该应用的详细信息,我们可以看到 Spring Boot Admin 使用图形化的界面展示了该应用的各种信息,如下:

3.4 创建子工程 spring-boot-admin-client

此工程示例为微服务版本的 Spring Boot Admin 使用示例,其中使用服务中心 Eureka 注册服务, Spring Boot Admin 会从服务中心 Eureka 上读取相关的信息,进行服务监控。这样我们就不需要在客户端再配置 Spring Boot Admin 的服务地址,后续如果 Spring Boot Admin 服务发生地址迁移等事情时,也无需修改客户端的配置文件。

Eureka 代码示例这里不再列出,如果有需要补课的同学,可以访问笔者的 《Spring Cloud 系列文章》

工程依赖 pom.xml 如下:

代码清单:spring-boot-admin/spring-boot-admin-client/pom.xml
***

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 这里仅添加 Spring Boot Admin 的客户端和 Spring Cloud Eureka 的客户端依赖。

配置文件 application.yml 如下:

代码清单:spring-boot-admin/spring-boot-admin-client/src/main/resources/application.yml
***

server:
  port: 8080
spring:
  application:
    name: spring-boot-admin-client
eureka:
  instance:
    leaseRenewalIntervalInSeconds: 10
    health-check-url-path: /actuator/health
  client:
    registryFetchIntervalSeconds: 5
    serviceUrl:
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
  • 对比前面单机版的配置,这里去掉了 Spring Boot Admin 服务地址的配置,增加了 Eureka 服务中心的配置。

启动主类 SpringBootAdminClientApplication.java 如下:

代码清单:
***

@SpringBootApplication
@EnableEurekaClient
public class SpringBootAdminClientApplication {

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

}
  • @EnableEurekaClient 含义为启用 Eureka 客户端,实测虽然这里不写也一样会启用,但是最好还是写一下吧:)

测试:

修改编辑器 idea 配置,在两个不同的端口启动子工程 spring-boot-admin-client ,打开 Spring Boot Admin 的 UI 界面,显示如下:

可以看到,这里显示了两个应用( APPLICATIONS ),一个是我们的 spring-boot-admin-server 本身的监控,还有一个是我们的 spring-boot-admin-client 应用,且该应用有两个实例( INSTANCES ),分别位于两个不同的端口 8080 和 8081 。点进去一样可以看到对应的实例的详情。

4. 示例代码

示例代码-Github

示例代码-Gitee

5. 参考

使用 spring-boot-admin 对 Spring Boot 服务进行监控

Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用的更多相关文章

  1. spring boot(十六)使用Jenkins部署spring boot

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...

  2. Spring cloud系列十四 分布式链路监控Spring Cloud Sleuth

    1. 概述 Spring Cloud Sleuth实现对Spring cloud 分布式链路监控 本文介绍了和Sleuth相关的内容,主要内容如下: Spring Cloud Sleuth中的重要术语 ...

  3. spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin

    参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提 ...

  4. spring boot配置druid数据源和监控配置

    直接上代码: 一.pom.xml中添加依赖 <dependency> <groupId>com.github.drtrang</groupId> <artif ...

  5. JavaMelody监控spring、struts

    前言 前面讲过了Javamelody的基本配置,如何使用Javamelody来监控JDBC以及SQL. 这里继续讲解一下如何监控struts和spring. 手码不易,转载请注明:xingoo 由于s ...

  6. (转)Spring Boot(二十):使用 spring-boot-admin 对 Spring Boot 服务进行监控

    http://www.ityouknow.com/springboot/2018/02/11/spring-boot-admin.html 上一篇文章<Spring Boot(十九):使用 Sp ...

  7. Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置

    Actuator 简介 Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能.通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘.内存.C ...

  8. SpringCloud(8)微服务监控Spring Boot Admin

    1.简介 Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件.Spring Boot Admin 分为 Server 端和 Client 端,Spring ...

  9. spring Boot(十九):使用Spring Boot Actuator监控应用

    spring Boot(十九):使用Spring Boot Actuator监控应用 微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台 ...

随机推荐

  1. python中的全局变量

    1. 在函数中定义的局部变量如果和全局变量同名,则会使用局部变量(即隐藏全局变量). 示例: x = 1 def func(): x = 2 print x func() print x 运行结果: ...

  2. 对git使用的初步总结

    使用git也才一周多,就已经深深爱上这款软件了. 之前公司一直用的是clearcase,一款老到除了公司内部的人和曾经开发这款软件的人,估计再也不会有人知道了吧! (当然也许还会有其他公司也会使用,因 ...

  3. sed一些常用命令

    [转] http://blog.chinaunix.net/uid-20754793-id-177657.html 下面是我学习sed时参照参考书总结的一些常用sed命令,基本上每条语句都进行了调试1 ...

  4. 调用arcpy包批量进行矢量掩膜提取

    使用一个polygon矢量提取某个文件夹中所有的tif格式栅格数据 (要确保先安装好arcpy包) import arcpy arcpy.CheckOutExtension("spatial ...

  5. 微服务时代之自定义archetype(模板/骨架/脚手架)

    1. 场景描述 (1)随着微服务越来越常见,一个大的项目会被拆分成多个小的微服务,jar包以及jar之间的版本冲突问题,变得越来越常见,如何保持整体微服务群jar及版本统一,也变成更加重要了,mave ...

  6. velocity中文乱码

    当使用velocity出现中文乱码. 首先:我们设置 eclipse的编码方式 : 右键工程师属性->properties->查看编码格式是否伟URF-8 然后:spring-xml文件中 ...

  7. 机器学习Label Encoder和One Hot Encoder

    标签编码(Label Encoder) 在本例中第一列是Country, 如果我们要运行任何模型, 数据中不能包含文本 所以要对文本进行处理 接下来,我们从sklearn库中导入LabelEncode ...

  8. Java 并发编程(二):如何保证共享变量的原子性?

    线程安全性是我们在进行 Java 并发编程的时候必须要先考虑清楚的一个问题.这个类在单线程环境下是没有问题的,那么我们就能确保它在多线程并发的情况下表现出正确的行为吗? 我这个人,在没有副业之前,一心 ...

  9. Jenkins流水线(pipeline)实战之:从部署到体验

    关于Jenkins流水线(pipeline) Jenkins 流水线 (pipeline) 是一套插件,让Jenkins可以实现持续交付管道的落地和实施. 关于blueocean Blue Ocean ...

  10. AWGN

    高斯白噪声的功率谱密度服从均匀分布,幅度分布服从高斯分布: 白噪声是指它的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性: 高斯白噪声在任意两个不同时刻上的随机变量之间,不仅是互不相关的,而 ...