时序数据简介
您可以使用 Grafana Cloud 来避免自行安装、维护和扩展 Grafana 实例。创建一个免费账户,即可开始使用,其中包含对 1 万个指标、50 GB 日志、50 GB 追踪、500 VUh k6 测试等的永久免费访问权限。
想象一下您想了解一天中气温如何变化。您每小时查看一次温度计,记下时间和当前温度。一段时间后,您将得到如下数据:
时间 | 值 |
---|---|
09:00 | 24°C |
10:00 | 26°C |
11:00 | 27°C |
像这样的温度数据就是我们所说的 时序数据 的一个例子——一系列按时间顺序排列的测量值。表中的每一行都代表在特定时间的一次单独测量。
表格在您想要识别单个测量值时很有用,但很难看到整体情况。时序数据更常见的可视化方式是 图表,它将每个测量值沿着时间轴放置。图表等可视化表示形式更容易发现否则难以看到的数据模式和特征。

除了示例中的温度数据外,时序数据还有许多其他例子:
- CPU 和内存使用率
- 传感器数据
- 股票市场指数
虽然这些例子都是按时间顺序排列的测量序列,但它们也具有其他共同属性:
- 新数据以固定间隔附加在末尾——例如,每小时的 09:00、10:00、11:00 等等。
- 添加后很少更新测量值——例如,昨天的温度不会改变。
时序数据非常强大。它们通过让您分析系统在任何时间点的状态来帮助您了解过去。时序数据可以告诉您,在可用磁盘空间降至零后,服务器很快就崩溃了。
时序数据还可以通过揭示数据中的趋势来帮助您预测未来。如果过去几个月注册用户数每月增加 4%,您可以预测到年底的用户基数有多大。
有些时序数据具有在已知周期内重复出现的模式。例如,气温在白天通常较高,而在夜间下降。通过识别这些周期性的,或称为 季节性 的时序数据,您可以对下一周期做出可靠的预测。如果您知道系统负载每天约 18:00 达到峰值,您可以在此之前增加机器。
聚合时序数据
根据您测量的内容,数据差异可能很大。如果您想比较比测量间隔更长的时间段呢?如果您每小时测量一次温度,一天将获得 24 个数据点。要比较多年八月份的温度,您必须将 31 乘以 24 个数据点合并成一个。
合并测量值的集合称为 聚合。聚合时序数据有几种方法。这里是一些常见的方法:
- 平均值 返回所有值的总和除以总值数量。
- 最小值 和 最大值 返回集合中的最小和最大值。
- 总和 返回集合中所有值的总和。
- 计数 返回集合中的值数量。
例如,通过聚合一个月的数据,您可以确定 2017 年 8 月平均温度高于前一年。相反,要查看哪个月份温度最高,您将比较每个月的最高温度。
如何选择聚合时序数据是一个重要的决定,取决于您想通过数据讲述的故事。通常使用不同的聚合方法以不同的方式可视化相同的时序数据。
时序数据和监控
在 IT 行业中,通常收集时序数据来监控基础设施、硬件或应用程序事件等。机器生成的时序数据通常以较短的间隔收集,这使您能够在发生意外更改后立即做出反应。因此,数据积累速度很快,因此高效存储和查询数据至关重要。因此,针对时序数据优化的数据库近年来日益流行。
时序数据库
时序数据库 (TSDB) 是专门为时序数据设计的数据库。虽然可以使用任何普通数据库存储测量值,但 TSDB 具有一些有用的优化。
现代时序数据库利用了测量值只附加而不常更新或删除的事实。例如,每个测量值的 timestamp 随时间变化很小,导致存储冗余数据。
查看以下 Unix timestamp 序列:
1572524345, 1572524375, 1572524404, 1572524434, 1572524464
查看这些 timestamp,它们都以 1572524
开头,导致磁盘空间利用率低下。相反,我们可以将每个后续 timestamp 存储为与第一个 timestamp 的差值,即 delta。
1572524345, +30, +29, +30, +30
我们甚至可以更进一步,计算这些 delta 的 delta。
1572524345, +30, -1, +1, +0
如果测量值以固定间隔采集,这些 delta 的 delta 大多数将为 0。由于这些优化,TSDB 使用的空间比其他数据库少得多。
TSDB 的另一个特点是能够使用 标签 过滤测量值。每个数据点都带有一个标签,添加上下文信息,例如测量是在哪里进行的。这里是一个 InfluxDB 数据格式 的示例,演示了每个测量值是如何存储的。
weather,location=us-midwest temperature=82 1465839830100400200
| -------------------- -------------- |
| | | |
| | | |
+-----------+--------+-+---------+-+---------+
|measurement|,tag_set| |field_set| |timestamp|
+-----------+--------+-+---------+-+---------+
以下是一些 Grafana 支持的 TSDB:
收集时序数据
既然我们有了存储时序数据的地方,那么如何实际收集测量值呢?通常,您会在要监控的设备、机器或实例上安装一个 收集器 来收集时序数据。有些收集器是为特定数据库设计的,有些则支持不同的输出目标。
以下是一些收集器示例:
收集器要么 推 送数据到数据库,要么让数据库从它那里 拉 取数据。这两种方法都有各自的优缺点:
优点 | 缺点 | |
---|---|---|
推送 | 更容易将数据复制到多个目标。 | TSDB 无法控制发送多少数据。 |
拉取 | 更好地控制数据摄取量及其真实性。 | 防火墙、VPN 或负载均衡器可能使访问代理变得困难。 |
由于将每个测量值都写入数据库效率低下,收集器会预先聚合数据并以固定间隔写入时序数据库。