OpenTsdb官方文档中文版——聚合器

  

? ? OpenTSDB旨在在查询执行的过程中有效地组合多个不同的时间序列。原因在于:当用户查看他们的数据,他们通常会从高层的角度开始提问,例如“数据中心的总吞吐量是多少”或“当前地区用电量是多少”。在查看到这些高层次的值之后,可能会出现一个或多个值,以便用户深入查看更细化的数据集,例如“我的松懈的数据中心每台主机的吞吐量是多少”。我们希望能够轻松地回答这些高层次的问题,也仍然允许深入了解更多的细节。
? ?但是,如何将多个单独的时间序列合并成一系列的数据?聚合函数提供了将不同时间序列合并成一个的数学方法。过滤器用于按标签对结果进行分组,然后将聚合应用与每个分组。聚合类似于SQL的Group By子句,其中用户选择预定义的聚合函数将多个记录合并为单个结果。但是,在TSD中,按照每个时间戳分组聚合一系列记录为一组。
? ?每个聚合器都有两个组件:

  
      <李>函数:应用的数学计算方法,如将所有的值累加在一起,计算出平均值或者筛选出最高(大)值。   <李>插值:处理缺失值的一种方法,例如将时间序列一个在T1有值,但时间序列B没有值。
    ? ?本章将重点介绍在group by上下文中如何使用聚合,例如:即合并多个时间序列为一个时。另外,可以使用聚合器对时间序列进行降采样(即返回一组分辨率较低的结果)。有关更多信息,请参阅降采样。   

    聚合

      

    ? ?将每个时间序列集合聚合或者分组到一个中时,每个时间序列中的时间戳都对齐。然后对于每个时间戳,所有时间序列中的值将聚合为一个新的数值。也就是说,聚合将会在每个时间戳的时间序列上工作。将原始数据视作矩阵或者表,如以下示例所示,该图说明了和聚合器在两个时间序列上的工作原理,A与B合并生成新的输出时间序列。

      
           时间序列   T0   T0 + 10年代   T0 + 20年代   T0 + 30年代   T0 + 40年代   T0 + 50年代               一个   5   5   10   15   20.   5         B   10   5   20.   15   10   0         输出   15   15   10   30.   30.   5            

? ?对于时间戳T0的数据点A和B进行求和,即5 + 10=15,在SQL中:

  
  

从ts_table group by选择(值)和时间戳

     

插值

  

? ?在上面的例子中,时间序列A和B每个时间戳都有数据点,他们排列整齐。然而,当两个序列不会排队时会发生什么?同步所有数据源并同时进行写入可能很困难,有时甚至是不希望的,例如,如果我们有10000个服务器每5分钟发送100个系统指标标准,那么将在一秒钟内突发10米的数据点。我们需要一个非常强大的网络和群集来适应这种流量。更不用说系统会闲置4分59秒。相反,随着时间的推移张开写入更有意义,因此我们平均每秒写入3333次写入,以减少对硬件和网络的要求。

  

? ?如何汇总聚合或找到一个不存在的数值的平均值?第一步就是返回有效的数据点并完成它。然而,如果像上面那样处理了数千个简单未对其的数据点的数据源呢?例如:下图展示了未对齐写入的时间序列,引起的锯齿状线条令人困惑:
 OpenTsdb官方文档中文版——聚合器

  
  
      <李>缺失数据:
    通过“缺失”,只是表示时间序列在给定的时间戳出没有数据点。通常,数据在请求的时间戳之前或者之后简单地进行时间移位,但如果源或TSD中遇到错误并且数据未被记录,它实际上可能会丢失。一些时间序列数据库可能允许在时间戳中用南存储一个表示不可记录的值,但OpenTSDB不允许这样做。   
     

? ?或者,可以<强>简单的忽略强任意缺少数据的给定时间戳的所有时间序列的数据点。但是,如果有两个时间序列,并且它们只是简单的未对齐,即使在存储中有正常的数据,查询也会返回一个空的数据集,所以这不一定非常有用。
? ?另外一个选项是<强>定义一个标量值强(如0或者长期型的最大值),以便在数据点丢失时使用.OpenTSDB2.0和更高版本提供了一些聚合函数,用于替代丢失数据点的标量值,实际上,上图是使用zimsum聚合器生成的,该聚合使用0替换未对齐的值。当处理不同值的时间序列时,这种替代可能非常有用,例如在给定时间内的总销售数量,但在处理平均值或验证可视化图表看起来不错(平缓)时不起作用。

OpenTsdb官方文档中文版——聚合器