所有 ClickHouse 实例都自带一组位于 system 数据库中的系统表,其中包含以下信息:
- 服务器状态、进程和环境。
- 服务器内部进程。
- 构建 ClickHouse 二进制文件时使用的选项。
直接查询这些表有助于监控 ClickHouse 部署,尤其适用于深入查看内部信息和进行调试。
ClickHouse Cloud 控制台内置了可用于查询系统表的 SQL 控制台 和 仪表盘工具。例如,下面的查询展示了在过去两小时内新建了多少个 parts (以及创建频率) :
SELECT
count() AS new_parts,
toStartOfMinute(event_time) AS modification_time_m,
table,
sum(rows) AS total_written_rows,
formatReadableSize(sum(size_in_bytes)) AS total_bytes_on_disk
FROM clusterAllReplicas(default, system.part_log)
WHERE (event_type = 'NewPart') AND (event_time > (now() - toIntervalHour(2)))
GROUP BY
modification_time_m,
table
ORDER BY
modification_time_m ASC,
table DESC
更多示例查询如需查看更多监控查询,请参阅以下资源:您还可以使用这些查询在 Cloud Console 中创建自定义仪表板。
ClickHouse 内置了高级可观测性仪表板功能,可通过 $HOST:$PORT/dashboard 访问 (需要用户名和密码) ,显示 system.dashboards 中包含的 Cloud 概览指标。
有关可用可视化内容以及如何使用它们进行故障排查的更多信息,请参阅高级仪表板文档。
为了全面查看整个集群,用户可以结合使用 clusterAllReplicas 函数和 merge 函数。clusterAllReplicas 函数支持跨 “default” 集群中的所有副本查询系统表,并将各节点的数据汇总为统一结果。与 merge 函数结合使用时,它可用于访问集群中特定表的全部系统数据。
例如,要查找过去一小时内所有副本中运行时间最长的前 5 个查询:
SELECT
type,
event_time,
query_duration_ms,
query,
read_rows,
tables
FROM clusterAllReplicas(default, system.query_log)
WHERE event_time >= (now() - toIntervalMinute(60)) AND type = 'QueryFinish'
ORDER BY query_duration_ms DESC
LIMIT 5
FORMAT VERTICAL
这种方法对于监控和调试整个集群范围内的操作尤其有价值,能帮助用户更有效地分析其 ClickHouse Cloud 部署的健康状况和性能。
更多详情,请参见跨节点查询。
直接查询系统表会增加生产服务的查询负载,导致 ClickHouse Cloud 实例无法进入闲置状态 (这可能会影响成本) ,并使监控可用性依赖于生产系统的健康状况。如果生产系统发生故障,监控也可能受到影响。
如果需要与生产环境隔离的实时生产监控,建议使用与 Prometheus 兼容的指标端点或 Cloud Console 仪表盘。这两者都使用预先抓取的指标,不会向底层服务发出查询。