本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建您的第一个控制面板
创建控制面板
按照以下步骤在 Grafana 控制台中创建控制面板。
创建您的第一个控制面板
-
选择左侧面板上的 + 图标,选择 “创建仪表板”,然后选择 “添加新面板”。
-
在 “新建仪表板”/“编辑面板” 视图中,选择 “查询” 选项卡。
-
通过选择要查询的数据源来配置查询。例如,如果您将 TestDB 添加为数据源,则会生成一个名为 Random Walk 仪表板的示例仪表板。
时间序列简介
想象一下,你想知道外面的温度在一天中是如何变化的。每小时检查一次,你要检查一次温度计,记下时间和当前温度。过了一会儿,你就会得到类似以下的数据。
时间 | 值 |
---|---|
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个数据点合并为一个。
合并一组测量值称为聚合。有几种方法可以聚合时间序列数据。以下是一些常见的:
-
A verage 返回所有值的总和除以值的总数。
-
M@@ in 和 Max 返回集合中最小和最大的值。
-
Sum 返回集合中所有值的总和。
-
C@@ ount 返回集合中值的数量。
例如,通过汇总一个月内的数据,可以确定 2017 年 8 月的平均温度比前一年温暖。如果你想看看哪个月份的温度最高,你可以比较每个月的最高温度。
如何汇总时间序列数据是一个重要的决定,这取决于你想用数据讲述的故事。通常使用不同的聚合以不同的方式可视化相同的时间序列数据。
时间序列和监控
在 IT 行业中,收集时间序列数据通常用于监控基础架构、硬件或应用程序事件之类的内容。机器生成的时间序列数据通常以较短的时间间隔收集,因此您可以在任何意外变化发生后立即做出反应。数据积累速度很快,因此拥有一种高效存储和查询数据的方法至关重要。因此,针对时间序列数据进行了优化的数据库近年来越来越受欢迎。
时间序列数据库
时间序列数据库 (TSDB) 是专门为时序数据设计的数据库。虽然可以使用任何常规数据库来存储测量值,但TSDB提供了一些有用的优化。
现代 TSDB 利用了这样一个事实,即测量值只会被追加,很少更新或删除。例如,每次测量的时间戳随着时间的推移几乎没有变化,这会导致存储冗余数据。
以下示例显示了一系列 Unix 时间戳。
1572524345, 1572524375, 1572524404, 1572524434, 1572524464
从这些时间戳来看,它们都是从一1572524
开始就导致磁盘空间使用不当的。相反,您可以将每个后续时间戳存储为与第一个时间戳的差异或增量,如以下示例所示。
1572524345, +30, +29, +30, +30
您甚至可以通过计算这些增量的增量来更进一步,如以下示例所示。
1572524345, +30, -1, +1, +0
如果定期进行测量,则大多数测量值 delta-of-deltas 将为 0。由于进行了这样的优化,TSDB 使用的空间要比其他数据库少得多。
TSDB 的另一个特点是能够使用标签筛选测量值。每个数据点都标有一个标签,该标签添加了上下文信息,例如测量地点。
Grafana 支持以下 tsDB:
-
weather,location=us-midwest temperature=82 1465839830100400200 | -------------------- -------------- | | | | | | | | | +-----------+--------+-+---------+-+---------+ |measurement|,tag_set| |field_set| |timestamp| +-----------+--------+-+---------+-+---------+
收集时间序列数据
既然你有地方可以存储你的时间序列,那么你实际上是如何收集测量值的? 要收集时间序列数据,通常需要在要监控的设备、计算机或实例上安装收集器。有些收集器是在考虑特定数据库的情况下制作的,有些则支持不同的输出目的地。
以下是一些收藏家的例子:
收集器要么将数据推送到数据库,要么让数据库从收集器中提取数据。每种方法都有自己的优缺点。
优点 | 缺点 | |
---|---|---|
Push(推送) | 更容易将数据复制到多个目的地。 | TSDB 无法控制发送多少数据。 |
拉取 | 更好地控制数据采集方式和数据真实性。 | 防火墙、VPN 或负载均衡器可能会使访问代理变得困难。 |
由于将每个测量值写入数据库效率低下,因此收集器会预先聚合数据并定期写入 TSDB。
时间序列维度
对于时间序列数据,数据通常是一组多个时间序列。许多 Grafana 数据源都支持这种类型的数据。
常见的情况是使用一个或多个附加属性作为维度的测量发出单个查询。例如,您可以查询温度测量值和位置属性。在这种情况下,将从该单个查询返回多个系列,并且每个系列都具有唯一的维度位置。
为了识别一组时间序列中的唯一序列,Grafana 在标签中存储维度。
标签
Grafana 中的每个时间序列都有可选的标签。标签是一组用于标识维度的键值对。示例标签为{location=us}
或{country=us,state=ma,city=boston}
。在一组时间序列中,其名称和标签的组合标识每个序列。例如,temperature {country=us,state=ma,city=boston}
。
不同的时间序列数据源具有本机存储的维度,或者使用常见的存储模式,可以将数据提取到维度中。
通常,TSDB 本身就支持维度。Prometheus 将尺寸存储在标签中。在诸如 Graphite 或 OpenTSDB 之类的 tsDB 中,改用术语标签。
在诸如 SQL 之类的表数据库中,这些维度通常是查询的GROUP
BY
参数。
表格格式的多个维度
在返回表响应的 SQL 或类似 SQL 的数据库中,其他维度通常是查询响应表中的列。
单一维度
例如,考虑一个类似于以下示例的查询。
SELECT BUCKET(StartTime, 1h), AVG(Temperature) AS Temp, Location FROM T GROUP BY BUCKET(StartTime, 1h), Location ORDER BY time asc
该查询可能会返回一个包含三列的表。
StartTime | 临时文件 | 位置 |
---|---|---|
09:00 | 24 | LGA |
09:00 | 20 | BOS |
10:00 | 26 | LGA |
10:00 | 22 | BOS |
表格格式为长格式化时间序列,也称为 t all。它有重复的时间戳,并在 “位置” 中重复了值。在这种情况下,集合中的两个时间序列将被标识为Temp {Location=LGA}
和Temp
{Location=BOS}
。
使用以下维度从集合中提取单个时间序列:
-
时间类型列
StartTime
作为时间序列的时间索引 -
以数字键入的列
Temp
作为系列名称 -
用于构建标签的字符串类型
Location
列的名称和值,例如 location=LGA
多个维度
如果更新查询以按多个字符串列进行选择和分组(例如,GROUP BY BUCKET(StartTime, 1h), Location,
Sensor
),则会添加一个额外的维度。
StartTime | 临时文件 | 位置 | 传感器 |
---|---|---|---|
09:00 | 24 | LGA | A |
09:00 | 24.1 | LGA | B |
09:00 | 20 | BOS | A |
09:00 | 20.2 | BOS | B |
10:00 | 26 | LGA | A |
10:00 | 26.1 | LGA | B |
10:00 | 22 | BOS | A |
10:00 | 22.2 | BOS | B |
在本例中,代表维度的标签有两个基于两个字符串类型的列的键,Location
和Sensor
。数据产生四个系列:
-
Temp {Location=LGA,Sensor=A}
-
Temp {Location=LGA,Sensor=B}
-
Temp {Location=BOS,Sensor=A}
-
Temp {Location=BOS,Sensor=B}
注意
注意:在 Grafana 中,不支持以映射到多个警报的方式支持多个维度。相反,它们被视为单个警报的多个条件。
多个值
对于类似 SQL 的数据源,可以选择多个数值列,也可以选择是否使用其他字符串列作为维度;例如,。AVG(Temperature) AS AvgTemp, MAX(Temperature)
AS MaxTemp
如果与多个维度相结合,则可以生成多个序列。目前,选择多个值的设计仅用于可视化。
直方图和热图简介
直方图是数字数据分布的图形表示。它将值分组为存储桶(有时也称为数据桶)。然后,它会计算每个存储桶中有多少值。
直方图不是绘制实际值的图表,而是绘制桶的图表。每个条形代表一个存储桶,条形高度表示落入该存储桶间隔内的值的频率(例如计数)。
直方图仅查看特定时间范围内的价值分布。直方图的问题在于,您看不到分布随时间的推移而出现的任何趋势或变化。这就是热图变得有用的地方。
热图
热图就像一段时间内的直方图,其中每个时间片都代表自己的直方图。它不使用条形高度作为频率的表示形式,而是使用单元格,对单元格进行与桶中值的数量成比例的着色。
预先存储桶的数据
许多数据源都支持随时间变化的直方图,包括:
-
Amazon OpenSearch 服务(使用直方图存储桶聚合)
-
Prometheus(直方图指标类型和 “
格式为” 选项设置为 “热图”)
通常,您可以使用任何数据源,这些数据源返回名称表示存储桶绑定的序列,或者返回按界限升序排序的序列。
原始数据与聚合数据
如果您将热图与常规时间序列数据(不是预先存储桶)一起使用,请务必记住,您的数据通常已经由时间序列后端汇总了。大多数时间序列查询不返回原始样本数据。相反,它们包括按时间间隔或 maxDataPoints 限制分组以及聚合函数(通常是平均值)。
这取决于您查询的时间范围。重要的一点是要知道,Grafana执行的直方图分桶可能是在已经汇总和平均的数据上进行的。要获得更准确的热图,最好在指标收集期间进行分桶 OpenSearch,或者将数据存储在其他支持对原始数据进行直方图存储桶的数据源中。
如果您在查询中按时间移除或降低分组(或提高 maxDataPoints)以返回更多数据点,则您的热图会更加准确。但这也会给你的 CPU 和内存带来沉重的负担。如果数据点的数量变得不合理地大,则可能会导致停顿和崩溃。