使用 Grafana 和 ClickHouse 进行可观察性
Grafana 是 ClickHouse 中可观察性数据的首选可视化工具。这是通过使用官方的 ClickHouse 插件实现的。用户可以按照 这里 的安装说明进行操作。
该插件的 V4 版本使日志和追踪成为新版查询构建器体验中的第一公民。这减少了 SRE 需要编写 SQL 查询的需求,并简化了基于 SQL 的可观察性,推动了这一新兴范例的发展。 其中一部分工作是将 OpenTelemetry (OTel) 置于插件的核心,因为我们相信这将是未来几年 SQL 基于可观察性的基础,以及数据将如何被收集。
OpenTelemetry 集成
在 Grafana 中配置 ClickHouse 数据源时,插件允许用户为日志和追踪指定一个默认数据库和表,并确定这些表是否遵循 OTel 架构。这使插件能够返回正确的列,以便在 Grafana 中正确渲染日志和追踪。如果您对默认的 OTel 架构进行了更改,并希望使用自己的列名,可以进行相应指定。对于像时间 (Timestamp
)、日志级别 (SeverityText
) 或消息体 (Body
) 等列的默认 OTel 列名的使用,则无需做出更改。
用户可以通过 HTTP 或本机协议将 Grafana 连接到 ClickHouse。后一种方式提供了边际性能优势,但在 Grafana 用户发出的聚合查询中,可能不那么明显。相反,HTTP 协议通常更容易供用户代理和检查。
日志配置需要时间、日志级别和消息列,以便正确渲染日志。
追踪配置稍微复杂一些(完整列表请参考 这里)。这里需要的列是为了使后续查询能够构建完整的追踪剖面。这些查询假设数据的结构与 OTel 相似,因此偏离标准架构显著的用户将需要使用视图来从这一特性受益。

配置完成后,用户可以访问 Grafana Explore 开始搜索日志和追踪。
日志
如果遵循 Grafana 对日志的要求,用户可以在查询构建器中选择 Query Type: Log
并点击 Run Query
。查询构建器将制定一个查询来列出日志,并确保正确渲染,例如:

查询构建器提供了简单的手段来修改查询,避免用户需要编写 SQL。可以从查询构建器中进行过滤,包括查找包含关键词的日志。希望编写更复杂查询的用户可以切换到 SQL 编辑器。如果返回了适当的列,并且将 logs
选择为查询类型,结果将按日志渲染。日志渲染所需的列在 这里 列出。
日志到追踪
如果日志包含追踪 ID,用户可以通过特定日志行导航到对应的追踪。

追踪
类似于上述日志体验,如果满足 Grafana 渲染追踪所需的列(例如,通过使用 OTel 架构),查询构建器能够自动制定必要的查询。通过选择 Query Type: Traces
并点击 Run Query
,将生成并执行一个类似于以下的查询(具体取决于你配置的列 - 以下假设使用 OTel):
该查询返回 Grafana 预期的列名,渲染出如下所示的追踪表格。可以不需要编写 SQL 来对持续时间或其他列进行过滤。

希望编写更复杂查询的用户可以切换到 SQL Editor
。
查看追踪详情
如上所示,追踪 ID 被渲染为可点击的链接。单击追踪 ID,用户可以选择通过链接 View Trace
查看相关的 spans。这将发出以下查询(假设 OTel 列),以检索所需结构的 spans,并将结果渲染为瀑布图。
注意上面的查询使用物化视图 otel_traces_trace_id_ts
进行追踪 ID 查询。有关更多细节,请参见 加速查询 - 使用物化视图进行查找。

追踪到日志
如果日志包含追踪 ID,用户可以从追踪导航到其相关的日志。要查看日志,单击追踪 ID 并选择 View Logs
。这将发出以下查询,假设使用默认的 OTel 列。

仪表板
用户可以在 Grafana 中使用 ClickHouse 数据源构建仪表板。我们建议查阅 Grafana 和 ClickHouse 的 数据源文档 以获取更多信息,特别是 宏的概念 和 变量。
该插件提供了多个开箱即用的仪表板,包括一个示例仪表板“简单 ClickHouse OTel 仪表板”,用于符合 OTel 规范的日志和追踪数据。这要求用户遵循 OTel 的默认列名,且可以从数据源配置中安装。

我们在下面提供一些构建可视化的简单技巧。
时间序列
除了统计数据,折线图是可观察性用例中最常用的可视化形式。如果查询返回一个名为 time
的 datetime
字段和一个数值列,Clickhouse 插件将自动渲染一个折线图。例如:

多线图
只要满足以下条件,查询将自动渲染多线图:
- 字段 1:别名为时间的 datetime 字段
- 字段 2:用于分组的值。应该是字符串。
- 字段 3+:指标值
例如:

可视化地理数据
我们已在前面的部分探讨了如何使用 IP 字典丰富可观察性数据的地理坐标。假设您有 latitude
和 longitude
列,可使用 geohashEncode
函数对可观察性进行可视化。这将生成与 Grafana Geo Map 图表兼容的地理散列。以下是示例查询和可视化:
