【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 使用Spring Boot Admin 监控服务

Spring Boot Actuator 提供了对单个 Spring Boot 的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了 Spring Boot 应用的整个生命周期。但是这样监控也有一些问题:第一,所有的监控都需要调用固定的接口来查看,如果全面查看应用状态需要调用很多接口,并且接口返回的 Json 信息不方便运营人员理解;第二,如果 Spring Boot 应用集群非常大,每个应用都需要调用不同的接口来查看监控信息,操作非常繁琐低效。在这样的背景下,就诞生了另外一个开源软件:Spring Boot Admin。

什么是 Spring Boot Admin?

Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源软件。每个应用都认为是一个客户端,通过 HTTP 或者使用 Eureka 注册到 admin server 中进行展示。

通过Admin Client的方式注册到Admin Server(HTTP方式 不需要eureka)

前面说到项目要加入Admin监控目前主要有两种方式,一种是通过Admin client,另外一种就是通过eureka,我们首先介绍第一种,通过Admin Client的方式。

创建Admin Server

我们创建一个新的module,命名为admin-server。然后我们加入依赖。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-demo</artifactId>
        <groupId>com.cc.cloud</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>admin-server</artifactId>

    <dependencies>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

然后我们在parent pom文件中加入spring-boot-admin-starter-server的版本依赖管理。

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

然后加入配置文件:

server:
  port: 8098
spring:
  application:
    name: cloud-admin-server

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

package com.cc.cloud.admin;

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

@SpringBootApplication
@EnableAdminServer
public class AdminServerApp {
    public static void main(String[] args) {
        SpringApplication.run( AdminServerApp.class, args );
    }
}

然后我们启动项目,然后访问: http://localhost:8098 可以看到以下界面:

在这里插入图片描述

Admin Client 端

我们需要改造我们的cloud-service-order和cloud-service-member服务。

我们先加入pom依赖:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

然后我们在parent pom文件中加入spring-boot-admin-starter-client的版本依赖管理。

    <dependencyManagement>
        <dependencies>
             <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-starter-client</artifactId>
                <version>2.1.5</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

然后我们加上配置文件:

spring:
  boot:
    admin:
      client:
        url: "http://localhost:8098"
management:
  endpoints:
    web:
      exposure:
        include: "*"

spring.boot.admin.client.url 配置 Admin Server 的地址
management.endpoints.web.exposure.include=* 打开客户端 Actuator 的监控。

改造完cloud-service-order和cloud-service-member服务之后我们启动它们。注意这里我们可以不需要启动eureka。

然后访问: http://localhost:8098 可以看到以下界面:

在这里插入图片描述

在这里插入图片描述

说明cloud-service-order和cloud-service-member服务都添加到了admin监控中了。

源代码

https://gitee.com/cckevincyh/spring-cloud-demo/tree/admin-server-http

通过Eureka的方式注册到Admin Server

如果我们使用的是单个 Spring Boot 应用,就需要在每一个被监控的应用中配置 Admin Server 的地址信息;如果应用都注册在 Eureka 中就不需要再对每个应用进行配置,Spring Boot Admin 会自动从注册中心抓取应用的相关信息。如果我们使用了 Spring Cloud 的服务发现功能,就不需要在单独添加 Admin Client 客户端,仅仅需要 Spring Boot Server ,其它内容会自动进行配置。

在client端我们不需要添加如下依赖,可以去掉:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

下面的配置也不需要,可以去掉:

spring:
  boot:
    admin:
      client:
        url: "http://localhost:8098"

由于 Spring Boot 2.0 的 Actuator 只暴露了 /health、/info 两个端口(为了安全考虑),所以 management.endpoints.web.exposure.include 的属性还是需要配置的。

然后我们还需要把admin-server也注册到eureka中。

我们加入pom依赖:

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

启动类中加入注解@EnableEurekaClient

package com.cc.cloud.admin;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableAdminServer
@EnableEurekaClient
public class AdminServerApp {
    public static void main(String[] args) {
        SpringApplication.run( AdminServerApp.class, args );
    }
}

然后加入eureka的配置到application.yml中。

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
server:
  port: 8098
spring:
  application:
    name: cloud-admin-server

然后我们启动cloud-admin-server,cloud-eureka,cloud-service-order,cloud-service-member服务。

然后我们访问:http://localhost:8098 可以看到如下界面:

在这里插入图片描述

在这里插入图片描述

由于 cloud-admin-server也注册到了eureka,所以其监控列表里也有cloud-admin-server。

我这里只是简单介绍了一些配置,想了解更多配置或者更加详细的介绍,可以看文章最后的参考链接,同时也感谢这些文章提供的帮助。

源代码

https://gitee.com/cckevincyh/spring-cloud-demo/tree/admin-server-eureka

参考

SpringBoot Admin 通过eureka 监控服务

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

Spring Boot Admin 2.1.0 全攻略

Spring Boot Admin 详解(Spring Boot 2.0,基于 Eureka 的实现)

发布了647 篇原创文章 · 获赞 816 · 访问量 98万+

猜你喜欢

转载自blog.csdn.net/cckevincyh/article/details/102079424