构建查询洞察 UI

图片

本文字数:2631;估计阅读时间:7 分钟

作者:Bucky Schwarz

本文在公众号【ClickHouseInc】首发

图片

我们最近发布了 Query Insights 的初步实现,为 ClickHouse Cloud 用户提供了一种便捷的方法来查看和解释查询日志。该功能对所有 ClickHouse Cloud 用户开放,本篇文章将讨论其功能和构建过程。

为什么要构建查询日志 UI?

ClickHouse 实例中的 system.query_log 表包含大量有价值的数据,可以帮助用户了解:

  • 查询性能和异常;

  • 错误及其相关信息(异常代码、消息、设置、配置文件事件等);

    以及

  • 时间序列查询指标(读取/写入吞吐量、数据量和延迟的变化)。

然而,收集这些信息也带来了挑战——system.query_log 目前包含超过 70 个字段(完整列表请见此处:https://clickhouse.com/docs/en/operations/system-tables/query_log),并且每个查询会生成两个或更多记录。因此,解释查询日志数据可能会很困难,特别是对于不太熟悉 ClickHouse 的用户来说。

为了说明这一点,让我们来看一下在 CLI 中执行简单的 select * from system.query_log 的输出:

图片

ClickHouse Cloud 中的 SQL 控制台在这方面有所改进(至少在视觉效果上),但如果您不清楚具体要查找的信息,使用体验仍然不是很直观:

图片

增加一些复杂性,每个 ClickHouse Cloud 服务至少包含两个副本,每个副本都有自己的查询日志版本,这意味着简单地运行 select * from system.query_log 只会返回当前副本的结果。因此,每当 ClickHouse Cloud 用户(或任何运行多副本部署的 ClickHouse 用户)想要检查查询日志时,都需要使用 clusterAllReplicas() 函数,这对于经验较少的用户来说同样不直观。这引出了我们第一个(也是最明显的)查询日志 UI 的顶级目标:

  • 目标 #1 — 使查询日志数据更易于解释和访问

如前所述,查询日志是查询优化、调试和监控整个集群健康状况和性能的关键信息来源。除了提高查询日志数据的可访问性之外,考虑到查询日志的用途和使用时机,我们还确定了这个新功能的其他顶级目标:

  • 目标 #2 — 暴露重要的顶级查询指标

  • 目标 #3 — 简化利用查询日志的查询调试和优化工作流

  • 目标 #4 — 提供基于上下文的“智能”建议和洞察,进一步简化查询调试和优化

采用迭代方法

当我们开始规划这个功能时,我们确定前两个目标可以相对快速地实现,并能够解决用户的主要痛点。另一方面,后两个目标仍然比较模糊,需要进一步研究和深入理解不同的查询日志指标在何时和如何重要。因此,我们决定尽快发布一个初始版本,以实现目标 #1 和 #2,并为逐步改进目标 #3 和 #4 奠定基础。重要的是,未来的迭代工作将基于用户反馈。如果您正在阅读这篇文章,请尝试我们的新查询洞察 UI 并给我们反馈!

查询洞察 V1

选择服务后,左侧边栏的监控导航项会展开,显示一个新的“查询洞察”子项。点击此选项将打开新的查询洞察页面:

图片

顶级指标

页面顶部的统计框显示了所选时间段内的一些基本查询指标。下面展示了三个时间序列图,分别代表查询量、延迟和错误率,这些图按查询类型(选择、插入、其他)在所选时间窗口内分解显示。延迟图可以进一步调整,以显示 p50、p90 和 p99 延迟:

图片

最近的查询

在顶级指标下方,有一个表格显示了所选时间窗口内按标准化查询哈希和用户分组的查询日志条目:

图片

最近的查询可以按任何可用字段进行过滤和排序,表格也可以配置以显示或隐藏附加字段(如表格、p90 和 p99 延迟)。

查询详情

在最近的查询表格中选择一个查询,会打开一个包含该查询特定指标和信息的侧边栏:

图片

从侧边栏可以看到,这个特定查询在过去 24 小时内已运行超过 3000 次。“查询信息”选项卡显示的是汇总指标,但我们也可以通过选择“查询历史”选项卡查看单次运行的指标:

图片

幕后揭秘

查询洞察是我在二月底加入 ClickHouse 后参与的第一个重要项目。在开始这个功能开发之前,我花了几周时间做一些小任务和修复错误,以熟悉代码库和工作流程。这反映了团队对我的信任和信心,以及我们招聘流程的高标准——高标准的招聘让我们确信被录用的人有能力完成工作,并能迅速上手。

这个功能的目标和设计已经相当明确,但细节和实施由我负责。我从一个 Figma 设计开始,该设计展示了一个通用的图表和显示不同类型数据(如所有查询、错误和慢查询)的功能。实现过程中,主要是将查询逻辑与可视化代码分离,并定义了清晰的接口。这些接口允许我们在不影响图表渲染代码的情况下,更改传递给查询的数据(例如时间范围以及查询的是延迟还是错误)。

在我的职业生涯中,我已经学到,功能的草拟与实际运行是两回事,并且我们对软件需求的理解会随着时间而变化。因此,我在接手这个项目时,尝试让初始版本范围尽可能狭窄(但仍可用),然后将功能展示给各种内部和外部用户——这是开发 Web 应用程序的标准方法。这样,任何未来的更改都可以相对容易地实施。我前面提到的慢查询,经过早期用户使用后,我们认为其概念不太合理,于是取消了它,并用 p99、p90 和 p50 延迟替代。我们还意识到,点击表格时显示的侧边栏效果不好,因此几乎完全重新设计了它。这些都不是大问题,因为我们在开发时预见到了可能的更改,并设置了相应的抽象和接口,以便轻松实现这些更改。

征稿启示

面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL索引、事务(数据库管理与高可用)

一、索引的概念 索引:排序的列表,对数据进行快速的查询; 针对不同的产品需求,或者不同的数据库结构,会创建不同的索引; 1:普通索引(默认索引) 2:唯一索引…

推荐一个酷炫高逼格的服务器探针的监控工具,免费开源(附源码)

背景 作为一名攻城狮,面对各种服务器内存飙高、CPU猛增、磁盘打满等等服务器问题,可谓是伤透了我们的心。 不仅要开发,还要处理这些问题,大把的时间浪费了,这时候一个好的全面的监控工具尤为重要了。 所以&#xff…

C++基础知识:函数重载相关注意事项:1.引用作为重载条件,2.2.函数重载遇见函数默认参数。

1.引用作为重载条件 #include<iostream>using namespace std;//1.引用作为重载的条件 //int 和 const int 类型不同&#xff0c;所以可以作用重载条件 void fn(int &a) //int &a10;不合法 //10放在了常量区&#xff0c;而引用要么在栈区&#xff0c;要么在堆区{…

Unity打包设置

1.Resolution and Presentation (分辨率和显示) Fullscreen Window (全屏窗口): 应用程序将以全屏窗口模式运行&#xff0c;但不会独占屏幕。适用于想要全屏显示但仍需访问其他窗口的情况。 Resizable Window (可调整大小的窗口): 允许用户调整应用程序窗口的大小。适用于窗口…

保险丝(常见元器件及电路基础知识)

分类&#xff1a;简单分为熔断式和非熔断式 电压&#xff1a;保险丝的额定电压是指它的公称额定电压, 通常就是保险丝断开后能够承受的最大电压值保险丝通电时两端所承受的电压大大小于其额定电压&#xff0c;因此额定电压基本上无关紧要。 电流&#xff1a; PFC为功率因数矫…

昇思25天学习打卡营第三十四天|Jack578

昇思25天学习打卡营第三十四天|Jack578 一、数据集Dataset&#xff08;一&#xff09;数据集加载&#xff08;二&#xff09;数据集迭代&#xff08;三&#xff09;数据集常用操作 一、数据集Dataset 数据是深度学习的基础&#xff0c;MindSpore提供基于Pipeline的数据引擎&am…

项目管理中的常用工件(二):可视化工件

项目管理中的常用工件&#xff08;二&#xff09;&#xff1a;可视化工件 亲和图&#xff08;affinity diagram&#xff09;因果图&#xff08;cause-and-effect diagram&#xff09;直方图&#xff08;histogram&#xff09;流程图&#xff08;flowchart&#xff09;散点图&am…

[练习]如何使用递归算法?

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1. 递归概述 2.汉诺塔问题 题目描述​编辑 题解 代码实现 3…

mac M1安装Roop教程及所遇到的问题

1.安装miniconda&#xff0c;下载地址&#xff1a; 按 Python 版本划分的最新 Miniconda 安装程序链接&#xff1a;https://docs.anaconda.com/miniconda/miniconda-other-installer-links/ 下载后直接默认安装即可。 我用的是&#xff1a;Python3.10对应的Miniconda 2.下载…

7月26日JavaSE学习笔记

反射 Java是面向对象的&#xff0c;有对象必须先有类&#xff0c; 有static修饰类的属性和方法&#xff1b;在Java中存储了类的内容&#xff0c;这个内容也应该是一个对象&#xff1b;Java中每一个用到的类都会加载一块内存&#xff0c;这每一块内存都是一个对象&#xff1b;这…

php+bootstrap 编写简易的步骤进度条

个人笔记记录&#xff0c;步骤进度条。 版本一&#xff1a; 初始版本&#xff0c; 当前版本单纯的根据bootstrapCSS进行完成的简易版本。这个比较简单 样式我放在了最底下。 <div class"form-group steps"><div class"steps-height"><di…

txt格式单词导入有道词典生词本 (java代码方式)

txt格式单词导入有道词典生词本 (java代码方式) 首先要求txt文档里单词的格式&#xff0c;大概需要像这种&#xff1a; 每行是一个单词&#xff0c;格式为&#xff1a;英文单词空格词性单词意思。 注意 导出单词本的名字就是你 txt 文件的名字 我这里是 公共英语三级 单词本 …

IAR使用调试详解

目录 1 IAR功能介绍 1.1 File文件菜单 1.2 Edit编辑菜单 1.3 View视图菜单 1.4 Projcet工程菜单 1.5Debug调试菜单 1.6 Disassembly反汇编菜单 1.7 Simulator下载调试工具 1.8 Tools工具菜单 1.9 Window窗口菜单 1.10 Help帮助菜单 2 IAR设置 2.1 插入/编辑模板 2…

如何选择最佳的云盘检测方案?

橡胶密封圈是一种用于填塞、密封或隔离物体之间空隙的圆形零件&#xff0c;通常由橡胶或类似材料制成。这些密封圈通常用于工程、机械或汽车领域&#xff0c;以防止液体、气体或其他物质泄漏。 橡胶密封圈通常对多种化学物质具有良好的耐腐蚀性能&#xff0c;使其适用于各种环…

一些关于颜色的网站

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 1、中国传统色 2、网页颜色选择器 3、渐变色网站 4、多风味色卡生成 5、波浪生成 6、半透明磨砂框 色卡组合

T-CNN——利用张量 CNN 增强缺陷检测

1. 摘要 缺陷检测是制造业中一个重要而具有挑战性的问题。本研究引入了张量卷积神经网络&#xff08;T-CNN&#xff09;&#xff0c;并在罗伯特-博世制造工厂生产的超声波传感器组件缺陷检测的实际应用中验证了其性能。与同类 CNN 模型相比&#xff0c;作者的量子启发 T-CNN 通…

【后端开发实习】Python基于Quart框架实现SSE数据传输

Python基于Quart框架实现SSE数据传输 前言SSE简介理论分析代码实现 前言 在类似Chatgpt的应用中要实现数据的流式传输&#xff0c;模仿实现打字机效果&#xff0c;SSE是不二之选。传统的Flask框架不能满足异步处理的要求&#xff0c;没有异步处理就很难实现实时交互的需求&…

C++客户端Qt开发——Qt窗口(对话框)

5.对话框 ①对话框介绍 对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口&#xff0c;出现在程序最上层&#xff0c;用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有&#xff1a;QFiledialog…

【第四天】计算机网络知识 HTTP1.0,HTTP1.1与HTTP2.0的区别 HTTP3.0

HTTP1.0&#xff0c;HTTP1.1与HTTP2.0的区别 HTTP1.0 默认是短链接&#xff0c;可以强制开启长连接。HTTP1.1默认长连接。HTTP2.0采用多路复用。 HTTP1.0&#xff1a; 默认使用短链接&#xff0c;每次请求都需要建立一个TCP连接。它可以设置&#xff1a;Connection: keep-aliv…

利用OSMnx求路网最短路径并可视化(二)

书接上回&#xff0c;为了增加多路径的可视化效果和坐标匹配最近点来实现最短路可视化&#xff0c;我们使用图形化工具matplotlib结合OSMnx的绘图功能来展示整个路网图&#xff0c;并特别高亮显示计算出的最短路径。 多起终点最短路路径并计算距离和时间 完整代码#运行环境 P…