首页 > 解决方案 > 在 Datadog 中表示时间间隔分布图的最佳方法是什么?

问题描述

我有一个处理来自不同设备的数据包的服务器。设备可以按不同的时间间隔进行报告。我想制作一个图表,显示按设备计数的间隔分布(有多少设备在 5 秒/10 秒/60 秒内报告......)每个设备的间隔可能会有所不同。现在,我使用带有代表间隔(5 秒、10 秒、30 秒等)的标签的 deviceId 发送带有Set的指标,但我不确定它是否正确。实现它的最佳方法是什么?

标签: chartsstatisticsdatadogstatsd

解决方案


Set 几乎从来都不是要使用的正确自定义指标类型。它将发送每个给定标签的唯一项目数的计数。基础项目详细信息将从指标中删除,这意味着从一个时间片到下一个时间片,您将不知道随着时间的推移实际真实的项目数。

例如

3:00:07-3:00:32 | 5 second bucket:[device1,device4,device7] -> 3 values
3:00:32-3:00:47 | 5 second bucket:[device1,device3] -> 2 values

您的时间序列到 datadog 将报告3,然后2。但是由于底层设备信息被剥离,如果您及时缩小并汇总数字以显示每分钟 1 个数据点,您不知道如何组合 2 和 3。它可以是从 3 到 5 的任何数字,但 Datadog 后端不知道。(尽管我们知道在这 30 秒内总共有 4 个唯一值)

另外,即使它以某种方式准确,您也无法创建警报或通知任何人,因为如果您在 60 秒存储桶中看到设备数量激增,您将不知道哪个设备出现问题。

因此,让我们来看看其他指标选项。


唯一值得使用的度量类型通常是分布仪表,或 [计数]。

仪表指标只是对某个时间点的延迟的测量,它通常适用于计算机的 CPU 或内存,或房间的温度。不可能实际收集所有数据的数字,因此您只需每 10 秒或每分钟进行一次测量,或者无论多么频繁,您都无法了解行为。

计数指标更准确,它是发生的事情的数量。通常适用于对服务器的请求数或处理的文件数。甚至像流过某事物的字节数之类的东西,尽管大多数人通常将其视为衡量标准。

当您想要创建计量指标时,分布非常有用,但您需要对发生的每个事件进行详细测量。例如,一个 Web 服务器每秒处理数百个请求,我们需要知道该服务器的延迟指标。不可能为每个请求发送延迟指标作为衡量标准。仪表具有每秒 1 个数据点的内置限制(在 Datadog 中)。在 1 秒间隔内发送的任何更多内容都会被丢弃。但是我们需要每个请求的统计信息,因此分布会汇总数据,它会保持运行计数、最小值、最大值、平均值以及可选的几个百分位数(p50、p75、p99)。


除了这 3 种之外,我还没有看到很多关于度量类型的好用例。对于您的场景,您似乎希望发送该设备间隔的分布度量。所以设备 1 发送的值是 10.14,设备 3 发送的值是 2.3,依此类推。

然后,您可以使用仪表板中的分布小部件来显示每个间隔桶的设备数量。

当然,请确保您通过生成指标的设备标记每个指标。


推荐阅读