;Grafana基础知识;时间序列简介

时间序列简介

想象一下,你想知道一天中室外的温度是如何变化的。每隔一小时,你会检查一下温度计,把时间和当前的温度一起写下来。一段时间后,你会看到这样的东西:

时间 价值
09:00 24°C
10:00 26°C
11:00 27°C

像这样的温度数据就是我们所说的时间序列-按时间顺序进行的一系列测量。表中的每一行表示特定时间的一个单独测量值。

当您想要确定单个度量时,表是有用的,但它们使您难以看到总体情况。时间序列更常见的可视化方法是,而是将每个测量值沿时间轴放置。像图形这样的可视化表示可以更容易地发现数据的模式和特征,否则很难看到这些特征。

像这个例子中的温度数据,远远不是时间序列的唯一例子。时间序列的其他例子有:

  • CPU和内存使用率
  • 传感器数据
  • 股票市场指数

虽然这些例子都是按时间顺序排列的测量序列,但它们也具有其他属性:

  • 新数据以一定的间隔(例如,每小时的09:00、10:00、11:00等)追加到最后。
  • 测量值添加后很少更新,例如,昨天的温度没有变化。

时间序列很强大。它们通过让您分析系统在任何时间点的状态来帮助您了解过去。时间序列可以告诉您,服务器在空闲磁盘空间降至零后立即崩溃。

时间序列还可以通过揭示数据中的趋势来帮助您预测未来。如果在过去的几个月里,注册用户的数量以每月4%的速度增长,那么你就可以预测到年底的用户基数会有多大。

一些时间序列具有在已知时间段内重复的模式。例如,温度通常在白天较高,然后在晚上下降。通过识别这些周期性的,或者季节性,时间序列,您可以对下一时期做出自信的预测。如果您知道系统负载在每天18:00左右达到峰值,那么您可以在此之前添加更多的机器。

聚合时间序列

根据您所测量的内容,数据可能会有很大差异。如果您想比较比测量之间的间隔更长的周期,该怎么办?如果你每小时测量一次温度,每天就会得到24个数据点。为了比较历年8月的气温,你必须将31乘以24的数据合并成一个数据点。

组合一组测量被称为聚合.有几种方法可以聚合时间序列数据。以下是一些常见的错误:

  • 平均返回所有值的和除以值的总数。
  • 最小值而且马克斯返回集合中最小和最大的值。
  • 总和返回集合中所有值的和。
  • 返回集合中值的数目。

例如,通过汇总一个月内的数据,你可以确定2017年8月的平均气温比前一年更高。相反,要查看哪个月的温度最高,您可以比较每个月的最高温度。

选择如何聚合时间序列数据是一个重要的决定,取决于您想用数据讲述的故事。通常使用不同的聚合以不同的方式可视化相同的时间序列数据。

时间序列和监控

在IT行业中,经常收集时间序列数据来监视基础设施、硬件或应用程序事件之类的事情。机器生成的时间序列数据通常以短时间间隔收集,这允许您在任何意外变化发生后立即做出反应。因此,数据以快速的速度积累,使得有效地存储和查询数据的方法变得至关重要。因此,针对时间序列数据优化的数据库近年来越来越受欢迎。

时间序列数据库

时间序列数据库(TSDB)是专门为时间序列数据设计的数据库。虽然可以使用任何常规数据库来存储测量值,但TSDB提供了一些有用的优化。

现代时间序列数据库利用了测量值只被添加,很少被更新或删除的事实。例如,每个测量的时间戳随着时间的推移变化很小,这导致存储了冗余数据。

看看下面的Unix时间戳序列:

1572524345, 1572524375, 1572524404, 1572524434, 1572524464

看看这些时间戳,它们都是从1572524,导致磁盘空间使用不佳。相反,我们可以将每个后续时间戳存储为差值,或者δ,来自第一个:

1572524345 +30, +29, +30, +30

我们甚至可以更进一步,通过计算这些delta的delta:

1572524345 +30, -1, +1, +0

如果每隔一定的时间间隔进行测量,那么大部分的delta-of-delta都是0。由于这样的优化,tsdb使用的空间比其他数据库要少得多。

TSDB的另一个特性是过滤测量值的能力标签.每个数据点都用一个标签进行标记,该标签添加了上下文信息,例如测量的位置。这里有一个例子InfluxDB数据格式这演示了如何存储每个测量值。

天气,位置= us-midwest温度= 82 1465839830100400200  | -------------------- -------------- | | | | | | | | | +-----------+--------+-+---------+-+---------+ | 测量|,tag_set | | field_set | |时间戳 | +-----------+--------+-+---------+-+---------+

下面是一些由Grafana支持的tsdb:

收集时间序列数据

现在我们有了存储时间序列的地方,那么我们如何收集测量值呢?要收集时间序列数据,通常需要安装一个收集器在要监视的设备、机器或实例上。有些收集器是针对特定的数据库制作的,有些收集器支持不同的输出目的地。

以下是一些收集者的例子:

一个收藏家数据到数据库或让数据库其中的数据。这两种方法都有各自的优点和缺点:

优点 缺点
更容易将数据复制到多个目的地。 TSDB无法控制发送多少数据。
更好地控制摄取的数据量及其真实性。 防火墙、vpn或负载平衡器会使访问代理变得困难。

由于将每个测量值写入数据库的效率很低,收集器将预先聚合数据并定期写入时间序列数据库。