
本文字数:14151;估计阅读时间:36 分钟
作者:Dale McDiarmid
本文在公众号【ClickHouseInc】首发

统一实时分析与可观测性
如果你已经在使用 ClickHouse 进行实时分析,那么你并不孤单。ClickHouse 已迅速成为企业进行外部或内部分析的首选数据库,支撑着一些最大规模的用户侧分析负载(https://clickhouse.com/user-stories?useCase=1)。传统数据仓库已难以满足现代应用对高并发和低延迟查询的要求,因此越来越多的公司选择了 ClickHouse。
值得注意的是,使 ClickHouse 成为强大分析平台的诸多特性——如高速扫描、高压缩比、对超大数据量和高基数工作负载的出色处理能力——同样也让它非常适用于日志、链路追踪和指标管理。再加上它的开源许可、良好的互操作性、对 OpenTelemetry 的原生支持,以及可用于存储宽事件的能力,这一切共同构成了一个可靠的可观测性基础架构。
关于“可观测性与分析不应各自为营”的理念,并不只是我们的观点。正如 Sierra 的 Arup Malakar 在其近期博客中所言(https://clickhouse.com/blog/sierra-observability-analytics):
“如果我们不再将可观测性和分析视为两个孤立领域,而是当作由像 ClickHouse 这样强大的计算引擎驱动的统一数据问题,那将非常理想。归根到底,它们本质上都是数据,我们需要的只是一种高效访问这些数据的方式。”
—— Arup Malakar,Sierra
随着我们近期发布了 ClickStack(https://clickhouse.com/blog/announcing-clickstack-in-clickhouse-cloud),统一实时分析与可观测性比以往任何时候都更为简单。你只需使用 ClickStack SDK,或任意一个 OpenTelemetry SDK,对你的应用进行埋点,即可立即开始将应用数据与错误、性能指标和问题进行统一关联分析,一切尽在同一平台之中。
本文将通过一个实际示例进行展示:我们将对 ClickPy 进行埋点,这是一个基于 ClickHouse 的应用,包含超过 1.8 万亿行数据,每周处理超过 150 万次查询,借此展示统一分析与可观测性的整个流程有多么便捷。
ClickPy
ClickPy 是我们运营多年的一个项目,允许用户探索 PyPI 上的下载情况。PyPI 是 Python 生态系统的核心包仓库,每天的下载量接近 20 亿次,是一个极具价值的元数据来源,可以揭示开发者最常使用的库。
随着时间推移,ClickPy 的数据集已经大幅扩展。经过数年上线运行,其主表现已累计近 1.8 万亿行数据,涵盖自 2016 年以来的大规模真实 Python 包下载记录。尽管数据规模庞大,查询依旧能保持在亚秒级响应,充分体现出 ClickHouse 在应对高并发、高吞吐量场景下的卓越能力。

如果你想深入了解 ClickPy 的工作机制,我们推荐阅读去年我们在数据量突破 1 万亿行时发布的技术博客(https://clickhouse.com/blog/clickpy-one-trillion-rows)。
该应用采用简单的技术架构,前端基于 React 与 Next.js,页面数量不多,图表使用 Apache ECharts 实现,查询通过官方 ClickHouse 客户端由 Node.js 服务端提供支持。整体采用 SSR(服务器端渲染)和 CSR(客户端渲染)混合模式:初次加载时,服务端从 ClickHouse 获取数据并作为 props 传递给前端,实现快速响应;图表则由客户端渲染,确保良好的交互性与响应速度。借助物化视图和智能表选择机制,即使在万亿级数据规模下,应用依然能实现快速加载、流畅图表响应和实时探索体验。架构简单使得埋点实施更为便捷,同时应用内部也包含足够多的组件,可以暴露真实问题,是非常理想的性能测试样本。我们希望借此评估是否还存在性能优化空间,或是否存在某些包属性会导致仪表盘加载变慢的情况。
用 OTel 和 ClickStack 进行埋点
ClickStack 将三大核心组件集成于一体:数据库使用 ClickHouse,界面展示采用 HyperDX,数据采集基于 OpenTelemetry。整套架构极为简洁,无需频繁在多个工具之间切换,即可搭建完整的可观测性体系。

在 ClickPy 项目中,我们主要关注从应用中收集用户会话和追踪信息。用户会话能帮助我们重现浏览器端的真实操作过程,而链路追踪则可以从应用的两个层面收集:一是我们部署在 Vercel 上的 Node.js 服务端代码,二是运行在浏览器中的 React 前端。
关于埋点方式,我们有几种选择:可以直接使用原生的 OpenTelemetry SDK,但 ClickStack 也提供了自家 SDK,能显著提升开发体验。例如,ClickStack 的 Node.js SDK 内置异常捕获功能,并预设了合理的默认配置,使开发者只需几行代码就能快速完成集成。而在前端,ClickStack 的 JavaScript SDK 则可以方便地在浏览器中采集链路追踪信息,并将其与后端数据进行关联;同时还能捕获用户会话,从而实现用户体验的可视化与重放。

部署 ClickStack
在本地部署 ClickStack 的最快方式是使用一体化镜像,该镜像集成了 ClickHouse、HyperDX 以及 OTel 收集器端点。
docker run -p 8080:8080 -p 4317:4317 -p 4318:4318 docker.hyperdx.io/hyperdx/hyperdx-all-in-one
默认情况下,HyperDX 会在本地的 8080 端口对外提供服务。你可以直接访问 http://localhost 打开 UI 页面并创建一个用户,所有数据源也会自动完成初始化。

ClickHouse Cloud
对于使用 ClickHouse Cloud 的用户,目前 H

最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



