08、SpringCloud之SpringBoot-Admin监控组件学习笔记

举报
长路 发表于 2022/11/28 20:09:08 2022/11/28
【摘要】 Gitee仓库、Github仓库博客目录索引(持续更新)动力节点最新SpringCloud视频教程|最适合自学的springcloud+springcloudAlibabaPS本章节中部分图片是直接引用学习课程课件,如有侵权,请联系删除。

@[toc]

前言

本节配套案例代码:Gitee仓库Github仓库

所有博客文件目录索引:博客目录索引(持续更新)

学习视频:动力节点最新SpringCloud视频教程|最适合自学的springcloud+springcloudAlibaba

PS:本章节中部分图片是直接引用学习课程课件,如有侵权,请联系删除。


一、认识SpringBoot Admin组件

介绍:Spring Boot 有一个非常好用的监控和管理的源软件,这个软件就是 Spring Boot Admin。该软件能够将 Actuator 中的信息进行界

面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。

主要的功能点有

  • 显示应用程序的监控状态
  • 应用程序上下线监控
  • 查看 JVM,线程信息
  • 可视化的查看日志以及下载日志文件
  • 动态切换日志级别
  • Http 请求信息跟踪
  • 其他功能点击 https://github.com/codecentric/spring-boot-admin 更多了解 Spring-boot-admin。

单体or分布式服务集成:SpringBoot Admin 分为服务端(spring-boot-admin-server)和客户端(spring-boot-admin-client),服务端和客户端之间采用http通讯方式实现数据交互;单体项目中需要整合spring-boot-admin-client才能让应用被监控。在SpringCloud项目中,spring-boot-admin-server 是直接从注册中心抓取应用信息,不需要每个微服务应用整合spring-boot-admin-client就可以实现应用的管理和监控。

搭建服务流程说明

  • admin-server admin 监控服务
  • admin-order amdin 客户端服务

二、实战案例1、SpringCloud项目集成SpringBoot Admin

2.1、分布式下监控图示

在分布式中,我们需要单独创建一个admin-server服务,若是其想要获取到所有的服务实例信息,那么我们就需要将其注册到注册中心中即可获取到所有的服务信息。

那么此时admin服务如何检测各个实例呢?

  • 那么在针对想要被监控的服务中引入依赖spring-boot-starter-actuator,并且添加management的yaml配置。

image-20220720195848661

2.2、搭建admin-server服务

当前服务环境:SpringBoot:2.3.12.RELEASE、spring-cloud:Hoxton.SR12、spring-boot-admin:2.3.0

image-20220720202156919

添加spring-boot-admin-starter-server依赖以及对应eureka client依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.changlu</groupId>
    <artifactId>admin-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>admin-server</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-boot-admin.version>2.3.0</spring-boot-admin.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!--    admin-server依赖    -->
        <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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-dependencies</artifactId>
                <version>${spring-boot-admin.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置文件application.yaml:

server:
  port: 10086

spring:
  application:
    name: admin-server

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    hostname: localhost
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}

# 管理配置
management:
  endpoints:
    web:
      exposure:
        include: '*'  # 暴露所有的监控端点 # 如果一个服务需要被监控 那么就要讲自身的一些情况(一些信息接口)暴露出去

image-20220720195347766

  • 默认是health以及info级别,*表示暴露所有的监控信息。

在启动中添加一个eureka client注册、admin-server服务开启:

@SpringBootApplication
@EnableEurekaClient
@EnableAdminServer  //开启admin服务
public class AdminServerApplication {

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

}

测试管理服务

我们运行一个eureka注册中心、两个服务以及一个admin管理服务(也就是admin-server):

image-20220720202620369

额外说明:对于eureka以及user、order都是使用的之前章节案例如下:

image-20220720203621018

接着我来访问监控平台:http://localhost:10086/applications

可以看到此时我们能够查看到eureka注册中心中的服务信息:打x的表示该服务并没有配置admin-client,自然就无法令server与client进行交互以及查看信息了。

image-20220720202722249

如何查看当前admin-server服务的一系列运行状态及信息呢?

点击应用墙:

image-20220720202858150

亮着的表示我们能够查看的实例:

image-20220720202930162

我们来点击``admin-server`服务来进行查看:在面板中我们可以查看对应的线程、内存相关信息,包括左边的性能、环境、配置属性等等,还有jvm等。

image-20220720203113977

2.3、实现admin-server监控User服务

在2.2中我们可以看到目前只能够查看admin-server本身自己的服务信息,对于其他如订单order、user服务都是不行的,那么我们如何能够对其进行监控呢?

  • 我们之前admin-server注册到eureka中,可以拿到所有的服务实例信息,那么现在需要做的就是如何让admin-server与各个服务之间进行交互。

方案:自己搭建的服务来集成spring-boot-starter-actuator,然后配置下即可。

操作如下

image-20220720203513063

可以看到当前服务包含有user以及order,那么如何让admin-server来进行监控呢?

我们来对user服务进行监控!其实很简单,只需要两个步骤:①引入依赖。②进行配置。

image-20220720203759021

①引入依赖

<!--  暴露自身检查端点 endPoints 一个依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

②配置文件:application.yaml来添加管理配置

# 添加监控
management:
  endpoints:
    web:
      exposure:
        include: '*'

接着我们来重启user服务。

接着我们回到admin-server服务监控大屏,可以看到此时USER-SERVICE实例已经亮了:

image-20220720212209020

此时我们也来查看一下,果然也可以监控其相应的信息。

额外:集成spring-boot-starter-actuator的好处

上面案例中对user服务进行了监控,集成了对应的依赖,还有一个好处就是我们能够看到当前服务中所有对外提供的服务接口:

image-20220720212710286

好处:对于一些引入进来的依赖包,若是通过文件去查看暴露的一些接口会很麻烦,集成actuator可以将所有引入依赖jar包中的一些接口都给你暴露,弥补了原本只能进行全局搜索的问题。

如何将某个应用服务被admin来进行监控?引入actuator依赖,然后进行配置,即可在admin中也进行获取!


参考资料

[1]. Spring Boot Admin 介绍及使用

[2]. SpringBoot Admin的简单使用 包含admin-client端的安全配置,集成springsecurity

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。