由谷歌翻译整理的,​​官网原文地址​

1 关于查询

查询是 Grafana 面板如何与数据源通信以获取可视化数据。查询是用数据源使用的查询语言编写的问题。查询发送到数据源的频率以及收集的数据点数量可以在面板数据源选项中进行调整。

使用查询编辑器编写查询。每个数据源都有自己的查询编辑器,我们已经对其进行了定制,以包含数据源的特性和功能。Grafana 每个面板最多支持 26 个查询。

重要的!您必须熟悉数据源的查询语言。有关数据源的更多信息,请参阅​​数据源​​。

1.1 查询编辑器

根据您的数据源,查询编辑器可能会提供自动完成、指标名称或变量建议。

由于查询语言之间的差异,数据源具有看起来不同的查询编辑器。以下是查询编辑器的两个示例。

InfluxDB 查询编辑器

grafana面板-查询数据源_grafana查询数据源

Prometheus (PromQL) 查询编辑器

grafana面板-查询数据源_数据_02

1.2 查询语法

数据源使用不同的查询语言返回数据。以下是两个查询示例:

PostgreSQL

SELECT hostname FROM host  WHERE region IN($region)

PromQL

query_result(max_over_time(<metric>[${__range_s}s]) != <state>)

1.3 查询中使用的数据源

除了您在 Grafana 中配置的数据源之外,还有三个特殊数据源可用:

  • Grafana -生成随机游走数据的内置数据源,可用于测试可视化和运行实验。
  • 混合Mixed -选择此选项可在同一面板中查询多个数据源。当您选择此数据源时,Grafana 允许您为添加的每个新查询选择一个数据源。
  • 第一个查询使用在您选择Mixed之前选择的数据源。
  • 您不能更改现有查询以使用混合数据源。
  • 仪表板Dashboard -选择此选项可使用同一仪表板中另一个面板的结果集。

您可以将来自多个数据源的数据组合到一个仪表板上,但每个面板都与属于特定组织的特定数据源相关联。

2 导航查询选项卡

查询选项卡包含以下元素:

  • 数据源选择器:使用数据源选择器选择要查询的数据的来源。有关数据源的更多信息,请参阅​​数据源​​。
  • 查询选项:使您能够设置最大数据检索参数和查询执行时间间隔。
  • 查询检查器按钮:打开查询检查器面板,您可以在其中查看和优化查询。
  • 查询编辑器列表:列出您编写的查询。

  • 表达式:使用表达式生成器创建警报表达式。有关表达式的更多信息,请参阅​​使用表达式来操作数据​​。
  • grafana面板-查询数据源_grafana查询数据源_03

3 添加查询

查询返回 Grafana 在仪表板中可视化的数据。创建面板时,Grafana 会自动选择默认数据源。

在你开始之前

添加查询

  1. 编辑要添加查询的面板。
  2. 单击查询Query选项卡。
  3. 单击数据源Data source下拉菜单并选择一个数据源。
  4. 单击查询选项Query options以配置查询返回的最大数据点数以及您希望查询从数据源请求数据的频率。
    有关查询选项的更多信息,请参阅​​​查询选项​​。
  5. 编写查询。
  6. 单击应用Apply

系统查询数据源并在可视化中呈现数据。

4 关于表达式

注意:本文档适用于测试版功能。

服务器端表达式允许您使用数学和其他操作来操作从查询返回的数据。表达式创建新数据并且不操作数据源返回的数据,除了一些小的数据重组以使数据可以接受表达式输入。

4.1 使用表达式

新的Grafana 8 警报主要使用表达式。处理是在服务器端完成的,因此表达式可以在没有浏览器会话的情况下运行。但是,表达式也可以与后端数据源和可视化一起使用。

注意:表达式不适用于旧版仪表板警报。

表达式旨在通过组合来自不同数据源的查询或通过提供数据源中不可用的操作来扩充数据源。

注意:如果可能,您应该在数据源内部进行数据处理。将数据从存储复制到 Grafana 服务器进行处理效率低下,因此表达式针对轻量级数据处理。

表达式适用于返回时间序列或数字数据的数据源查询。它们还对​​多维数据​​进行操作。例如,返回多个序列的查询,其中每个序列由标签或标识。

单个表达式将一个或多个查询或其他表达式作为输入并将数据添加到结果中。每个单独的表达式或查询由一个变量表示,该变量是称为其 RefID 的命名标识符(例如,默认字母​​A​​​或​​B​​)。

要引用单个表达式的输出或另一个表达式中的数据源查询,此标识符用作变量。

4.2 表达式的类型

表达式适用于两种类型的数据。

  • 时间序列的集合。
  • 数字的集合,其中每个数字都是一个项目。

每个集合都从单个数据源查询或表达式返回,并由 RefID 表示。每个集合都是一个集合,集合中的每个项目都由其存储为​​标签​​或键值对的维度唯一标识。

4.3 数据源查询

服务器端表达式仅支持后端数据源的数据源查询。通常假设数据是标记的时间序列数据。将来我们打算添加查询返回类型(数字或时间序列)数据的断言,以便表达式可以更好地处理错误。

与表达式一起使用时,数据源查询由表达式引擎执行。当它这样做时,它将数据重组为一个时间序列或每个数据帧一个数字。因此,例如,如果使用在表格视图中的一帧上返回多个系列的数据源,您可能会注意到在使用表达式执行时它看起来不同。

目前,使用数据框时唯一支持的非时间序列格式(数字)是您有一个表响应,它返回一个没有时间、字符串列和一个数字列的数据框:

Loc

Host

Avg_CPU

MIA

A

1

NYC

B

2

上面的示例将生成一个适用于表达式的数字。字符串列成为标签,数字列成为相应的值。例如​​{"Loc": "MIA", "Host": "A"}​​值为 1。

4.4 操作Operations

您可以在表达式中使用以下操作:math、reduce 和 resample。

4.4.1 数学

数学适用于时间序列或数字数据的自由格式数学公式。数学运算以数字和时间序列为输入,并将它们更改为不同的数字和时间序列。

来自其他查询或表达式的数据使用带有美元符号前缀的 RefID 引用,例如​​$A​​​. 如果变量名称中有空格,则可以使用大括号语法,如​​${my variable}​​.

数字常量可以是十进制 ( ​​2.24​​​)、八进制(带有前导零,如​​072​​​)或十六进制(带有前导 0x,如​​0x2A​​​)。还支持指数和符号(例如,​​-0.8e-2​​)。

运算符Operators

支持算术(​​+​​​、二元和一元​​-​​​、​​*​​​、​​/​​​、​​%​​​、指数​​**​​​)、关系(​​<​​​、​​>​​​、​​==​​​、​​!=​​​、​​>=​​​、​​<=​​​)和逻辑(​​&&​​​、​​||​​​和一元​​!​​)运算符。

操作如何处理数据取决于它是数字还是时间序列数据。

对于二元运算,例如​​$A + $B​​​or ​​$A || $B​​,运算符根据数据类型以下列方式应用:

  • 如果两者​​$A​​​都是​​$B​​数字,则在两个数字之间执行运算。
  • 如果一个变量是数字,另一个变量是时间序列,则执行时间序列中每个点的值与数字之间的运算。
  • 如果​​$A​​和 ​$B​ 都是时间序列数据,则对​​$A​​​和​​$B​​中都存在的每个时间戳执行两个序列中每个值之间的运算。重采样操作可用于排列时间戳。(注:未来,我们计划为不同的行为添加数学运算选项)。

概括:

  • Number OP number = number
  • Number OP series = series
  • Series OP series = series

因为表达式使用由单个变量表示的多个序列或数字,所以二元运算还在两个变量之间执行联合(连接)。这是基于与每个单独的序列或数字相关联的识别标签来完成的。

因此,如果您在 $A 中有带有 {host=web01} 等标签的数字,而在 $B 中有另一个带有相同标签的数字,则在每个变量中的这两个项目之间执行操作,结果将共享相同的标签。该联合的行为规则如下:

  • 没有标签的项目将加入任何东西。
  • 如果 $A 和 $B 都只包含一个项目(一个序列或一个数字),它们将加入。
  • 如果标签是精确的数学,他们将加入。
  • 如果标签是另一个标签的子集,例如 $A 中的项目被标记为 {host=A,dc=MIA} 并且 $B 中的项目被标记为 {host=A} 他们将加入。
  • 目前,如果在 $A 等变量中,每个项目都有不同的标签键,则连接行为是未定义的

关系和逻辑运算符返回 0 表示假 1 表示真。

数学函数

虽然大多数函数存在于自己的表达式运算中,但数学运算确实有一些类似于数学运算符或符号的函数。当函数可以采用数字或序列时,将返回与参数相同的类型。当它是一个序列时,对序列中每个点的值执行的操作。

abs

abs 返回其参数的绝对值,可以是数字或序列。例如​​abs(-1)​​​或​​abs($A)​​。

is_inf

is_inf 接受一个数字或一个序列,检查是否是无穷大,为真返回1,其他返回 0。例如 is_inf($A)。

注意:例如,如果您需要专门检查负无穷大,可以进行比较,例如​​$A == infn()​​.

is_nan

is_nan 接受一个数字或一个序列,检查是否是非数字值,为真返回1,其他返回0,例如​​is_nan($A)​​。

is_null

is_nan 接受一个数字或一个序列,检查是否为null 返回1,其他返回0​。例如​​is_null($A)​​.

is_number

is_number 接受一个数字或一个序列,检查是否是数字,为真返回1,其他返回0(即​​null​​​、​​Inf+​​​、​​Inf-​​​和​​NaN​​​)。例如​​is_number($A)​​.

log

Log 返回其参数的自然对数,可以是数字或系列。如果值小于 0,则返回 NaN。例如​​log(-1)​​​或​​log($A)​​。

inf、infn、nan 和 null

inf、infn、nan 和 null 函数都返回名称的单个值。它们主要用于测试。示例:​​null()​​。

round

Round 返回一个四舍五入的整数值。例如,​​round(3.123)​​​或​​round($A)​​。(这个函数可能应该带一个参数,以便它可以增加舍入值的精度)。

ceil

Ceil 将数字向上舍入到最接近的整数值。例如,​​ceil(3.123)​​返回 4。

floor

Floor 将数字向下舍入到最接近的整数值。例如,​​floor(3.123)​​返回 3。

4.4.2 归约Reduce

Reduce 采用从查询或表达式返回的一个或多个时间序列,并将每个序列转换为单个数字。时间序列的标签作为标签保存在每个输出的缩减数上。

领域:

  • Function -要使用的归约函数
  • 输入 Input-要重新采样的变量(refID(例如​​A​​))
  • 模式 Mode-当系列包含非数值(null、NaN、+-Inf)时,允许控制归约函数的行为
归约函数Reduction Functions

Count

Count 返回每个序列中的点数和。

Mean

平均值 返回每个序列中所有值的总和除以该序列中的点数。在​​strict​​模式下,如果序列中的任何值为 null 或 nan,或者系列为空,则返回 NaN。

Min and Max

Min 和 Max 分别返回系列中的最小值或最大值。在​​strict​​模式下,如果系列中的任何值为 null 或 nan,或者系列为空,则返回 NaN。

Sum

Sum 返回系列中所有值的总和。如果序列的长度为零,则总和将为 0。在​​strict​​模式下,如果系列中有任何 NaN 或 Null 值,则返回 NaN。

Last

Last 返回系列中的最后一个数字。如果序列没有值,则返回 NaN。

归约模式Reduction Modes

严格的Strict

在严格模式下,输入序列按原样处理。如果序列中的任何值是非数字的(null、NaN 或 +-Inf),则返回 NaN。

删除非数字Drop Non-Numeric

在这种模式下,输入序列中的所有非数字值(null、NaN 或 +-Inf)在执行归约函数之前都会被过滤掉。

替换非数字Replace Non-Numeric

在此模式下,所有非数字值都将替换为预定义值。

4.4.3 重采样Resample

重采样更改每个时间序列中的时间戳以具有一致的时间间隔。主要用例是您可以重新采样不共享相同时间戳的时间序列,以便在它们之间执行数学运算。这可以通过对两个系列中的每一个进行重新采样,然后在数学运算中引用重新采样的变量来完成。

领域Fields:

  • Input -要重采样的时间序列数据变量(refID(例如​​A​​))
  • 重采样到Resample to - 重采样到的持续时间,例如​​10s​​​。单位可以是​​s​​​秒、​​m​​​分钟、​​h​​​小时、​​d​​​天、​​w​​​周和​​y​​年。
  • Downsample -当每个窗口样本有多个数据点时使用的缩减函数。有关行为详细信息,请参阅归约操作。
  • Upsample -用于填充没有数据点的窗口样本的方法。
  • pad 填充最后一个已知值
  • 回填 用下一个已知值
  • fillna 用 NaN 填充空的示例窗口

5 管理查询

Manage queries

查询组织在可折叠的查询行中。每个查询行都包含一个查询编辑器,并用一个字母(A、B、C 等)标识。

你可以:

grafana面板-查询数据源_数据_04

切换查询编辑器帮助。如果数据源支持,单击此图标可显示有关如何使用查询编辑器的信息或提供对常见查询的快速访问。

grafana面板-查询数据源_时间序列_05

复制查询。当处理多个相似的复杂查询并且您想要尝试不同的变体或进行微小的更改时,复制查询很有用。


grafana面板-查询数据源_grafana查询数据源_06

隐藏查询。Grafana 不会向数据源发送隐藏查询。

grafana面板-查询数据源_grafana_07

删除查询。删除查询会将其永久删除,但有时您可以通过恢复到以前保存的面板版本来恢复已删除的查询。

grafana面板-查询数据源_数据_08

重新排序查询。通过单击并按住拖动图标更改查询的顺序,然后将查询拖动到需要的位置。结果的顺序反映了查询的顺序,因此您可以经常根据查询顺序调整您的视觉结果。

6 与另一个面板共享查询结果

Grafana 允许您将一个面板的查询结果用于仪表板中的任何其他面板。跨面板共享查询结果可减少对数据源的查询次数,从而提高仪表板的性能。

仪表板数据源允许您在仪表板中选择一个面板,其中包含您想要共享结果的查询。Grafana 不是为每个面板发送单独的查询,而是发送一个查询,其他面板使用查询结果来构建可视化。

例如,当您有多个面板可视化相同的数据时,此策略可以大大减少查询的数量。

要与另一个面板共享数据源查询

  1. ​创建仪表板​​。
  2. ​将面板添加到仪表板​​。
  3. 将标题更改为“源面板”。您将使用此面板作为其他面板的来源。
  4. 定义要共享的一个或多个查询​​。​​如果您没有可用的数据源,请使用Grafana数据源,它会返回可用于测试的随机时间序列。
  5. 添加第二个面板并在查询编辑器中选择仪表板Dashboard数据源
  6. 在使用面板列表中,选择您创建的第一个面板。

源面板中定义的所有查询现在都可用于新面板。在源面板中进行的查询可以与多个面板共享。

您可以单击任何查询以转到定义它们的面板。

grafana面板-查询数据源_数据源_09

grafana面板-查询数据源_grafana_10

grafana面板-查询数据源_时间序列_11

7 下载原始查询结果

Grafana 会生成一个 CSV 文件,其中包含您的数据,包括对该数据的任何转换。您可以选择在面板应用字段选项或字段选项覆盖之前或之后查看数据。

在你开始之前

下载原始查询结果

  1. 编辑包含您要下载的查询数据的面板。
  2. 在查询编辑器中,单击Query Inspector
  3. 单击数据Data
    如果您的面板包含多个查询或查询多个节点,那么您还有其他选项。
  • 选择结果:选择要查看的结果集数据。
  • 转换数据
  • 按时间加入:一次查看所有查询的原始数据,每列一个结果集。单击列标题以重新排序数据。
  1. 要在系统应用字段覆盖之前查看数据,请单击格式化数据Formatted data切换。
  2. 要下载专门为 Excel 格式化的 CSV 文件,请单击下载 ExcelDownload for Excel切换 。
  3. 单击下载 CSV

grafana面板-查询数据源_数据_12

grafana面板-查询数据源_数据源_13

8 检查查询性能

Stats选项卡显示统计信息,告诉您查询花费了多长时间、发送了多少查询以及返回的行数。此信息可以帮助您对查询进行故障排除,尤其是在任何数字意外高或低的情况下。

在你开始之前

检查查询性能

  1. 编辑包含要检查性能的查询的面板。
  2. 在查询编辑器中,单击Query Inspector
  3. 点击统计Stats

统计信息以只读格式显示。

9检查查询请求和响应数据

当您想要对返回意外结果或未能返回预期结果的查询进行故障排除时,请检查查询请求和响应数据。

在你开始之前

检查查询请求和响应数据

  1. 编辑包含要导出的查询的面板。
  2. 在查询编辑器中,单击Query Inspector
  3. 单击刷新
    该面板填充了响应数据。
  4. 根据需要进行调整并重新运行查询。
  5. 要下载查询请求和响应数据,请单击复制到剪贴板图标并将结果粘贴到另一个应用程序中。

grafana面板-查询数据源_grafana_14