菜单
文档breadcrumb arrow Grafana 文档breadcrumb arrow 简介breadcrumb arrow 时序数据简介
Grafana Cloud Enterprise 开源

时序数据简介

您可以使用 Grafana Cloud 来避免自行安装、维护和扩展 Grafana 实例。创建一个免费账户,即可开始使用,其中包含对 1 万个指标、50 GB 日志、50 GB 追踪、500 VUh k6 测试等的永久免费访问权限。

想象一下您想了解一天中气温如何变化。您每小时查看一次温度计,记下时间和当前温度。一段时间后,您将得到如下数据:

时间
09:0024°C
10:0026°C
11:0027°C

像这样的温度数据就是我们所说的 时序数据 的一个例子——一系列按时间顺序排列的测量值。表中的每一行都代表在特定时间的一次单独测量。

表格在您想要识别单个测量值时很有用,但很难看到整体情况。时序数据更常见的可视化方式是 图表,它将每个测量值沿着时间轴放置。图表等可视化表示形式更容易发现否则难以看到的数据模式和特征。

Temperature data displayed on dashboard

除了示例中的温度数据外,时序数据还有许多其他例子:

  • 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 或负载均衡器可能使访问代理变得困难。

由于将每个测量值都写入数据库效率低下,收集器会预先聚合数据并以固定间隔写入时序数据库。