跳到主要内容
跳到主要内容

查询构建器

ClickHouse Supported

任何查询都可以通过 ClickHouse 插件运行。 查询构建器是一个方便的选项,适用于简单查询,但对于复杂查询,您需要使用 SQL 编辑器

在查询构建器中的所有查询都有一个 查询类型,并且至少需要选择一个列。

可用的查询类型有:

  • :最简单的查询类型,用于以表格格式显示数据。适用于包含聚合函数的简单和复杂查询的通用方案。
  • 日志:优化用于构建日志查询。在配置了 默认值 的探查视图中效果最佳。
  • 时间序列:最好用于构建时间序列查询。允许选择专用时间列并添加聚合函数。
  • 跟踪:优化用于搜索/查看跟踪。在配置了 默认值 的探查视图中效果最佳。
  • SQL 编辑器:当您想要完全控制查询时,可以使用 SQL 编辑器。在此模式下,可以执行任何 SQL 查询。

查询类型

查询类型 设置将更改查询构建器的布局,以匹配所构建的查询类型。 查询类型还决定在可视化数据时使用哪个面板。

最灵活的查询类型是表查询。这是为其他查询构建器设计的通用方案,能够处理简单和聚合查询。

字段描述
构建模式简单查询不包括聚合和分组,而聚合查询包括这些选项。
所选列。可以在此字段中输入原始 SQL 以允许函数和列别名。
聚合聚合函数的列表 aggregate functions。允许为函数和列提供自定义值。仅在聚合模式下可见。
分组GROUP BY 表达式的列表。仅在聚合模式下可见。
排序ORDER BY 表达式的列表。
限制LIMIT 语句附加到查询的末尾。如果设置为 0,则将被排除。一些可视化可能需要将其设置为 0 以显示所有数据。
过滤器要在 WHERE 子句中应用的过滤器列表。

此查询类型将以表格形式呈现数据。

日志

日志查询类型提供了一个专注于查询日志数据的查询构建器。 可以在数据源的 日志配置 中配置默认值,以允许查询构建器预加载默认数据库/表和列。 还可以启用 OpenTelemetry 以根据模式版本自动选择列。

默认情况下添加 时间级别 过滤器,并为时间列添加排序。 这些过滤器与各自的字段绑定,并将在列更改时更新。 级别 过滤器默认情况下从 SQL 中排除,将其从 IS ANYTHING 选项更改将启用它。

日志查询类型支持 数据链接

字段描述
使用 OTel启用 OpenTelemetry 列。将覆盖所选列以使用所选 OTel 模式版本定义的列(禁用列选择)。
要添加到日志行的额外列。可以在此字段中输入原始 SQL 以允许函数和列别名。
时间日志的主要时间戳列。将显示类似时间的类型,但允许自定义值/函数。
日志级别可选。日志的 级别严重性。值通常类似于 INFOerrorDebug 等。
消息日志消息内容。
排序ORDER BY 表达式的列表。
限制LIMIT 语句附加到查询的末尾。如果设置为 0,则将被排除,但不建议这样做,以防大型日志数据集。
过滤器要在 WHERE 子句中应用的过滤器列表。
消息过滤器一个文本输入,用于使用 LIKE %value% 方便地过滤日志。输入为空时排除。

此查询类型将以日志面板渲染数据,以及顶部的日志直方图面板。

在扩展的日志行中可以查看选中的额外列:

时间序列

时间序列查询类型类似于 ,但专注于时间序列数据。

这两种视图基本相同,具有以下显著不同点:

  • 专用的 时间 字段。
  • 在聚合模式下,自动应用时间间隔宏,并为时间字段添加分组。
  • 在聚合模式下,隐藏“列”字段。
  • 自动为 时间 字段添加时间范围过滤器和排序。
您的可视化是否缺少数据?

在某些情况下,时间序列面板似乎被截断,因为限制默认设置为 1000

尝试通过将 LIMIT 子句设置为 0(如果您的数据集允许)来删除此限制。

字段描述
构建模式简单查询不包括聚合和分组,而聚合查询包括这些选项。
时间查询的主要时间列。将显示类似时间的类型,但允许自定义值/函数。
所选列。可以在此字段中输入原始 SQL 以允许函数和列别名。仅在简单模式下可见。
聚合聚合函数的列表 aggregate functions。允许为函数和列提供自定义值。仅在聚合模式下可见。
分组GROUP BY 表达式的列表。仅在聚合模式下可见。
排序ORDER BY 表达式的列表。
限制LIMIT 语句附加到查询的末尾。如果设置为 0,则将被排除,建议在某些时间序列数据集上显示完整可视化。
过滤器要在 WHERE 子句中应用的过滤器列表。

此查询类型将与时间序列面板一起渲染数据。

跟踪

跟踪查询类型提供了一个查询构建器,便于搜索和查看跟踪。 它针对 OpenTelemetry 数据而设计,但可以选择列以从不同的模式呈现跟踪。 可以在数据源的 跟踪配置 中配置默认值,以允许查询构建器预加载默认数据库/表和列。如果配置了默认值,则列选择将默认折叠。 还可以启用 OpenTelemetry 以根据模式版本自动选择列。

默认过滤器会添加,仅显示顶级跨度。 还包括时间和持续时间时间列的排序。 这些过滤器与各自的字段绑定,并将在列更改时更新。 服务名称 过滤器默认情况下从 SQL 中排除,将其从 IS ANYTHING 选项更改将启用它。

跟踪查询类型支持 数据链接

字段描述
跟踪模式将查询从跟踪搜索更改为跟踪 ID 查找。
使用 OTel启用 OpenTelemetry 列。将覆盖所选列以使用所选 OTel 模式版本定义的列(禁用列选择)。
跟踪 ID 列跟踪的 ID。
段 ID 列段 ID。
父段 ID 列父段 ID。这通常为空,以用于顶级跟踪。
服务名称列服务名称。
操作名称列操作名称。
开始时间列跟踪跨度的主要时间列。跨度开始时的时间。
持续时间时间列段的持续时间。Grafana 默认期望这是毫秒的浮点数。通过 Duration Unit 下拉列表自动应用转换。
持续时间单位用于持续时间的时间单位。默认是纳秒。所选单位将根据 Grafana 的要求转换为毫秒的浮点数。
标签列段标签。如果不使用基于 OTel 的模式,请排除此选项,因为它要求特定的 Map 列类型。
服务标签列服务标签。如果不使用基于 OTel 的模式,请排除此选项,因为它要求特定的 Map 列类型。
排序ORDER BY 表达式的列表。
限制LIMIT 语句附加到查询的末尾。如果设置为 0,则将被排除,但不建议这样做,以防大型跟踪数据集。
过滤器要在 WHERE 子句中应用的过滤器列表。
跟踪 ID要筛选的跟踪 ID。仅在跟踪 ID 模式中以及打开跟踪 ID 数据链接 时使用。

此查询类型将在跟踪搜索模式下以表格视图呈现数据,在跟踪 ID 模式下以跟踪面板呈现数据。

SQL 编辑器

对于过于复杂的查询,可以使用 SQL 编辑器。这使您能够完全控制查询,允许您编写和运行纯 ClickHouse SQL。

可以通过在查询编辑器顶部选择“SQL 编辑器”来打开 SQL 编辑器。

宏函数 在此模式下仍然可以使用。

您可以在查询类型之间切换,以获取最佳适合查询的可视化。此切换在仪表板视图中也有影响,特别是对于时间序列数据。

Grafana 数据链接 可用于链接到新查询。 此功能已在 ClickHouse 插件中启用,用于将跟踪链接到日志,反之亦然。在配置了 OpenTelemetry 的日志和跟踪是 数据源的配置 时,效果最佳。

表中跟踪链接示例

日志中跟踪链接示例

您可以通过在查询中选择一个名为 traceID 的列来制作数据链接。该名称不区分大小写,并支持在 “ID” 之前添加下划线。例如:traceIdTraceIdTRACE_IDtracE_iD 都是有效的。

如果在 日志跟踪 查询中启用了 OpenTelemetry,将自动包含跟踪 ID 列。

通过包含跟踪 ID 列,查看跟踪查看日志 链接将附加到数据。

链接能力

有了数据链接,您可以使用提供的跟踪 ID 打开跟踪和日志。

查看跟踪 将打开一个分屏面板,显示该跟踪,而 查看日志 将打开一个按跟踪 ID 过滤的日志查询。 如果从仪表板而不是探查视图单击该链接,则该链接将在探查视图中新标签页中打开。

在交叉查询类型(日志到跟踪和跟踪到日志)时,需要为 日志跟踪 配置默认值。在打开相同查询类型的链接时,不需要配置默认值,因为查询可以直接复制。

从日志查询(左面板)查看跟踪(右面板)的示例

宏是为您的查询添加动态 SQL 的简单方法。 在查询发送到 ClickHouse 服务器之前,插件将扩展宏并将其替换为完整的表达式。

来自 SQL 编辑器和查询构建器的查询均可以使用宏。

使用宏

宏可以在查询中的任何地方包含,如果需要可以多次使用。

以下是使用 $__timeFilter 宏的示例:

输入:

最终查询输出:

在这个例子中,Grafana 仪表板的时间范围应用于 log_time 列。

该插件还支持使用花括号 {} 的符号。在需要的 参数 中使用此符号。

宏列表

这是插件中可用的所有宏列表:

描述输出示例
$__dateFilter(columnName)使用 Grafana 面板的时间范围作为 Date 对提供列进行替换的时间范围过滤器。columnName >= toDate('2022-10-21') AND columnName <= toDate('2022-10-23')
$__timeFilter(columnName)使用 Grafana 面板的时间范围作为 DateTime 对提供列进行替换的时间范围过滤器。columnName >= toDateTime(1415792726) AND time <= toDateTime(1447328726)
$__timeFilter_ms(columnName)使用 Grafana 面板的时间范围作为 DateTime64 对提供列进行替换的时间范围过滤器。columnName >= fromUnixTimestamp64Milli(1415792726123) AND columnName <= fromUnixTimestamp64Milli(1447328726456)
$__dateTimeFilter(dateColumn, timeColumn)结合 $__dateFilter()$__timeFilter() 的速记,使用单独的日期和日期时间列。别名 $__dt()$__dateFilter(dateColumn) AND $__timeFilter(timeColumn)
$__fromTime被替换为 Grafana 面板范围的开始时间并转换为 DateTimetoDateTime(1415792726)
$__fromTime_ms被替换为面板范围的开始时间并转换为 DateTime64fromUnixTimestamp64Milli(1415792726123)
$__toTime被替换为 Grafana 面板范围的结束时间并转换为 DateTimetoDateTime(1447328726)
$__toTime_ms被替换为面板范围的结束时间并转换为 DateTime64fromUnixTimestamp64Milli(1447328726456)
$__timeInterval(columnName)被替换为基于窗口大小(以秒为单位)计算的时间间隔的函数。toStartOfInterval(toDateTime(columnName), INTERVAL 20 second)
$__timeInterval_ms(columnName)被替换为基于窗口大小(以毫秒为单位)计算的时间间隔的函数。toStartOfInterval(toDateTime64(columnName, 3), INTERVAL 20 millisecond)
$__interval_s被替换为以秒为单位的仪表板间隔。20
$__conditionalAll(condition, $templateVar)当第二个参数中的模板变量未选择所有值时,被替换为第一个参数。如果模板变量选择所有值,则被替换为 1=1。condition1=1