概述
指标-自动配置
- 依赖
- SpringBootActuator默认开放指标
- JVM 指标
- 系统指标
- 应用程序启动指标
- 记录器指标
- 任务执行和调度指标
- Spring MVC 指标
- Spring WebFlux 指标
- Jersey Server 指标
- HTTP Client 指标
- Tomcat 指标
- 缓存指标
- Spring GraphQL 指标
- 数据源指标
- Hibernate 指标
- Spring Data Repository 指标
- RabbitMQ 指标
- Spring Integration 指标
- MongoDB 指标
- MongoDB 命令指标
- MongoDB 连接池指标
- Jetty 指标
- Redis 指标
依赖
// actuator依赖提供指标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.6.3</version>
</dependency>
// 将指标转换成prometheus可使用的格式
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.8.2</version>
</dependency>
SpringBootActuator默认开放指标
1、以下指标名称都为prometheus接收的指标名称
2、http://ip:port/actuator/prometheus 此为prometheus默认开放接口,输出prometheus格式
3、http://localhost:11130/actuator/metrics 此为actuator的指标接口,输出当前开放的指标
JVM 指标
自动配置通过使用核心 Micrometer 类启用 JVM Metrics。JVM 指标以jvm.计量名称发布。
提供了以下 JVM 指标:
- 各种内存和缓冲池细节( jvm_buffer开头 )
- 垃圾回收相关统计( jvm_gc开头 )
- 线程利用率( jvm_threads开头 )
- 加载和卸载的类数( jvm_classes开头 )
系统指标
自动配置通过使用核心 Micrometer 类启用系统指标。
提供了以下系统指标:
- CPU 指标( system_cpu开头 )
- 文件描述符指标
- 正常运行时间指标( process开头 )
- 可用磁盘空间( disk_开头 )
应用程序启动指标
自动配置公开应用程序启动时间指标:
- 启动应用程序所用的时间 ( application_started_time_seconds )
- 应用程序准备好为请求提供服务所需的时间 ( application_ready_time_seconds )
记录器指标
自动配置公开 Logback
和 Log4J2
启用事件指标。
- log4j2_events开头
- logback_events开头
任务执行和调度指标
自动配置识别公开 ThreadPoolTaskExecutor
和ThreadPoolTaskScheduler
beans执行。指标包含执行者的名称标记,该名称来自 bean 名称。
- executor开头
Spring MVC 指标
自动配置启用对 Spring MVC 控制器和功能处理程序处理的所有请求的检测。
- 请求指标( http_server_requests开头)
可以通过management.metrics.web.server.request.metric-name
属性来自定义指标开头。
@Timed注解可以标注在@Controller类和@RequestMapping方法上,如果你不想记录所有 Spring MVC 请求的指标,则可以设置management.metrics.web.server.request.autotime.enabled=false
然后单独使用@Timed标注需要开放的请求
默认情况下,与 Spring MVC 相关的指标标记有以下信息:
标签 | 描述 |
---|---|
exception | 处理请求时引发的任何异常的简单类名。 |
method | 请求的方法(例如,GET或POST) |
outcome | 请求的结果,基于响应的状态代码。1xx 是信息性状态码 2xx 是成功状态码 3xx 是重定向状态码 4xx 是客户端异常状态码 5xx 是服务端异常状态码 |
status | 响应的 HTTP 状态代码(例如,200或500) |
uri | 参数替换之前的请求 URI 模板(例如,/api/person/{id}) |
如果要添加默认标签,请提供一个或多个@Bean实现WebMvcTagsContributor
如果要替换默认标签,请提供一个@Bean实现WebMvcTagsProvider
如果要处理所有请求,可以自定义过滤器,添加一个@Bean实现FilterRegistrationBean<WebMvcMetricsFilter>
例如将4xx和5xx异常类型归为同一类
Spring WebFlux 指标
自动配置启用对 Spring WebFlux 控制器和功能处理程序处理的所有请求的检测。
- 请求指标( http_server_requests开头)
可以通过management.metrics.web.server.request.metric-name
属性来自定义指标开头。
@Timed注解可以标注在@Controller类和@RequestMapping方法上,如果你不想记录所有 Spring WebFlux 请求的指标,则可以设置management.metrics.web.server.request.autotime.enabled=false
然后单独使用@Timed标注需要开放的请求
默认情况下,与 Spring WebFlux 相关的指标标记有以下信息:
标签 | 描述 |
---|---|
exception | 处理请求时引发的任何异常的简单类名。 |
method | 请求的方法(例如,GET或POST) |
outcome | 请求的结果,基于响应的状态代码。1xx 是信息性状态码 2xx 是成功状态码 3xx 是重定向状态码 4xx 是客户端异常状态码 5xx 是服务端异常状态码 |
status | 响应的 HTTP 状态代码(例如,200或500) |
uri | 参数替换之前的请求 URI 模板(例如,/api/person/{id}) |
如果要添加默认标签,请提供一个或多个@Bean实现WebFluxTagsContributor
如果要替换默认标签,请提供一个@Bean实现WebFluxTagsProvider
Jersey Server 指标
同 Spring MVC 和 Spring WebFlux类似
HTTP Client 指标
1、要让Spring Boot Actuator 管理RestTemplate
和WebClient
指标。必须使用自动配置的构建器构建实例,并注册为bean。(此方式需要将RestTemplate注册为Bean)
- RestTemplateBuilder可构建RestTemplate
- WebClient.Builder可构建WebClient
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
2、也可以构建时手动添加指标检测的定制器,即MetricsRestTemplateCustomizer
和MetricsWebClientCustomizer
。(此方式不需要将RestTemplate注册为Bean,并能对RestTemplate做定制化)
@Autowired
private MetricsRestTemplateCustomizer metricsRestTemplateCustomizer;
RestTemplate restTemplate = new RestTemplateBuilder()
.additionalCustomizers(metricsRestTemplateCustomizer)
.build();
- 请求指标(http_client_requests开头)
可以通过设置management.metrics.web.client.request.metric-name
属性来自定义名称
默认情况下,与HTTP Client相关的指标标记有以下信息:
标签 | 描述 |
---|---|
clientName | URI 的主要部分 |
method | 请求的方法(例如,GET或POST) |
outcome | 请求的结果,基于响应的状态代码。1xx 是信息性状态码 2xx 是成功状态码 3xx 是重定向状态码 4xx 是客户端异常状态码 5xx 是服务端异常状态码 |
status | 响应的 HTTP 状态代码(例如,200或500)或IO异常(当存在IO情况时)。否则它是客户端异常。 |
uri | 参数替换之前的请求 URI 模板(例如,/api/person/{id}) |
如果要自定义标签,需根据使用的客户端,提供一个@Bean实现RestTemplateExchangeTagsProvider
或者WebClientExchangeTagsProvider
。底层使用RestTemplateExchangeTags
和WebClientExchangeTags
的静态函数设置标签内容。
示例:
@Autowired
private MeterRegistry meterRegistry;
// 此时会覆盖原来的标签
RestTemplateExchangeTagsProvider restTemplateExchangeTagsProvider = new RestTemplateExchangeTagsProvider() {
@Override
public Iterable<Tag> getTags(String urlTemplate, HttpRequest request, ClientHttpResponse response) {
// 此为默认实现
// Tag uriTag = (StringUtils.hasText(urlTemplate) ? RestTemplateExchangeTags.uri(urlTemplate)
// : RestTemplateExchangeTags.uri(request));
// return Arrays.asList(RestTemplateExchangeTags.method(request), uriTag,
// RestTemplateExchangeTags.status(response), RestTemplateExchangeTags.clientName(request),
// RestTemplateExchangeTags.outcome(response));
// 指标key不能为中文。如果为中文,会转换成下划线。
return Arrays.asList(Tag.of("tag1", "指标值"), Tag.of("tag2", "指标值"));
}
};
RestTemplate restTemplate = new RestTemplateBuilder()
.additionalCustomizers(
new MetricsRestTemplateCustomizer( // 自定义指标模板
meterRegistry, // 指标注册器
restTemplateExchangeTagsProvider, // 自定义标签
"http_client_requests12", // 自定义指标名
new AutoTimeProperties())) // Timer指标是否开启,null为不开启。此时须开启,因为Http自动配置的指标都为Timer统计的,后续会讲到。
.build();
结果:
Tomcat 指标
自动配置仅在启用时检测Tomcat 的MBeanRegistry是否启用。默认情况下,MBeanRegistry是禁用,但您可以通过设置server.tomcat.mbeanregistry.enabled=true
启用它。
- 指标( tomcat开头 )
缓存指标
自动配置缓存在启动时检测所有可用实例的。
- 指标(cache开头)
缓存的基本指标进行了标准化。此外,还提供了特定缓存的指标。
支持以下缓存库:
- Cache2k
- Caffeine
- EhCache 2
- Hazelcast
- Any compliant JCache (JSR-107) implementation(所有基于JCache 规则实现的)
- Redis
指标名称由缓存的名称和CacheManager从 bean 名称派生的名称进行生成。
只有在启动时配置的缓存才会绑定到注册表。
对于未在启动时定义的缓存,例如动态创建的缓存或在启动阶段后以编程方式创建的缓存,需要显式注册。可以使用 CacheMetricsRegistrar
这个Bean进行便捷注册。
示例:
@Bean //给容器注册一个Bean,返回缓存管理器,这里有redisTemplate容器,所以会自动注入
public CacheManager MyRedisCacheConfig(RedisTemplate redisTemplate) {
//1.创建RedisCacheWriter
/**
* 非锁方式:nonLockingRedisCacheWriter(RedisConnectionFactory connectionFactory);
* 有锁方式:lockingRedisCacheWriter(RedisConnectionFactory connectionFactory);
*/
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(Objects.requireNonNull(redisTemplate.getConnectionFactory()));
//2.创建Jackson对象并传入需要序列化的对象
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
//3.传入 Jackson对象 并获取 RedisSerializationContext对象
RedisSerializationContext<Object, Object> serializationContext = RedisSerializationContext.fromSerializer(serializer);
//4.配置RedisCacheConfiguration
/**
* RedisCacheConfiguration.defaultCacheConfig()
* 设置 value 的序列化 serializeValuesWit(SerializationPari<?> valueSerializationPari)
* 设置 key 的序列化 serializeKeysWith(SerializationPari valueSerializationPari)
*/
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(serializationContext.getValueSerializationPair());
//5.创建RedisCacheManager(RedisCacheWriter redisCacheWriter, RedisCacheConfiguration redisCacheConfiguration)对象并返回
return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
}
@Bean
public String test(CacheManager cacheManager){
cacheManager.getCache("test").put("key","value");
return cacheManager.getCache("test").get("key").get().toString();
}
结果:
本人自测无效场景:
- 运行时添加的缓存
- 生成Bean时使用RedisTemplate进行添加
- @PostConstruct初始化时使用CacheManager添加
- 未注册CacheManager Bean时
初步判断是该功能更多的对@CacheConfig使用的缓存进行自动添加指标
Spring GraphQL 指标
自动配置启用 GraphQL 查询的检测。
本人暂未测试使用。可查看官网描述
数据源指标
自动配置启用数据源检测。
- 当前活动连接数( jdbc_connections_active )
- 当前空闲连接数( jdbc_connections_idle )
- 最大的空闲的连接数 ( jdbc_connections_min )
- 最小的空闲的连接数( jdbc_connections_max )
默认情况下,Spring Boot 为所有支持连接的数据源提供默认指标。如果不适配您喜欢的数据源,可通过添加DataSourcePoolMetadataProvider
Bean。
此外,Hikari 的指标以hikaricp前缀公开。每个指标都由连接池的名称标记(您可以使用 spring.datasource.name
控制它)。
示例:默认支持
spring:
datasource:
url: jdbc:mysql://localhost:3306/mysql
password: root
username: root
driver-class-name: com.mysql.cj.jdbc.Driver
示例(Druid):默认不支持
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/mysql
password: root
username: root
driver-class-name: com.mysql.cj.jdbc.Driver
max-wait: 60000
max-active: 100
initial-size: 10
调整方式:注册DataSourcePoolMetadataProvider Bean
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.jdbc.DataSourceUnwrapper;
import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* <p>
*
* </p>
*
* @author LuoWenFeng
*/
@Configuration
public class DataSourceConfig {
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({DruidDataSource.class})
static class DruidDataSourceMetadataProviderConfiguration {
DruidDataSourceMetadataProviderConfiguration() {
}
@Bean
DataSourcePoolMetadataProvider DruidDataSourceMetadataProvider() {
return (dataSource) -> {
DruidDataSource dbcpDataSource = DataSourceUnwrapper.unwrap(dataSource, DruidDataSource.class);
return dbcpDataSource != null ? new DruidDataSourcePoolMetadata(dbcpDataSource) : null;
};
}
}
}
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.jdbc.metadata.AbstractDataSourcePoolMetadata;
/**
* <p>
*
* </p>
*
* @author LuoWenFeng
*/
public class DruidDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata<DruidDataSource> {
/**
* Create an instance with the data source to use.
*
* @param dataSource the data source
*/
protected DruidDataSourcePoolMetadata(DruidDataSource dataSource) {
super(dataSource);
}
@Override
public Integer getActive() {
try {
return getDataSource().getActiveCount();
} catch (Exception ex) {
return null;
}
}
@Override
public Integer getIdle() {
try {
return (int) getDataSource().getConnectCount();
} catch (Exception ex) {
return null;
}
}
@Override
public Integer getMax() {
return getDataSource().getMaxIdle();
}
@Override
public Integer getMin() {
return getDataSource().getMinIdle();
}
@Override
public String getValidationQuery() {
return getDataSource().getValidationQuery();
}
@Override
public Boolean getDefaultAutoCommit() {
return getDataSource().isDefaultAutoCommit();
}
}
Hibernate 指标
本人暂未测试使用。可查看官网描述
Spring Data Repository 指标
自动配置启用 Spring Data Repository 方法调用的检测。
- 指标(spring_data_repository_invocations开头 )
可以通过设置management.metrics.data.repository.metric-name
属性来自定义名称。
@Timed注解可以标注在@Repository类和方法上,如果你不想记录所有 Repository 调用的指标,则可以设置management.metrics.data.repository.autotime.enabled=false
然后单独使用@Timed标注需要开放的请求
默认情况下,与存储库调用相关的指标标记有以下信息:
标签 | 描述 |
---|---|
repository | Repository的简单类名。 |
method | Repository被调用的方法的名称。 |
state | 结果状态(SUCCESS、ERROR、CANCELED或RUNNING)。 |
exception | 从调用中引发的任何异常的简单类名。 |
如果要替换默认标签,请提供一个@Bean实现RepositoryTagsProvider
RabbitMQ 指标
- 指标(rabbitmq开头 )
Spring Integration 指标
- 指标(spring_integration开头 )
本人暂未测试使用。可查看官网描述
MongoDB 指标
MongoDB 命令指标
自动配置会注册MongoMetricsCommandListener
到自动配置的MongoClient
。
- 指标(mongodb_driver_commands开头 )
默认情况下,每个指标都有以下标记信息:
标签 | 描述 |
---|---|
command | 发出的命令的名称。 |
cluster_id | 命令发送到的集群的标识符。 |
server_address | 命令发送到的服务器的地址。 |
status | 命令的结果(SUCCESS或FAILED)。 |
如果要替换默认标签,请提供一个@Bean实现MongoCommandTagsProvider
如果要禁用自动配置的命令指标,可以设置management.metrics.mongo.command.enabled=false
MongoDB 连接池指标
自动配置会注册MongoMetricsConnectionPoolListener
到自动配置的MongoClient
。
- 当前连接池的大小,包括空闲和活跃的成员(mongodb_driver_pool_size)
- 当前活跃的连接数(mongodb_driver_pool_checkedout)
- 当前连接池等待队列的大小(mongodb_driver_pool_waitqueuesize)
默认情况下,每个指标都有以下标记信息:
标签 | 描述 |
---|---|
cluster_id | 连接池对应的集群的标识。 |
server_address | 连接池对应的服务器地址。 |
如果要替换默认标签,请提供一个@Bean实现MongoConnectionPoolTagsProvider
如果要禁用自动配置的连接池指标,可以设置management.metrics.mongo.connectionpool.enabled=false
Jetty 指标
当server.ssl.enabled=rue
时,Micrometer
绑定JettySslHandshakeMetrics
本人暂未测试使用。可查看官网描述
Redis 指标
自动配置会注册MicrometerCommandLatencyRecorder
到自动配置的LettuceConnectionFactory
最后
以上就是正直美女为你收集整理的Springboot整合Prometheus-自动配置指标依赖SpringBootActuator默认开放指标的全部内容,希望文章能够帮你解决Springboot整合Prometheus-自动配置指标依赖SpringBootActuator默认开放指标所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复