java metrics.counter_度量指标(Metrics)

44. 度量指标(Metrics)

Spring Boot执行器包括一个支持'gauge'和'counter'级别的度量指标服务。'gauge'记录一个单一值;'counter'记录一个增量(增加或减少)。同时,Spring Boot提供一个PublicMetrics接口,你可以实现它,从而暴露以上两种机制不能记录的指标。具体参考SystemPublicMetrics。

所有HTTP请求的指标都被自动记录,所以如果点击metrics端点,你可能会看到类似以下的响应:

{

"counter.status.200.root": 20,

"counter.status.200.metrics": 3,

"counter.status.200.star-star": 5,

"counter.status.401.root": 4,

"gauge.response.star-star": 6,

"gauge.response.root": 2,

"gauge.response.metrics": 3,

"classes": 5808,

"classes.loaded": 5808,

"classes.unloaded": 0,

"heap": 3728384,

"heap.committed": 986624,

"heap.init": 262144,

"heap.used": 52765,

"mem": 986624,

"mem.free": 933858,

"processors": 8,

"threads": 15,

"threads.daemon": 11,

"threads.peak": 15,

"uptime": 494836,

"instance.uptime": 489782,

"datasource.primary.active": 5,

"datasource.primary.usage": 0.25

}

此处我们可以看到基本的memory,heap,class loading,processor和thread pool信息,连同一些HTTP指标。在该实例中,root('/'),/metrics URLs分别返回20次,3次HTTP 200响应。同时可以看到root URL返回了4次HTTP 401(unauthorized)响应。双asterix(star-star)来自于被Spring MVC /**匹配到的一个请求(通常为一个静态资源)。

gauge级别展示了一个请求的最后响应时间。所以,root的最后请求被响应耗时2毫秒,/metrics耗时3毫秒。

44.1. 系统指标

Spring Boot暴露以下系统指标:

系统内存总量(mem),单位:Kb

空闲内存数量(mem.free),单位:Kb

处理器数量(processors)

系统正常运行时间(uptime),单位:毫秒

应用上下文(就是一个应用实例)正常运行时间(instance.uptime),单位:毫秒

系统平均负载(systemload.average)

堆信息(heap,heap.committed,heap.init,heap.used),单位:Kb

线程信息(threads,thread.peak,thead.daemon)

类加载信息(classes,classes.loaded,classes.unloaded)

垃圾收集信息(gc.xxx.count, gc.xxx.time)

44.2. 数据源指标

Spring Boot会为你应用中定义的支持的DataSource暴露以下指标:

最大连接数(datasource.xxx.max)

最小连接数(datasource.xxx.min)

活动连接数(datasource.xxx.active)

连接池的使用情况(datasource.xxx.usage)

所有的数据源指标共用datasoure.前缀。该前缀对每个数据源都非常合适:

如果是主数据源(唯一可用的数据源或存在的数据源中被@Primary标记的)前缀为datasource.primary

如果数据源bean名称以dataSource结尾,那前缀就是bean的名称去掉dataSource的部分(例如,batchDataSource的前缀是datasource.batch)

其他情况使用bean的名称作为前缀

通过注册一个自定义版本的DataSourcePublicMetrics bean,你可以覆盖部分或全部的默认行为。默认情况下,Spring Boot提供支持所有数据源的元数据;如果你喜欢的数据源恰好不被支持,你可以添加另外的DataSourcePoolMetadataProvider beans。具体参考DataSourcePoolMetadataProvidersConfiguration。

44.3. Tomcat session指标

如果你使用Tomcat作为内嵌的servlet容器,session指标将被自动暴露出去。

httpsessions.active和httpsessions.max提供了活动的和最大的session数量。

44.4. 记录自己的指标

想要记录你自己的指标,只需将CounterService或GaugeService注入到你的bean中。CounterService暴露increment,decrement和reset方法;GaugeService提供一个submit方法。

下面是一个简单的示例,它记录了方法调用的次数:

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.actuate.metrics.CounterService;

import org.springframework.stereotype.Service;

@Service

public class MyService{

private final CounterService counterService;

@Autowired

public MyService(CounterService counterService){

this.counterService = counterService;

}

public void exampleMethod(){

this.counterService.increment("services.system.myservice.invoked");

}

}

注:你可以将任何的字符串用作指标的名称,但最好遵循所选存储或图技术的指南。Matt Aimonetti’s Blog中有一些好的关于图(Graphite)的指南。

44.5. 添加你自己的公共指标

想要添加额外的,每次指标端点被调用时都会重新计算的度量指标,只需简单的注册其他的PublicMetrics实现bean(s)。默认情况下,端点会聚合所有这样的beans,通过定义自己的MetricsEndpoint可以轻易改变这种情况。

44.6. 指标仓库

通过绑定一个MetricRepository来实现指标服务。MetricRepository负责存储和追溯指标信息。Spring Boot提供一个InMemoryMetricRepository和一个RedisMetricRepository(默认使用in-memory仓库),不过你可以编写自己的MetricRepository。MetricRepository接口实际是MetricReader接口和MetricWriter接口的上层组合。具体参考Javadoc

没有什么能阻止你直接将MetricRepository的数据导入应用中的后端存储,但我们建议你使用默认的InMemoryMetricRepository(如果担心堆使用情况,你可以使用自定义的Map实例),然后通过一个scheduled export job填充后端仓库(意思是先将数据保存到内存中,然后通过异步job将数据持久化到数据库,可以提高系统性能)。通过这种方式,你可以将指标数据缓存到内存中,然后通过低频率或批量导出来减少网络拥堵。Spring Boot提供一个Exporter接口及一些帮你开始的基本实现。

44.7. Dropwizard指标

Dropwizard ‘Metrics’库的用户会发现Spring Boot指标被发布到了com.codahale.metrics.MetricRegistry。当你声明对io.dropwizard.metrics:metrics-core库的依赖时会创建一个默认的com.codahale.metrics.MetricRegistry Spring bean;如果需要自定义,你可以注册自己的@Bean实例。来自于MetricRegistry的指标也是自动通过/metrics端点暴露的。

用户可以通过使用合适类型的指标名称作为前缀来创建Dropwizard指标(比如,histogram.*, meter.*)。

44.8. 消息渠道集成

如果你的classpath下存在'Spring Messaging' jar,一个名为metricsChannel的MessageChannel将被自动创建(除非已经存在一个)。此外,所有的指标更新事件作为'messages'发布到该渠道上。订阅该渠道的客户端可以进行额外的分析或行动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值