快速掌握Spring监控(Spring Boot admin)

发布于:2024-04-15 ⋅ 阅读:(184) ⋅ 点赞:(0)

监控

  • 监控的作用:
  1. 监控服务状态是否宕机
  2. 监控服务运行指标(内存,虚拟机,线程,请求等)
  3. 监控日志
  4. 管理服务(服务下线)
  • 监控的实施方式

显示监控信息的服务器:用于获取信息,并显示对应的信息
运行的服务:启动时主动上报,告知监控服务器自己需要收到控制

可视化监控平台

Spring Boot Admin,开源社区项目,用于管理和监控SpringBoot应用程序。客户端注册到服务端后,通过HTTP请求方式,服务端定期从客户端获取对应的信息,并通过UI界面展示对应信息。

在创建springboot项目的时候进行勾选:
在这里插入图片描述
pom.xml中对应的依赖如下:

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

在启动类中添加注解 @EnableAdminServer

@SpringBootApplication
@EnableAdminServer
public class JiankongApplication {

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

}

然后启动服务,进入到localhost:8080观察可视化界面
在这里插入图片描述
进入到可视化界面
这个时候开启一个应用以便来进行监控
新建一个模块,勾选Admin的客户端
新建的应用应该告诉服务器如何被监控,需要在新的模块下进行进行配置:

spring:
  boot:
    admin:
      client:
        url: http://localhost:8080
server:
  port: 80

再次启动项目:
在这里插入图片描述
该项目可以在admin可视化界面进行监控
如果要查看该项目的健康信息可以进行相关配置:

management:
  endpoint:
    health:
      show-details: always

开启健康显示信息为always(默认为false)management与spring为同一级
这时就能查看相关的健康信息:
在这里插入图片描述
存在一种配置可以查看web相关的所有监控项:

management:
  endpoint:
    health:
      show-details: always
      #web下的监控项
  endpoints:
    web:
      exposure:
        include: "*"

查看信息如下:
在这里插入图片描述

Admin底层逻辑

我们观察可视化平台中的映射信息可以看出:
在这里插入图片描述
根据映射的地址访问过去我们会发现,可视化平台的一组组数据都是通过执行对应的请求获取来的,且这些请求的首个都是以Actuator开头的

Actuator提供了SpringBoot生产就绪功能,通过端点的配置与访问,获取端点信息
端点描述了一组监控信息,SpringBoot提供了多个内置端点,也可以根据需要自定义端点信息
访问应用当前所有的端点信息: /actuator
访问端点详细信息: /actuator/端点名称

启动所有的端点:
在这里插入图片描述
端点的启动与web端的显示配置是有区别的,端点启动是指端点对外开发,web中的配置是指在web界面显示的端点信息

  • 暴露端点功能

端点中包含的信息存在敏感信息,需要对外暴露端点功能时手动设定端点信息在这里插入图片描述

  • 暴露端点功能

在这里插入图片描述
手动关闭部分端点配置示例:

management:
  endpoint:
    health:
      show-details: always
    beans:
      enabled: true

启动所有端点:

management:
   endpoints:
      enabled-by-default: true

info

在可视化界面中存在信息一栏,用于点开后描述该应用的相关信息,由自己定义
通过配置文件进行配置:
示例:
添加作者信息,读取pom.xml中的相关信息

info:
  author: hhhh
  appName: @project.artifactId@

info与spring为同一层级配置
当所要展示的信息过多时,可以通过实现类(实现InfoContributor接口)进行信息的更一步描述


@Component
public class peizhi implements InfoContributor {
    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("runtime",System.currentTimeMillis());
    }
}

在这里插入图片描述

  • 自定义health端点的信息

自定义health端点的信息与上述操作相同,在类中进行添加(继承AbstractHealthIndicator)

public class health extends AbstractHealthIndicator {
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        builder.withDetail("runtime",System.currentTimeMillis());
        Map infomap=new HashMap();
        infomap.put("buildTime","2006");
        builder.withDetails(infomap);
        builder.up();
    }
}

自定义端点

我们可以自己定义一个端点:
通过注解 @Endpoint新的端点,id表示端点名称,后面表示是否启用端点

@Component
@Endpoint(id = "wode",enableByDefault = true)
public class duandian {
      @ReadOperation
      public void nihao(){
        System.out.println("nihao");
    }
}

注解 @ReadOperation的意思时当扫描端点的时候就调用注解所标注的方法


网站公告

今日签到

点亮在社区的每一天
去签到