通用量规位置度设计程序_Spring Boot 2.0的度量标准-计数器和量规

通用量规位置度设计程序

上周,我写了一篇关于如何将指标从Spring Boot 1.5迁移到Spring Boot 2.0的文章。

本周,是时候检查一下Spring Boot 2.0中可用的不同指标以及如何创建它们。

仪表

共有4种主要指标:

  1. 计数器
  2. 测量
  3. 计时器
  4. 发行摘要
为了使帖子可读性很强,将仅限于计数器和仪表

所有度量均继承于基本的Meter类。 Meter提供基本的测量存储功能。 根据文档:

一个或多个度量值的指定名称和尺寸生成器

这是一个简化的类图:

仪表类图

计数器

Counter是一种专用的Meter ,可以增加一个正数(包括0-可以保持不变)。 例如,页面视图的数量可以建模为一个计数器,因为它只能上升。

创建计数器非常简单,所有操作都从MeterRegistry开始。 Spring Boot提供了MeterRegistry bean,因此只需注入它。

@Bean
funsimpleCounter(registry:MeterRegistry)=registry.counter("simple.counter")

还有另一个选择:所有Meter子界面都嵌入了一个流畅的生成器。 该构建器具有register(MeterRegistry)方法。

以下代码段与上面的代码段相同:

@Bean
funsimpleCounter2(registry:MeterRegistry)=Counter
    .builder("simple.counter2")
    .register(registry)
生成器功能通常会更强大,因为它提供了更多选项

Counter一种替代方法是FunctionCounter ,尽管它们在接口方面彼此无关。 FunctionCounter允许跟踪单调递增的函数 -该函数的值只能随时间增加(或保持不变)。

classTrackedObject{

    varvalue:Double=0.0
        get(){
            field+=1
            returnfield
        }
}

@Bean
funtracked()=TrackedObject()

@Bean
funsimpleFunctionCounter(registry:MeterRegistry,
                           tracked:TrackedObject)=registry
            .more()
            .counter("simple.functioncounter",arrayListOf(),tracked){it.value}
@Bean
funsimpleFunctionCounter2(registry:MeterRegistry,
                            tracked:TrackedObject)=FunctionCounter
            .builder("simple.functioncounter2",tracked){it.value}
            .register(registry)
}
Micrometer仅对对象参数(上面的TrackedObject)保持弱引用。 除非应用程序代码对其有很强的引用-就像上面的片段一样,它是应用程序上下文的一部分,否则它将被垃圾回收。 总的来说,这很好。 在此代码段中,这意味着如果未插入tracked,但是该方法创建了一个新的TrackedObject()实例,该指标将很快丢失。

上面两个都将创建一个仪表,在查询后将增加1。 显然,这不是超级有用。 但是,功能计数器可以绑定到有趣的指标:

  • 页面浏览量
  • 缓存逐出
  • 等等
@Bean
funguavaCache(registry:MeterRegistry,guava:GuavaCacheMetrics)=FunctionCounter
        .builder("cache.evictions",guava){it.evictionCount().doubleValue()}
        .register(registry)

Counter类的层次结构如下所示:

柜台类图

测量

尽管计数器必须始终上升,但仪表没有这样的约束:仪表输出一个值,该值与一次调用到下一次调用无关。

要创建量规,请使用Gauge的构建器。

@Bean
funrandom()=SecureRandom()

@Bean
funsimpleGauge(registry:MeterRegistry,random:Random)=Gauge
        .builder("simple.gauge",random)
        {it.nextInt(100).toDouble()}
        .register(registry)

这将创建一个将随机输出值的量规。

MeterRegistry上的静态方法创建一个仪表对象,但不会返回对它的引用,而是返回对参数对象的引用。 它允许“手动”更改仪表的值:

valatomic=ref<MeterRegistry>().gauge("atomic.gauge",AtomicLong())
atomic?.getAndAdd(5)
atomic?.getAndDecrement()
atomic?.getAndSet(1)

另一方面,使用这些方法无法注册bean。

Micrometer提供了专用的量规,即TimeGauge来跟踪时间值。 除了Gauge的值之外,它还添加一个TimeUnit

@Bean
funsimpleTimeGauge(registry:MeterRegistry,random:Random)=TimeGauge
        .builder("simple.timegauge",random,TimeUnit.SECONDS)
        {it.nextInt(100).toDouble()}
        .register(registry)

Gauge类的层次结构如下:

量规类图

结论

在这篇文章中,我们介绍了计数器和仪表。 此外,Micrometer还提供了它们的替代口味,例如功能计数器和时间计。 计数器和仪表的主要区别在于前者的值只能增加,而后者的值从一个数据点到另一个数据点无关。

更进一步:

翻译自: https://blog.frankel.ch/metrics-spring-boot-2/2/

通用量规位置度设计程序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值