繁体   English   中英

DropWizard 指标仪表与计时器

[英]DropWizard Metrics Meters vs Timers

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

仪表:仪表测量一组事件发生的速率

和:

计时器:计时器基本上是一种事件持续时间的直方图和其发生率的计量表

根据这些定义,我无法辨别它们之间的区别。 让我感到困惑的是Timer没有按照我预期的方式使用它。 对我来说, Timer就是:一个定时器; 它应该测量start()stop()之间的时间差异。 但似乎Timers也捕捉事件发生的速率,感觉就像他们踩着Meters脚趾一样。

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

您感到困惑的部分原因是 DW Metrics TimerDW Metrics Meter。

Meter 只与速率有关,以 Hz(每秒事件数)为单位。 每个 Meter 导致发布 4(?) 个不同的指标:

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

您可以通过在代码中的不同点记录一个值来使用 Meter -- DW Metrics 会自动记下每次调用的挂壁时间以及您给它的值,并使用这些来计算该值增加的速率:

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 秒。

Timer 计算上述 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()

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

  • 速率为 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
  • 98.35 的 5 分钟平均速率
  • 计数 35505(看到的事件总数)
  • 最大持续时间为 1000 (ms)
  • 最短持续时间 10
  • 平均持续时间 10.13
  • 第 50 个百分位数 (p50) 值为 10
  • 1000 的第 99.9 个百分位数 (p999) 值

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

如果您只查看时间平均值(速率或持续时间),您将永远不会发现这些尖峰——当对许多成功操作进行平均时,它们会被拖入背景噪音中。 同样,仅仅知道最大值也无济于事,因为它不会告诉您最大值出现的频率。 这就是直方图是跟踪性能的强大工具的原因,也是 DW Metrics 的计时器发布速率和直方图的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM