监控
- 监控
- 可视化监控平台
- Admin底层逻辑
- info
 
- 自定义端点
 
监控
- 监控的作用:
- 监控服务状态是否宕机
- 监控服务运行指标(内存,虚拟机,线程,请求等)
- 监控日志
- 管理服务(服务下线)
- 监控的实施方式
显示监控信息的服务器:用于获取信息,并显示对应的信息
 运行的服务:启动时主动上报,告知监控服务器自己需要收到控制
可视化监控平台
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的意思时当扫描端点的时候就调用注解所标注的方法



















