我们最近与 Grafana 的朋友们举办了一场网络研讨会,介绍了官方 ClickHouse Grafana 插件。在此次网络研讨会中,我们介绍了插件的历史、设计选择的理由以及未来的计划。
然而,像任何好的网络研讨会一样,我们希望展示该技术本身的演示。巧合的是,我们举办网络研讨会的时间恰好是 Grafana 第一个 Git 提交的 10 周年。加上最近对 GitHub 分析功能有限的一些挫败感,我们决定对 Grafana 代码库进行分析。
在这篇博文中,我们将回顾我们的发现,并希望为读者提供在自己的项目中复制相同工作的工具。
挫折的来源
作为工程师,每当查看一个新的 GitHub 项目时,我们通常会转向 GitHub 分析 - 正式称为 Pulse。此时,我们的挫败感通常就开始了,我们看到了一些非常平淡无奇的分析结果。
鉴于日期的重要性,因为这是第一个提交的 10 周年,我们决定看看我们是否可以做得更好。还有什么比世界上领先的开源 OLAP 数据库和数据可视化工具更适合解决这项任务的呢?!
查找数据
对于任何良好的分析,我们都需要良好的数据。幸运的是,我们所需的数据要么是公开的,要么可以生成。
GitHub 通过一个很棒的项目GH Archive发布了所有公共代码库的完整事件历史记录。对于 ClickHouse 来说,这代表了一个相当小的数据集,我们已经详细记录了如何加载和分析它。它包含了自 2011 年初以来 GitHub 上每个代码库的所有拉取请求、问题、星标、分支、关注和评论,以及超过 55 亿个事件,为我们的分析提供了极好的“背景”数据集。请注意,此数据集也在 play.clickhouse.com 上可用,您可以免费查询。或者,将此数据集加载到您自己的 ClickHouse 中。
虽然上述数据集为我们提供了 GitHub 项目的概览,但它没有提供提交历史记录。诚然,这将是一个更大的数据集。但是,使用 ClickHouse 附带的git-import 工具,我们可以通过一个简单的命令轻松生成代码库的完整提交历史记录。这会生成三个粒度递增的文件:一个文件包含每个提交的一行,一个文件包含每个文件更改的一行,最后是一个逐行更改历史记录。我们之前已经使用过这个相同的工具对我们自己的 ClickHouse 代码库进行了分析,并在此记录了步骤。
虽然我们演示中使用的数据集都是公开的,可以下载或生成,但我们也整理了一些简单的说明,以便更容易地复制此演示。我们的仪表盘也可在 Grafana 的公共目录中找到。
构建可视化
拥有这两个数据集后,构建可视化变得非常简单。我们的最终仪表盘旨在使用这两个数据集,其中已经记录了一系列可能的问题 - 此处和此处。这让我们只需选择感兴趣的问题,并使用适当的 Grafana 语法确保在选择可视化之前尊重时间过滤器即可。本着开源的精神,我们还探索了一些 Grafana 的社区可视化,例如Treemap和Word Cloud插件。例如,要可视化一段时间内的提交者,我们只需注入变量$__timeFilter(time)
和$__timeInterval(time)
以确保应用时间过滤器并使桶大小合适即可。有关这些工作原理的更多详细信息,请观看网络研讨会或此处。
SELECT $__timeInterval(time) as time, author, count(*) as ` ` FROM commits WHERE $__timeFilter(time) AND author IN (
SELECT author
FROM commits WHERE author NOT LIKE '%renovate[bot]%' AND $__timeFilter(time)
GROUP BY author
ORDER BY count() DESC
LIMIT 15
) GROUP BY author, time ORDER BY time, author ASC, time DESC LIMIT 10000
最终结果
我们鼓励用户观看网络研讨会,不仅学习构建 ClickHouse 支持的 Grafana 可视化的一些技巧,还可以更好地了解像 Grafana 这样成功的开源项目的历史。对我们来说,我们对 Grafana 创始人Torkel今天仍然像项目成立之初一样是一位重要的提交者印象深刻。在最初的 5 年里,Carl Bergquist和 Torkel 花费了大量时间重写彼此的代码,他们显然对如今蓬勃发展的社区产生了巨大影响。虽然每天的提交数量稳步增加,但很明显,提交的工作量大幅增加。添加警报和提供 Docker 文件等关键功能是迄今为止最受欢迎的问题。最后,我们很高兴看到人们同时向这两个代码库提交代码,同时注意到社区成员(现在超过 6500 人)先为 Grafana 加星标!希望您同意我们的最终仪表盘比 Github Pulse 更丰富一些。
收集社区反馈
网络研讨会使我们有机会收集社区的直接反馈。因此,在结束时,我们询问了用户接下来希望在 ClickHouse Grafana 数据源中看到支持哪些功能。以下结果对我们来说很有启发,您可以预期它们将影响我们的路线图,我们将在我们的公共代码库中发布路线图。
结论
在这篇文章中,我们总结了我们最近与 Grafana 联合举办的关于 ClickHouse 官方 Grafana 插件的网络研讨会。感谢 Grafana 的朋友们的支持,祝贺过去 10 年取得的成就,我们很高兴见证这一切。