SpringBoot2--- 指标监控,kalilinux 教程下载
====================================================================================
未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot 就抽取了 Actuator 场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
===========================================================================
=====================================================================
引入场景
访问 http://localhost:8080/actuator/** (监控端点,有很多)
暴露所有监控信息为 HTTP
management:
endpoints:
enabled-by-default: true #暴露所有端点信息
web:
exposure:
include: '*' #以 web 方式暴露
测试
http://localhost:8080/actuator/beans
http://localhost:8080/actuator/configprops
http://localhost:8080/actuator/metrics
http://localhost:8080/actuator/metrics/jvm.gc.pause
http://localhost:8080/actuator/endpointName/detailPath
。。。。。。
==================================================================================
最常用的 Endpoint
Health:监控状况
Metrics:运行时指标
Loggers:日志记录
健康检查端点,我们一般用于在云平台,平台会定时的检查应用的健康状况,我们就需要 Health Endpoint 可以为平台返回当前应用的一系列组件健康状况的集合。
开启 health 的显示详细 endpoint.health.show-details=always
重要的几点:
health endpoint 返回的结果,应该是一系列健康检查后的一个汇总报告 (有任何一个应用是宕机状态,整个就是宕机状态)
很多的健康检查默认已经自动配置好了,比如:数据库、redis 等
可以很容易的添加自定义的健康检查机制
提供详细的、层级的、空间指标信息,这些信息可以被 pull(主动推送)或者 push(被动获取)方式得到;
通过 Metrics 对接多种监控系统
简化核心 Metrics 开发
添加自定义 Metrics 或者扩展已有 Metrics
1、开启与禁用 Endpoints
默认所有的 Endpoint 除过 shutdown 都是开启的。
需要开启或者禁用某个 Endpoint。配置模式为 management.endpoint..enabled = true
management:
endpoint:
beans:
enabled: true
或者禁用所有的 Endpoint 然后手动开启指定的 Endpoint (management.endpoints.enabled-by-default 默认是 true)
management:
endpoints:
enabled-by-default: false
endpoint:
beans:
enabled: true
health:
enabled: true
===================================================================================
支持的暴露方式
HTTP:默认只暴露 health 和 info Endpoint
JMX:默认暴露所有 Endpoint (例如 Jconsole)
除过 health 和 info,剩下的 Endpoint 都应该进行保护访问。如果引入 SpringSecurity,则会默认配置安全访问规则
==========================================================================
1、定制一个组件的 Health 信息(自定义的 Health 类名必须叫 xxxHealthIndicator.xxx 则是组件名字)
这里定制监控端点有两种方式,一种是实现 HealthIndicator 接口,一种是继承 AbstractHealthIndicator 抽象类
方法一: 继承接口
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
@Component
public class MyHealthIndicator implements HealthIndicator {
@Override
public
Health health() {
int errorCode = check(); // perform some specific health check
if (errorCode != 0) {
return Health.down().withDetail("Error Code", errorCode).build();
}
return Health.up().build();
}
}
构建 Health
Health build = Health.down()
.withDetail("msg", "error service")
.withDetail("code", "500")
.withException(new RuntimeException())
.build();
management:
health:
enabled: true
show-details: always #总是显示详细信息。可显示每个模块的状态信息
方法二:实现抽象类
@Component
public class MyConHealthIndicator extends AbstractHealthIndicator {
//这里可以通过获取容器中某个我们要监测的组件,判断其健康情况,来决定是 up 还是 down
/**
真实的检查方法
@param builder
@throws Exception
*/
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
//mongodb。 获取连接进行测试
Map<String, Object> map = new HashMap<>();
// 检查完成
if (1 == 2) {
// builder.up(); //健康
builder.status(Status.UP);
map.put("count", 1);
map.put("ms", 100);
} else {
// builder.down();
builder.status(Status.OUT_OF_SERVICE);
map.put("err", "连接超时");
map.put("ms", 3000);
}
builder.withDetail("code", 100)
.withDetails(map);
}
}
设置为总是显示详细信息
management:
endpoints:
enabled-by-default: true #暴露所有端点信息
web:
exposure:
include: '*' #以 web 方式暴露
endpoint:
health:
show-details: always #总是显示详细信息。可显示每个模块的状态信息
方式一: 编写配置文件
management:
endpoints:
enabled-by-default: true #暴露所有端点信息
web:
exposure:
include: '*' #以 web 方式暴露
endpoint:
health:
show-details: always #总是显示详细信息。可显示每个模块的状态信息
info:
appName: boot-admin
version: 2.0.1
mavenProjectName: @project.artifactId@ #使用 @@可以获取 maven 的 pom 文件值
mavenProjectVersion: @project.version@
评论