DropWizard Metric Meters vs Timers

我正在学习DropWizard Metrics库(以前称为Coda Hale指标),我对何时应该使用vs感到困惑。根据文档:MetersTimers

米:计量器测量一组事件发生的速率

和:

定时器:计时器基本上是一种事件持续时间的直方图,也是其发生速率的米。

基于这些定义,我无法辨别它们之间的区别。让我感到困惑的是,它没有按照我期望的方式使用。对我来说,就是这样:一个计时器;它应该测量 a 和 之间的时间差值。但似乎这也捕获了事件发生的速率,这感觉就像他们在踩脚趾。TimerTimerstart()stop()TimersMeters

如果我可以看到每个组件输出的示例,这可能有助于我了解何时/何地使用其中任何一个。


答案 1

您感到困惑的部分原因是 DW 指标计时器 DW 指标计量器,其中包括 DW 指标计量器。

测量仪专门关注以Hz(每秒事件数)为单位测量的速率。每个计量器都会发布 4(?) 个不同的指标:

  • 自指标启动以来的平均(平均)比率
  • 1、5 和 15 分钟滚动平均速率

您可以通过在代码中的不同点记录一个值来使用计量器 -- DW 指标会自动记下每个呼叫的墙时间以及您为其提供的值,并使用这些值来计算该值增加的速率:

Meter getRequests = registry.meter("some-operation.operations")
getRequests.mark() //resets the value, e.g. sets it to 0
int numberOfOps = doSomeNumberOfOperations() //takes 10 seconds, returns 333
getRequests.mark(numberOfOps) //sets the value to number of ops.

我们预计我们的速率为33.3 Hz,因为发生了333次操作,并且两次调用mark()之间的时间为10秒。

计时器计算上述 4 个指标(将每个 Timer.Context 视为一个事件),并向其中添加许多其他指标:

  • 事件数的计数
  • 自指标开始以来看到的最小、平均和最大持续时间
  • 标准差
  • “直方图”,记录分布在第 50、97、98、99 和 99.95 百分位的持续时间

每个计时器总共报告了 15 个指标。

简而言之:计时器报告了很多指标,它们可能很难理解,但是一旦你这样做,它们就是发现尖峰行为的一种非常强大的方法。


事实是,仅仅收集两点之间的时间并不是一个非常有用的指标。考虑一下:你有一个这样的代码块:

Timer timer = registry.timer("costly-operation.service-time")
Timer.Context context = timer.time()
costlyOperation() //service time 10 ms
context.stop()

让我们假设 它具有恒定的成本,恒定的负载,并在单个线程上运行。在 1 分钟的报告期内,我们应该期望对此操作进行计时 6000 次。显然,我们不会通过有线6000x报告实际服务时间 - 相反,我们需要一些方法来总结所有这些操作以适应我们所需的报告窗口。DW Metrics 的计时器每分钟自动为我们执行此操作一次(我们的报告周期)。5 分钟后,我们的指标注册表将报告:costlyOperation()

  • 速率为 100(每秒事件数)
  • 1 分钟平均速率为 100
  • 5 分钟平均速率为 100
  • 计数 30000(看到的事件总数)
  • 最大 10 (ms)
  • 10 分钟
  • 10 的平均值
  • 第 50 百分位 (p50) 值 10
  • 第 99.9 百分位 (p999) 值为 10

现在,让我们考虑进入一个时间段,在这个时间段内,我们的操作偶尔会在很长一段时间内完全偏离轨道和阻塞:

Timer timer = registry.timer("costly-operation.service-time")
Timer.Context context = timer.time()
costlyOperation() //takes 10 ms usually, but once every 1000 times spikes to 1000 ms
context.stop()

在 1 分钟的收集期内,我们现在将看到不到 6000 次执行,因为每 1000 次执行需要更长的时间。工作到大约5505。在第一分钟(总系统时间 6 分钟)之后,我们现在将看到:

  • 平均速率为 98(每秒事件数)
  • 1 分钟平均速率为 91.75
  • 5 分钟平均速率 98.35
  • 计数 35505(看到的事件总数)
  • 最大持续时间为 1000 (ms)
  • 一分钟持续时间 10
  • 平均持续时间为 10.13
  • 第 50 百分位 (p50) 值 10
  • 第 99.9 百分位 (p999) 值为 1000

如果您绘制此图,您会发现大多数请求(p50,p75,p99等)在10分钟内完成,但1000个请求(p99)中的一个在1s内完成。这也将被视为平均比率略有下降(约2%)和1分钟平均值(近9%)的大幅减少。

如果你只看一下时间平均值(速率或持续时间),你永远不会发现这些峰值 - 当与许多成功的操作平均时,它们会被拖入背景噪声中。同样,仅仅知道最大值也没有帮助,因为它不会告诉你最大值发生的频率。这就是为什么直方图是跟踪性能的强大工具,以及为什么DW Metrics的计时器同时发布速率和直方图。


答案 2