OpenTSDB 向下采样说明

Downsampling

原文地址:http://opentsdb.net/docs/build/html/user_guide/query/downsampling.html

向下采样(或在信号处理中,抽取)是降低数据采样率或分辨率的过程。 例如,假设温度传感器每秒向 OpenTSDB 系统发送数据。 如果用户在一个小时的时间内查询数据,他们将收到 3,600 个数据点,这些数据可以很容易地绘制成图表。 然而,现在如果用户要求提供整整一周的数据,他们将收到 604,800 个数据点,并且图表可能会突然变得非常混乱。 使用下采样器,单个时间序列的时间范围内的多个数据点与数学函数一起聚合为一个对齐时间戳的单个值。 通过这种方式,我们可以将值的数量从 604,800 减少到 168。

下采样器至少需要两个组件:

  • Interval - 聚合值的时间范围(或 bucket)。 例如,我们可以聚合 1 分钟或 1 小时甚至一整天的多个值。 间隔以 <Size><Units> 格式指定,例如 1h 表示 1 小时或 30m 表示 30 分钟。 从 2.3 开始,all 间隔现在可用于将时间范围内的所有结果下采样到一个值。 例如。 0all-sum 将对从查询开始到结束的所有值求和。 请注意,仍然需要一个数值,但它可以是零或任何其他值。
  • Aggregation Function - 确定如何合并区间中的值的数学函数。 Aggregation 文档中的聚合函数用于该函数。

例如,采用以下时间序列 A 和 B。数据点涵盖 70 秒的时间跨度,每 10 秒一个值。 假设我们想将采样时间缩减到 30 秒,因为用户正在查看更广泛的时间跨度的图表。 此外,我们使用总和聚合器将这两个系列合二为一。 我们可以指定一个 30s-sum 的下采样器,它将创建 30 秒的存储桶并对每个存储桶中的所有数据点求和。 这将为我们提供每个系列的三个数据点:

Time Seriest0t0+10st0+20st0+30st0+40st0+50st0+60s
A5510152051
A sum Downsampled5 + 5 + 10 = 2015 + 20 + 5 = 401 = 1
B10520151005
B sum Downsampled10 + 5 + 20 = 3515 + 10 + 0 = 255 = 5
sum Aggregated Result55656

如您所见,对于每个时间序列,我们生成一个合成序列,其时间戳在间隔边界(每 30 秒)上标准化,以便我们在 t0、t0+30s 和 t0+60s 处有一个值。 每个间隔或存储桶将包含包含存储桶时间戳(开始)和不包括后续存储桶时间戳(结束)的数据点。 在这种情况下,第一个桶将从 t0 扩展到 t0+29.9999s。 使用提供的聚合器,所有值都合并为一个新值。 例如。 对于系列 A,我们将 t0、t0+10s 和 t0+20s 的值相加,得出 t0 处的新值 20。 最后,使用 sum 对查询进行分组,以便我们添加两个合成时间序列。 这时候OpenTSDB总是在下采样后进行group-by聚合。

对于 OpenTSDB 的早期版本,新数据点的实际时间戳将是时间跨度中每个数据点的时间戳的平均值。 从 2.1 及更高版本开始,每个点的时间戳都根据当前时间和下采样间隔的模数与时间段的开始对齐。

下采样时间戳基于原始数据点时间戳的剩余部分除以以毫秒为单位的下采样间隔(即模数)进行归一化。 在 Java 中,代码是timestamp - (timestamp % interval_ms)。 例如,给定时间戳 1388550980000,或 1/1/2014 04:36:20 UTC 和等于 3600000 毫秒的每小时间隔,生成的时间戳将四舍五入为 1388548800000。4 到 5 UTC 之间的所有数据点 在凌晨 4 点的桶中。 如果您在 1 小时内查询一天的数据降采样,您将收到 24 个数据点(假设所有 24 小时都有数据)。

当使用 0all-interval 时,结果的时间戳将是查询的开始时间。

规范化对于常见查询非常有效,例如将一天的数据降采样到 1 分钟或 1 小时。 但是,如果您尝试以奇数间隔(例如 36 分钟)进行下采样,则由于模数计算的性质,时间戳可能看起来有点奇怪。 给定 36 分钟的间隔和我们上面的示例,间隔将为 2160000 毫秒,结果时间戳为 138854952004:12:00 UTC04:1204:48 之间的所有数据点都将集中在一个桶中。

Calendar Boundaries

从 OpenTSDB 2.3 开始,用户可以指定基于日历的下采样而不是快速模数方法。这对于报告目的更有用,例如查看与人类时间相关的值,例如月、周或天。此外,下采样可以考虑时区并结合夏令时转换和区域偏移。

要使用日历边界,请查看您从中进行查询的端点的文档。例如,V2 URI 端点具有要使用的特定时区参数,例如 &timezone=Asia/Kabul,并且通过将 c 附加到间隔时间单位(如 &m=sum:1dc-sum:my.metric)来启用基于日历的下采样。对于 JSON 查询,在顶层使用单独的时区字段以及useCalendar 布尔标志。如果未提供时区,则日历使用 UTC 时间。

使用日历下采样,第一个时间间隔会捕捉到指定时区中查询年份的 1 月 1 日 00:00:00。从那里开始计算间隔桶,直到查询结束。每个桶都标有桶开始的时间戳,包括在内,并包括直到下一个桶开始的所有值,不包括在内。

Fill Policies

下采样通常用于对齐时间戳以避免在执行分组时进行插值。 由于 OpenTSDB 不会对时间对齐或值应该存在的时间施加约束,因此必须在查询时指定此类约束。 使用下采样执行分组聚合时,如果所有系列都缺少预期间隔的值,则不会发出任何内容。 例如,如果一个系列每分钟从 t0t0+6m 写入数据,但由于某种原因源无法在t0+3m 写入数据,那么当用户可能期望 6 时,只会序列化 5 个值。 使用填充策略 2.2 及更高版本,您现在可以选择为t0+3m 发出什么值,以便用户(或应用程序)将看到特定时间戳缺少某个值,而不必弄清楚缺少哪个时间戳。 只要下采样桶为空,填充策略就会简单地发出一个预定义的值。

可用的策略包括:

  • None (none) - 在序列化期间不发出缺失值并在聚合系列时执行线性插值(或以其他方式指定的插值)的默认行为。
  • NaN (nan) -当序列中的所有值都丢失时,在序列化输出中发出NaN。 当值缺失时跳过聚合中的系列,而不是将整个 group-by 计算转换为 NaN。
  • Null (null) - 与 NaN 相同的行为,除了在序列化期间它发出 null 而不是 NaN.
  • Zero (zero) - 缺少时间戳时替换零。 零值将包含在汇总结果中.

要使用填充策略,请将策略名称(括号中的术语)附加到由连字符分隔的下采样聚合函数的末尾。 例如。 1h-sum-nan1m-avg-zero

在这个例子中,我们每 10 秒报告一次数据,我们希望通过每 10 秒下采样并通过 10s-sum-nan 用 NaN 填充缺失值来强制执行 10 秒报告的查询时间策略:

Time Seriest0t0+10st0+20st0+30st0+40st0+50st0+60s
A155
B102020
A sum DownsampledNaNNaNNaN15NaN5NaN
B sum Downsampled10NaN20NaNNaNNaN20
sum Aggregated Result10NaN2015NaN520

If we requested the output without a fill policy, no value or timestamp at t0+20s or t0+40s would be emitted. Additionally, values at t0+30s and t0+50s for series B would be linearly interpolated to fill in values to be summed with series A.

如果我们在没有填充策略的情况下请求输出,则不会发出 t0+20st0+40s 处的值或时间戳。 此外,B系列的t0+30st0+50s处的值将被线性插值以填充与A系列相加的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
采样(或信号处理,抽取)是降低数据采样率或分辨率的过程。例如,假设温度传感器每秒向OpenTSDB系统发送数据。如果用户在一小时的时间跨度内查询数据,他们将收到3,600个数据点,这些数据点可以很容易地绘制出来。但是现在,如果用户要求整整一周的数据,他们将收到604,800个数据点,突然之间图形可能变得非常混乱。使用下采样器,单个时间序列的时间范围内的多个数据点与数学函数一起聚合成对齐时间戳的单个值。这样我们可以减少从604,800到168的值的数量。 下采样器至少需要两个组件: 间隔 - 聚合值的时间范围(或桶)。例如,我们可以聚合多个值1分钟或1小时甚至一整天。间隔在格式指定如1h1小时或30m30分钟。从2.3开始,all间隔现在可用于将时间范围内的所有结果下采样到一个值。例如,0all-sum将从查询开始到结束的所有值相加。请注意,仍然需要数值,但它可以是零或任何其他值。 聚合函数 - 确定如何合并区间的值的数学函数。从聚合函数聚合文档被用于该功能。 例如,采用以下时间序列A和B。数据点覆盖70秒的时间跨度,每10秒钟一次。假设我们想要缩短采样到30秒,因为用户正在查看更长时间跨度的图表。另外,我们使用sum聚合器将这两个系列分组为一个。我们可以指定一个下采样器30s-sum,它将创建30秒的存储桶并对每个存储桶的所有数据点求和。这将为每个系列提供三个数据点:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值