监控
- 监控
- 可视化监控平台
- 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: alwaysbeans:enabled: true
启动所有端点:
management:endpoints:enabled-by-default: true
info
在可视化界面中存在信息一栏,用于点开后描述该应用的相关信息,由自己定义
通过配置文件进行配置:
示例:
添加作者信息,读取pom.xml中的相关信息
info:author: hhhhappName: @project.artifactId@
info与spring为同一层级配置
当所要展示的信息过多时,可以通过实现类(实现InfoContributor接口)进行信息的更一步描述
@Component
public class peizhi implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {builder.withDetail("runtime",System.currentTimeMillis());}
}
- 自定义health端点的信息
自定义health端点的信息与上述操作相同,在类中进行添加(继承AbstractHealthIndicator)
public class health extends AbstractHealthIndicator {@Overrideprotected 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 {@ReadOperationpublic void nihao(){System.out.println("nihao");}
}
注解 @ReadOperation的意思时当扫描端点的时候就调用注解所标注的方法