DoubleCloud 即将关闭。利用限时免费迁移服务迁移到 ClickHouse。立即联系我们。 ->->

博客 / 工程

使用 ClickHouse 可视化数据 - 第 1 部分 - Grafana

author avatar
Dale McDiarmid
2022 年 10 月 7 日

此博客文章是系列的一部分

介绍

在 ClickHouse,我们热衷于支持我们的生态系统。这包括在可视化数据时为用户提供尽可能广泛的选择范围。本博客系列的每一部分都将探讨一个在 ClickHouse 中可视化数据的选项:Grafana、Superset 和 Metabase。

虽然这些工具都可以与插入 ClickHouse 的几乎所有类型的数据一起使用,但它们各有优势。我们提到了这些工具何时可能适用,并展示了我们认为令人印象深刻的功能。

通常,关于可视化工具的决定取决于适用于您数据类型的特定功能集,或者只是您的用户个人喜好。虽然我们希望这篇文章能帮助您做出任何必要的选择,但我们鼓励用户尝试它们!所有这些工具都是免费使用的,而且很容易上手。

这篇文章引用了我们“将数据导入 ClickHouse”博客系列[1][2][3] 中的数据集。这些数据集在我们 play.clickhouse.com 环境的 blogs 数据库中可用。用户应该能够使用 explorer 用户(无需密码)复制所有示例。

Grafana

自 2014 年作为 Kibana 的分支诞生以来,Grafana 已成为最流行的时间序列数据可视化技术之一。代码早已偏离了其 Kibana 根源,扩展了对数据存储的支持,添加了新的可视化效果,并超越了简单的仪表盘工具。虽然适用于 BI 用例,但它主要侧重于服务可观察性用例,并为日志和跟踪提供了出色的支持。

在 ClickHouse,我们继续与 Grafana 团队密切合作,投资于官方的 OSS ClickHouse 插件,使用户能够毫不费力地实时可视化数据。我们最近发布了 ClickHouse Grafana 插件的 2.x 版本,其中包括期待已久的 JSON 和 HTTP 支持等功能。在我们的示例中,我们利用 Grafana Cloud,它提供了一个慷慨的免费层,足以查询我们 ClickHouse Cloud 服务中的数据。有关安装官方 ClickHouse 插件的说明,请参见 此处。这对于自托管实例来说应该是相同的。

要将 Grafana 连接到 ClickHouse,用户只需创建一个 ClickHouse 数据源 - 实际上是插件的实例化。用户可以创建多个数据源:每个数据源可能连接到不同的 ClickHouse 服务,或者可能提供对具有不同凭据的同一实例的访问权限。我们将在下面说明此过程。

grafana-1-datasource.gif
在 Grafana 中可视化数据需要我们创建一个仪表盘。在此,用户可以添加一个可视化面板,并指定它应该使用我们的 ClickHouse 数据源。

grafana-2-create-visual-2.gif
在创建可视化效果时,用户需要熟悉 SQL 概念。但是,一个可视化查询构建器可以帮助构建大多数图表类型的 ClickHouse SQL。由于 Grafana 专注于时间序列数据,因此大多数图表都要求用户定义一个 DateTime/Date 列以及一个数值。

在下面的示例中,我们使用 早期文章中的 Hacker News 数据集,创建一个简单的柱状图,显示 ClickHouse 活动随时间的变化情况。请注意,我们最初使用查询构建器来开始,然后直接编辑 SQL 以捕获每个月的帖子。

grafana-3-simple-bar-2.gif
SELECT count() as `posts per month`, toStartOfMonth(time) as month FROM default.hackernews WHERE type IN ('comment', 'story') AND (text ILIKE '%ClickHouse%' OR title ILIKE '%ClickHouse%') GROUP BY month ORDER BY month LIMIT 1000

多行图表(即具有多个序列的图表)除了标准的 Date/DateTime 和数字列之外,还需要一个字符串列。因此,此字符串列定义了序列键。下面,我们利用我们 以前文章 中的汇率数据集,显示各种以 USD 为基准的货币对的价格。请注意,我们在此使用带有过滤器 $__timeFilter 的 SQL 查询,该过滤器会自动将我们选择的时间范围作为过滤器注入到查询中 - 从而允许我们深入挖掘。我们使用 argMax 函数获取每一天的收盘价。最后,我们使用 SETTINGS max_result_rows = 10000 以便从 play.clickhouse.com 获取更多数据集。

grafana-4-multi-line-2.gif
SELECT toStartOfDay(datetime) as time, quote, argMax(bid,datetime) as close FROM blogs.forex WHERE (base ='EUR') AND quote IN ('GBP', 'USD', 'NZD', 'CAD') AND $__timeFilter(datetime) GROUP BY time, quote ORDER BY time ASC, quote ASC SETTINGS max_result_rows=10000

对于不太标准的可视化效果,例如热图和烛台图,需要做更多的工作。烛台图可视化需要每个时间段的值,表示开盘价、收盘价(使用 argMin)、最低价和最高价。这自然适合我们的汇率数据集,使我们能够可视化价格随时间的变化情况。

grafana-5-candle_stick-2.gif
SELECT toStartOfDay(datetime) as day, argMin(ask, datetime) as open, argMax(ask,datetime) as close, max(ask) as high, min(ask) as low FROM blogs.forex WHERE (base ='EUR') AND quote ='USD' AND $__timeFilter(datetime) GROUP BY day ORDER BY day ASC SETTINGS max_result_rows=10000

Grafana 中的热图要求我们对地理数据进行分箱,并提供一个数值来控制颜色比例。我们从 以前文章 中获得的天气数据集为我们提供了一种简单的方法来演示这一点。我们使用 ClickHouse 的 geoHashEncode 函数对我们的 Point 字段进行聚合,找到每个网格记录的最高温度。然后,可以使用 GeoMap 可视化效果将这些数据绘制为热图,以显示美国和墨西哥最热地区。请注意,通过多边形字典进行的地理限制 - 这里探讨了过滤器优化 这里

grafana-6-map.gif
SELECT geoHash, geohashDecode(geoHash) as lon_lat, max(tempMax)/10 as max_temp FROM blogs.noaa WHERE date > '1970-01-01' and dictGet(blogs.country_polygons, 'name', location) IN ('United States of America', 'Mexico') GROUP BY geohashEncode(location.1, location.2, 3) as geoHash SETTINGS max_result_rows = 100000

上面的示例侧重于我们以前文章中的数据集。但是,Grafana 通常用于可观察性用例。虽然专门针对可观察性数据使用 Grafana 的文章值得撰写(即将推出!),但我们在此演示了如何使用 play.clickhouse.com 中可用的 JSON 日志数据 在 Grafana 的日志资源管理器中构建一个简单的视图。我们为了简化可视化效果,将此数据偏移到最近 24 小时。请注意,我们还从状态代码创建了一个级别字段,以确保我们的日志被分类并颜色编码。

grafana-7-logs-2.gif
SELECT now() - (toDateTime('1998-05-08 13:44:46') - timestamp) AS log_time, multiIf(message.status > 500, 'critical', message.status > 400, 'error', message.status > 300, 'warning', 'info') AS level, message.request.method AS method, message.status AS status, message.size AS size, message.request AS log FROM blogs.http_logs ORDER BY timestamp DESC LIMIT 10000

结论

在这篇文章中,我们展示了一些使用 Grafana 插件的简单可视化技术。 下次我们将探索 Superset 及其更专注于 BI 使用案例。

如果您对最新技术充满热情,并且对开源充满热情,我们目前正在招聘我们的 集成团队,并希望收到您的来信。

分享这篇文章

订阅我们的时事通讯

及时了解功能发布、产品路线图、支持和云服务!
正在加载表格...
关注我们
Twitter imageSlack imageGitHub image
Telegram imageMeetup imageRss image