SpringBoot 搭建和使用图形化监控界面

我们开发好的 SpringBoot 服务发布到公网上,肯定希望能够对其状态和资源消耗情况进行监控,特别是对每个接口访问情况的统计,以便在发生问题时能够快速排查和分析并解决问题。尤其是当 SpringBoot 服务比较多时,监控工作就尤为重要。

Spring Boot Admin 组件是第三方开发的一款非常实用的专门针对 SpringBoot 服务进行图形化监控的组件,它分为客户端组件和服务端组件。对于我们开发的 SpringBoot 业务服务,可以导入客户端组件,然后我们再专门开发一个 SpringBoot 程序引入服务端组件。客户端组件负责收集 SpringBoot 业务服务的相关监控信息,并将其发送给服务端组件,通过访问 SpringBoot 服务端提供的图形化界面,就可以轻松监控所有 SpringBoot 客户端服务。

Spring Boot Admin 组件的使用和图像化监控界面的搭建,非常简单,真的非常简单!!!

话不多说,我们还是通过具体的 Demo 要演示吧,在本篇博客的最后会提供源代码的下载。


一、搭建工程

我们搭建一个空的工程,然后在其下面创建 3 个 SpringBoot 工程:

  • 1个服务端工程:用于接收客户端收集并发送过来的监控信息,并进行图形化展示。

  • 2个客户端工程:用于在 SpringBoot 运行过程中收集监控信息,并发送给服务端。

有关 SpringBoot 工程搭建详细过程,这里不再进行赘述,可以参考前面发面的博客,这里只列出最关键的细节。

SpringBoot Admin 服务端工程搭建时,勾选了 Spring Web 和 Spring Boot Admin Server

image

客户端工程搭建时,勾选了 Spring Web 和 Spring Boot Admin Client

image

最终搭建好的工程结构如下所示:

image

工程创建好之后,我查看一下服务端和客户端的 pom 文件,跟 Spring Boot Admin 有关的 jar 包如下:

<!--Spring Boot Admin 服务端导入的 jar 包-->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<!--Spring Boot Admin 客户端导入的 jar 包-->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

二、服务端配置

Spring Boot Admin 的服务端配置非常简单,只需要在启动类上添加一个注解 @EnableAdminServer 即可。

package com.jobs.springbootserver;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//添加 Spring Boot Admin 启用注解 
@EnableAdminServer
@SpringBootApplication
public class SpringBootServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootServerApplication.class, args);
    }
}

由于是在同一台机器上运行 Spring Boot Admin 的服务端和客户端,因此需要将 SpringBoot 配置为不同的端口

# 在 application.yml 中配置启动端口
# 配置 SpringBoot Admin Server 的启动端口
server:
  port: 9090

三、客户端配置

本博客的 Demo 故意做了 2 个 SpringBoot 客户端程序,目的在于让后续的图形化监控界面中展示多个客户端的监控信息。

我们拿其中一个 SpringBoot 客户端进行举例,比如就拿 SpringBootClient1 来进行代码和配置演示。

对于 SpringBoot 客户端来说,主要就是对 application.yml 进行配置,具体如下:

# 配置第一个 SpringBoot 客户端访问端口
server:
  port: 8081

# 配置 SpringBoot Admin Server 的地址
# 用于将自身状态监控信息发送给 SpringBoot Admin Server
spring:
  boot:
    admin:
      client:
        url: http://localhost:9090
  # 应用程序名称(多个 SpringBoot 程序,可以配置相同的应用程序名称)
  application:
    name: SpringBootClient1

# 收集当前 SpringBoot 的所有健康检查信息
management:
  endpoint:
    health:
      show-details: always
  # 将当前 SpringBoot 的所有监控端点暴露出来
  endpoints:
    web:
      exposure:
        include: "*"

由于 SpringBoot 客户端一般都是我们的业务实现,因此这里提供一个接口作为示例。

package com.jobs.springbootclient1.Controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/test1")
@RestController
public class Test1Controller {

    @RequestMapping("/getdata")
    public String GetData() {
        return "Test1 GetData OK...";
    }
}

ok,到此为止,客户端和服务端就配置完了,对于 SpringBootClient2 的配置和编码也是一样的,这里不再赘述。


四、图形化监控界面

启动 Spring Boot Admin 的服务端和 2 个客户端,由于服务端配置的端口是 9090,因此访问 localhost:9090 查看监控界面。

image

在界面可以发现 2 个 SpringBoot 客户端服务,比如点击 SpringBootClient1 可以进入其监控界面:

image

滚动条往下拉,还能看到 SpringBootClient1 的进程、线程、垃圾回收、内存等相关统计信息。

image

在左侧选择【性能】选项卡,在右侧顶部下拉列表中选择【http.server.requests】,然后可以在 uri 下拉框中选择具体的接口(必须是曾经访问过的接口,才能在 uri 下拉框中找到),然后进行添加。在下方的列表中,就会对所关注的接口进行访问次数、最小时间、最大时间等信息进行统计。

image

当然图形化监控界面,功能很多很强大,毕竟界面是中文,大家可以到处点击浏览一下,很容易看明白监控的内容。



好了,就到这里吧,本篇博客主要介绍了 Spring Boot Admin 图形化监控界面的搭建和简单实用,希望对大家有用。

本篇博客的源代码下载地址为:https://files.cnblogs.com/files/blogs/699532/SpringBootMonitor.zip


posted @ 2022-08-20 15:01  乔京飞  阅读(10815)  评论(0编辑  收藏  举报