0
31
0
0
首页/专栏/ 技术分享/ 查看内容

利用高级监控仪表板解决常见数据库问题

 admin   发表于  2025-1-13 17:28
专栏 技术分享



在生产环境中,数据库系统的监控是不可或缺的。了解部署的健康状况是避免中断或快速解决问题的关键。

ClickHouse 深知这一点,因此默认提供了一组预配置的高级监控仪表板。高级仪表板是一款轻量级工具,可深入分析 ClickHouse 系统及其运行环境,帮助您提前识别性能瓶颈、系统故障以及低效操作,从而保持系统高效运行。

无论您是处理高查询负载的数据工程师,还是保障 ClickHouse 高可用性的站点稳定性工程师 (SRE),高级仪表板都能为您提供高效的监控和故障排查能力。该工具支持 ClickHouse OSS(开源软件)和 ClickHouse Cloud 环境。


快速上手高级监控仪表板

高级仪表板无需额外安装即可使用。根据您的运行环境,可能需要启用指标日志和异步指标日志来生成默认的可视化效果。如果您使用的是 ClickHouse Cloud,这些功能已默认启用,无需额外配置。

若需手动启用,请参考全球设置文档,修改服务器配置文件 /etc/clickhouse-server/config.d/metric_log.xml

<clickhouse>    <metric_log>        <database>system</database>        <table>metric_log</table>        <flush_interval_milliseconds>7500</flush_interval_milliseconds>        <collect_interval_milliseconds>1000</collect_interval_milliseconds>        <max_size_rows>1048576</max_size_rows>        <reserved_size_rows>8192</reserved_size_rows>        <buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>        <flush_on_crash>false</flush_on_crash>    </metric_log>    <asynchronous_metric_log>        <database>system</database>        <table>asynchronous_metric_log</table>        <flush_interval_milliseconds>7500</flush_interval_milliseconds>        <collect_interval_milliseconds>1000</collect_interval_milliseconds>        <max_size_rows>1048576</max_size_rows>        <reserved_size_rows>8192</reserved_size_rows>        <buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>        <flush_on_crash>false</flush_on_crash>    </asynchronous_metric_log></clickhouse>

启动 ClickHouse 服务器后,您可以通过以下地址访问高级监控仪表板:

<your_clickhouse_url>/dashboard

默认情况下,您可以使用系统的默认用户登录访问仪表板。但为了安全起见,建议为此专门创建一个独立的用户。

要正常运行默认的可视化功能,该用户需要具备以下表的读取权限:

  • system.dashboards:存储仪表板的可视化定义。

  • system.metric_log:记录来自 system.metrics 和 system.events 表的历史指标值。

  • system.asynchronous_metric_log:保存 system.asynchronous_metrics 的历史数据。

同时,用户还需要以下两个特殊权限:CREATE TEMPORARY TABLE ON *.* 和 REMOTE ON *.*

下面,我们为实验创建一个仪表板专用用户:

-- Create dashboard userCREATE USER dashboard_user IDENTIFIED BY ;
-- Grant rights to access advanced dashboardsGRANT REMOTE ON *.* to dashboard;GRANT CREATE TEMPORARY TABLE on *.* to dashboard;GRANT SELECT ON system.metric_log to dashboard;GRANT SELECT ON system.asynchronous_metric_log to dashboard;GRANT SELECT ON system.dashboards to dashboard;

您可以通过在 URL 中添加用户名参数的方式访问,例如:  

<your_clickhouse_url>/dashboard?user=dashboard

登录时,输入创建仪表板用户时设置的密码。

在页面顶部的导航栏中,您可以查看应用程序加载仪表板定义时使用的 SQL 查询。

-- Load dashboard definitionSELECT title, query FROM system.dashboards WHERE dashboard = 'Overview'

仪表板的查询过滤器默认设置为 "Overview"。不同的仪表板集适用于不同的场景:默认的 "Overview" 仪表板适合本地部署,而 "Cloud Overview" 则针对云部署环境进行了优化。


高级仪表板的默认可视化功能

高级仪表板内置了一系列默认图表,能够为您提供 ClickHouse 系统的实时运行状况和性能洞察。为了便于查看,这些图表被分为三类,分别对应不同的使用场景。


ClickHouse 专用指标

这些图表专注于监控 ClickHouse 实例的运行状况和性能表现:

  • 每秒查询数 (Queries Per Second):监控系统每秒处理的查询数量。

  • 每秒读取行数 (Selected Rows/Sec):显示查询读取的数据行数。

  • 每秒插入行数 (Inserted Rows/Sec):反映数据写入的速率。

  • MergeTree 活跃分片总数 (Total MergeTree Parts):展示 MergeTree 表中活跃的分片数,帮助识别未批量处理的插入操作。

  • 单分区最大分片数 (Max Parts for Partition):突出显示某个分区中分片数量的峰值。

  • 当前运行的查询数 (Queries Running):显示系统中正在执行的查询数目。

  • 每秒读取字节数 (Selected Bytes Per Second):显示查询读取的数据量。


系统健康状况相关指标

除了 ClickHouse 本身,底层系统的状态同样至关重要。这些图表帮助您监控相关的系统资源:

  • I/O 等待时间 (IO Wait):跟踪磁盘 I/O 操作的等待时间。

  • CPU 等待时间 (CPU Wait):测量因 CPU 争用导致的操作延迟。

  • 磁盘读取量 (Read From Disk):显示从磁盘读取的数据量。

  • 文件系统读取量 (Read From Filesystem):记录从文件系统(包括页面缓存)读取的数据量。

  • 内存使用量 (Memory tracked, bytes):展示 ClickHouse 跟踪的内存占用情况。

  • 15 分钟平均负载 (Load Average (15 minutes)):显示系统最近 15 分钟的平均负载。

  • 用户空间 CPU 使用率 (OS CPU Usage (Userspace)):监控运行用户空间代码时的 CPU 使用情况。

  • 内核空间 CPU 使用率 (OS CPU Usage (Kernel)):监控运行内核代码时的 CPU 使用情况。


ClickHouse Cloud 专用指标

ClickHouse Cloud 采用对象存储(如 S3 类型)保存数据。以下图表可帮助您检测相关接口的性能:

  • S3 读取等待时间 (S3 Read wait):反映对 S3 进行读取请求的延迟。

  • 每秒 S3 读取错误数 (S3 read errors per second):监控读取错误的发生频率。

  • 每秒从 S3 读取数据量 (Read From S3 (bytes/sec)):展示从 S3 存储读取数据的速率。

  • 每秒写入 S3 的请求数 (Disk S3 write req/sec):监控写入 S3 的操作频率。

  • 每秒读取 S3 的请求数 (Disk S3 read req/sec):监控从 S3 读取的操作频率。

  • 页面缓存命中率 (Page cache hit rate):评估页面缓存的使用效率。

  • 文件系统缓存命中率 (Filesystem cache hit rate):显示文件系统缓存的命中情况。

  • 文件系统缓存大小 (Filesystem cache size):记录文件系统缓存的当前大小。

  • 每秒发送的网络流量 (Network send bytes/sec):监控出站网络流量的速率。

  • 每秒接收的网络流量 (Network receive bytes/sec):监控入站网络流量的速率。

  • 并发网络连接数 (Concurrent network connections):显示当前的并发网络连接数量。


定制高级仪表板中的图表  

在高级仪表板中,每个可视化图表都由一个关联的 SQL 查询驱动,这些查询负责提供图表的数据内容。您可以通过点击图表上的铅笔图标来修改相关查询。

在编辑界面中,您可以根据需求调整查询内容。此外,您还可以通过点击“添加图表 (Add chart)”按钮新增自定义图表,并在新图表中编辑对应的查询。例如,我们可以新增一个图表来跟踪主键的内存使用情况。以下是为该图表提供支持的 SQL 查询:

SELECT toStartOfInterval(event_time, INTERVAL {rounding:UInt32} SECOND)::INT AS t, avg(value) FROM merge('system', '^asynchronous_metric_log') WHERE event_date >= toDate(now() - {seconds:UInt32}) AND event_time >= now() - {seconds:UInt32} AND metric = 'TotalPrimaryKeyBytesInMemory' GROUP BY t ORDER BY t WITH FILL STEP {rounding:UInt32}

需要注意,通过 Web 应用程序添加的图表是以查询参数的形式编码的,这使得它们可以方便地添加到书签中。

如果您需要一种更稳定的方式,可以将自定义图表直接存储到 ClickHouse 数据库中。操作步骤如下:

1. 创建一个与默认表 system.dashboards 架构一致的新表。

-- Create a separate databaseCREATE DATABASE custom;
-- Create the custom dashboard tableCREATE TABLE custom.dashboards( `dashboard` String, `title` String, `query` String) ORDER BY ()

2. 将您的自定义可视化内容插入到新表中。

-- Total size primary keys visualization queryINSERT INTO custom.dashboards (dashboard, title, query)VALUES (    'Overview',    'Total primary keys size',    'SELECT toStartOfInterval(event_time, INTERVAL {rounding:UInt32} SECOND)::INT AS t, avg(value) FROM merge(\'system\', \'^asynchronous_metric_log\') WHERE event_date >= toDate(now() - {seconds:UInt32}) AND event_time >= now() - {seconds:UInt32} AND metric = \'TotalPrimaryKeyBytesInMemory\' GROUP BY t  ORDER BY t WITH FILL STEP  {rounding:UInt32}');

通过这种方式,您可以将自定义数据库中的仪表板定义与 Web 应用程序中默认的定义合并,从而实现扩展和优化。

SELECT title, query FROM merge(REGEXP('custom|system'),'dashboards') WHERE dashboard = 'Overview'

最后,请确保仪表板用户具备访问自定义数据库所需的权限。例如,用户需要对相关表拥有读取和修改的权限,以便正确加载和管理仪表板内容。


如何通过高级仪表板识别问题  

实时监控 ClickHouse 服务的运行状况,可以帮助您在问题影响业务之前及时发现和解决问题。以下是利用高级仪表板可以识别的一些常见问题。


未批量插入的数据问题  

根据最佳实践文档的建议,在 ClickHouse 中插入数据时应尽量使用批量插入。

合理的批量大小可以显著减少数据写入过程中创建的部分数量,从而优化磁盘写入效率,并降低合并操作的频率。

要判断插入操作是否优化,可以关注以下两个关键指标:每秒插入行数 (Inserted Rows/sec) 和每个分区的最大部分数 (Max Parts for Partition)。

如上图所示,从 13 点到 14 点之间,每秒插入行数和每个分区的最大部分数出现了两次峰值。这表明数据摄取速度是合理的。

然而,16 点之后,我们注意到每个分区的最大部分数急剧上升,但每秒插入行数却很低。这表明数据分区的大小可能未得到有效优化。


资源密集型查询问题  

某些 SQL 查询可能会占用大量资源(如 CPU 或内存)。监控这些查询的资源消耗情况,对于保障系统整体性能至关重要。

如果资源使用量突然增加,而查询吞吐量并未显著变化,则可能是某些高成本查询导致的。这种现象可以通过高级仪表板快速发现。

以下是一个 CPU 使用率达到峰值,但每秒执行的查询数量未发生显著变化的示例:


主键设计问题  

高级仪表板还可以帮助识别主键设计不当的问题。根据文档,针对具体使用场景选择合适的主键,能够显著提升查询性能,因为这样可以减少 ClickHouse 在查询过程中需要读取的行数。

您可以通过监控“每秒选中行数 (Selected Rows/sec)”指标来判断主键设计是否需要优化。选中行数的突然激增,可能意味着查询吞吐量的增加,也可能表明某些查询需要选中大量行来执行操作。

通过时间戳过滤条件,您可以在 system.query_log 表中找到峰值时间段内执行的查询。

例如,我们可以运行以下查询,查看上午 11:20 到 11:30 之间执行的所有查询,以找出哪些查询读取了过多的行。

SELECT    type,    event_time,    query_duration_ms,    query,    read_rows,    tablesFROM system.query_logWHERE has(databases, 'default') AND (event_time >= '2024-12-23 11:20:00') AND (event_time <= '2024-12-23 11:30:00') AND (type = 'QueryFinish')ORDER BY query_duration_ms DESCLIMIT 5FORMAT VERTICAL
Row 1:──────type: QueryFinishevent_time: 2024-12-23 11:22:55query_duration_ms: 37407query: SELECT toStartOfMonth(review_date) AS month, any(product_title), avg(star_rating) AS avg_starsFROM amazon_reviews_no_pkWHERE product_category = 'Home'GROUP BY month, product_idORDER BY month DESC, product_id ASCLIMIT 20read_rows: 150957260tables: ['default.amazon_reviews_no_pk']
Row 2:──────type: QueryFinishevent_time: 2024-12-23 11:26:50query_duration_ms: 7325query: SELECT toStartOfMonth(review_date) AS month, any(product_title), avg(star_rating) AS avg_starsFROM amazon_reviews_no_pkWHERE product_category = 'Home'GROUP BY month, product_idORDER BY month DESC, product_id ASCLIMIT 20read_rows: 150957260tables: ['default.amazon_reviews_no_pk']
Row 3:──────type: QueryFinishevent_time: 2024-12-23 11:24:10query_duration_ms: 3270query: SELECT toStartOfMonth(review_date) AS month, any(product_title), avg(star_rating) AS avg_starsFROM amazon_reviews_pkWHERE product_category = 'Home'GROUP BY month, product_idORDER

路过

雷人

握手

鲜花

鸡蛋

版权声明:本文为 clickhouse 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
返回顶部