监控
1.监控相关概念
a.监控的意义
- 监控服务状态是否宕机
- 监控服务运行指标(内存、虚拟机、线程、请求等)
- 监控日志
- 管理服务(服务下线)
b.监控的实施方式
- 显示监控信息的服务器:用于获取服务信息,并显示对应的信息
- 运行的服务:启动时主动上报,告知监控服务器自己需要受到监控
2.SpringBootAdmin可视化监控平台
勾选服务端还是客户端
- Admin服务端
服务端要做成Web项目
设置启用Spring-Admin @EnableAdminServer
server:
port: 8080
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.5.4</version>
</dependency>
- Admin客户端
spring:
boot:
admin:
client:
url: http://localhost:8080
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.5.4</version>
</dependency>
Admin版本需与SpringBoot版本相同
3.actuator
监控原理
- Actuator提供了SpringBoot生产就绪功能,通过端点的配置与访问,获取端点信息
- 端点描述了一组监控信息,SpringBoot提供了多个内置端点,也可以根据需要自定义端点信息
- 访问当前应用所有端点信息:/actuator
- 访问端点详细信息:/actuator/端点名称
- 启用指定端点
management:
endpoint:
health: # 端点名称
enabled: true
show-details: always
beans: # 端点名称
enabled: true
- 启用所有端点
management:
endpoints:
enabled-by-default: true
4.info端点指标控制
- 不配置情况下,无信息展示
- 通过配置文件,为info端点添加自定义指标
info:
appName: @project.artifactId@
version: @project.version@
author: Kyle
- 通过代码,为info端点添加自定义指标
@Component
public class InfoConfig implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
// withDetail
builder.withDetail("runTime", System.currentTimeMillis());
// withDetails
Map infoMap = new HashMap();
infoMap.put("buildTime","2023");
builder.withDetails(infoMap);
}
}
5.health端点指标控制
- 通过代码,为health端点添加自定义指标
@Component
public class HealthConfig extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
builder.status(Status.UP);
builder.withDetail("runTime", System.currentTimeMillis());
Map infoMap = new HashMap();
infoMap.put("buildTime","2023");
builder.withDetails(infoMap);
}
}
6.自定义端点
- 自定义端点
- 配置上@Endpoint(id=“端点名”)
- @ReadOperation
@Component
@Endpoint(id = "pay", enableByDefault = true)
public class PayEndpoint {
@ReadOperation
public Object getPay(){
Map payMap = new HashMap();
payMap.put("Level1", "300");
payMap.put("Level2", "212");
payMap.put("Level3", "990");
return payMap;
}
}