监控的意义
可视化监控平台
监控原理
自定义监控指标
监控服务状态是否宕机
监控服务运行指标(内存、虚拟机、线程、请求等)
监控日志
管理服务(服务下线)
显示监控信息的服务器:用于获取服务信息,并显示对应的信息
运行的服务:启动时主动上报,告知监控服务器自己需要受到监控
总结:
1.监控的意义
2.监控方式
Admin服务端
<properties>
<spring-boot-admin.version>2.5.4</spring-boot-admin.version>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-dependencies</artifactId>
<version>${spring-boot-admin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependencies>
</dependencies>
</dependencyManagement>
Admin服务端
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.5.4</version>
</dependency>
Admin客户端
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.5.4</version>
</dependency>
详情参看:http://giuhub.com/codecentic/spring-boot-admin
Admin服务端
server:
port: 8080
设置启用Spring-Admin
@SpringBootApplication
@EnableAdminServer
public class Springboot2ActuatorServerApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot25ActuatorServerApplication.class,args);
}
}
Admin客户端
spring:
boot:
admin:
client:
url: http://localhost:8080
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: "*"
总结:
1.可视化监控平台----Spring Boot Admin
2.配置通过web端读取监控信息
Actuator提供了SpringBoot生产就绪功能,通过端点的配置与访问,获取端点信息
端点描述了一组监控信息,SpringBoot提供了多个内置端点,也可以根据需要自定义端点信息
访问当前应用所有端点信息:/actuator
访问端点详细信息:/actuator/端点名称
ID | 描述 | 默认启动 |
---|---|---|
auditevents | 暴露当前应用程序的审计事件信息。 | 是 |
beans | 显示当前程序中所有Spring bean的完整列表 | 是 |
caches | 暴漏可用的缓存。 | 是 |
conditions | 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 | 是 |
configprops | 显示所有@ConfigurationProperties的校队清单。 | 是 |
env | 暴漏Spring CofigurableEnviroment中的属性。 | 是 |
flyway | 显示已应用的Flyway数据库迁移。 | 是 |
health | 显示应用程序健康信息 | 是 |
httptrace | 显示HTTP追踪信息(默认情况下,最后100个HTTP请求/响应交换)。 | 是 |
info | 显示应用程序信息。 | 是 |
integrationgraph | 显示Spring Integration图。 | 是 |
loggers | 显示和修改应用程序中日志记录器的配置。 | 是 |
liquibase | 显示已应用的Liquibase数据库迁移。 | 是 |
metrics | 显示当前应用程序的指标度量信息。 | 是 |
mappings | 显示所有@RequestMapping路径的整理清单。 | 是 |
scheduledtasks | 显示应用程序中的调度任务。 | 是 |
sessions | 允许从SPring Session支持的会话存储中检索和删除用户会话。当使用SPring Session的响应式Web应用程序支持时不可用。 | 是 |
shutdown | 正常关闭应用程序。 | 是 |
threaddump | 执行线程dump。 | 是 |
Web程序专用端点
ID | 描述 | 默认启动 |
---|---|---|
headdump | 返回一个hprof堆dump文件。 | 是 |
jolokia | 通过HTTP暴露JMX bean(当Jolokia在classpath上时,不适用于WebFlux)。 | 是 |
logfile | 返回日志文件的内容(入如果已设置logging.file或logging.path属性)。支持使用HTTP Range头来检索部分日志文件的内容。 | 是 |
prometheus | 以可以由Prometheus服务器抓取的格式暴露指标。 | 是 |
启用指定端点
management:
endpoint:
health: # 端点名称
enabled: true
show-details: always
beans: # 端点名称
enabled: true
启动所有端点
managment:
endpoints:
enabled-by-default: true
暴露端点功能
端点中包含的信息存在敏感信息,需要对外暴露端点功能时手动设定指定端点信息
属性 | 默认 |
---|---|
management.endpoints.jmx.exposure.exclude | |
management.endpoints.jmx.exposure.include | * |
management.endpoints.web.exposure.exclude | |
management.endpoints.web.exposure.include | info,health |
暴露端点功能
ID | JMX | Web |
---|---|---|
audievents | 是 | 否 |
beans | 是 | 否 |
caches | 是 | 否 |
conditions | 是 | 否 |
configprops | 是 | 否 |
env | 是 | 否 |
flyway | 是 | 否 |
health | 是 | 是 |
headdump | N/A | 否 |
httptrace | 是 | 否 |
info | 是 | 是 |
总结:
1.Actuator
2.端点功能开启与关闭
3.端点功能暴露
方式一:为info端点添加自定义指标
info::
appName: @project.artifactId@
version: @project.version@
author: itheima
@Component
public class AppInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
Map<String,Object> infoMqp = new HashMap<>();
infoMap.put("buildTime","2006");
builder.withDetail("runTime",System.currentTimeMillis())
.withDetail("company","传智教育");
}
builder.withDetails(infoMap);
}
}
总结:
自定义info端点信息
@Component
public class AppHealthContributor extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
boolean condition = true;
if(condition){
Map<String,Object> infoMap = new HashMap<>();
infoMap.put("buildTime","2006");
builder.withDetail("runTime",System.currentTimeMillis())
.withDetail("company","路西法公司");
builder.withDetails(infoMap);
builder.status(Status.UP);
}else{
builder.status(Status.DOWN);
}
}
}
总结:
自定义Health端点信息
@Service
public class BookServiceImpl extends ServiceImpl<BookDao,Book> implements IBookService {
private Counter counter;
public BookServiceImpl(MeterRegistry meterRegistry){
counter = meterRegistry.counter("用户付费操作次数:");
}
@Override
public boolean delete(Integer id){
counter.increment();
return bookDao.deleteById(id) > 0;
}
}
总结:
自定义Metrics端点信息
自定义端点
@Component
@Endpoint(id="pay")
public class PayEndPoint {
@ReadOperation
public Object getPay(){
//调用业务操作.最终return出去
Map payMap = new HashMap();
payMap.put("level 1",102);
payMap.put("level 2",352);
payMap.put("level 3",622);
return payMap;
}
}
总结:
自定义端点
大总结:
1.监控的意义
2.可视化监控平台-Spring Boot Admin
3.监控原理-Actuator
4.自定义监控指标