阿里云可观测Prometheus实战:全方位监控ClickHouse数据库
引言
ClickHouse 是一款专为在线分析处理(OLAP)设计的列式数据库管理系统(DBMS),其核心优势在于极高的数据压缩率和极快的查询响应速度。同时,它原生支持 SQL,在大宽表聚合分析场景中表现卓越,因而被广泛采用。本文将结合阿里云可观测监控 Prometheus 版,介绍如何对开源 ClickHouse 进行端到端的监控实践。
一、ClickHouse 简介
(一)核心特性
- 列式存储与压缩:
查询时仅扫描相关列,大幅减少 I/O 与网络传输,显著提升分析效率。 - 完整的 DBMS 功能:
支持 DDL(数据定义语言),可在线创建、修改或删除数据库、表及视图,无需重启服务;支持 DML(数据操作语言),灵活进行查询、插入、修改和删除。 - 权限控制:
可按用户粒度设定数据库或表的操作权限,保障数据安全。 - 数据备份与恢复:
提供数据导出导入机制,满足生产环境的容灾需求。 - 分布式管理:
支持集群模式,可自动管理多个数据库节点。
(二)典型适用场景
- 需要进行复杂聚合分析的 OLAP 环境;
- 要求稳定承载大量数据写入;
- 查询频率不是极高;
- 不需要事务、复杂表间 join 等高级 DBMS 特性。
(三)核心概念
- ClickHouse 集群(Cluster)
物理上由多个 ClickHouse Server 实例组成分布式数据库,每个实例可包含一个或多个副本(Replica)及分片(Shard)。逻辑上,一个集群可容纳多个数据库(Database)。 - 分片(Shard)
在超大规模数据处理场景中,单台服务器存在瓶颈。ClickHouse 将数据分散存储在多台服务器上,每台负责一部分数据,每台服务器即称为一个分片。 - 副本(Replica)
为了保障数据高可用与安全,ClickHouse 会将数据冗余存储到两台或多台服务器,这些备份节点即为副本。 - 数据库(Database)
集群中的顶层逻辑容器,内部包含表(Table)、列(Column)、视图(View)、函数及数据类型等。 - 表(Table)
数据的基本组织形式,由多行多列构成。
二、ClickHouse Metrics 监控参考模型
我们从指标采集、监控大盘和告警规则这三个维度,构建 ClickHouse 监控闭环。
(一)指标采集
1. 主机节点监控
通过 Node-Exporter 实现对集群/ECS 节点的 CPU、内存、磁盘、inode 等基础设施指标的采集。

2. ClickHouse 服务指标
ClickHouse 内置了 system.metrics、system.events 和 system.asynchronous_metrics 三张系统表用于暴露运行状态。借助预先部署的 clickhouse-exporter,可将这些系统表的数据转换并推送至阿里云可观测监控 Prometheus 版。
- 系统指标(metrics):来自
system.metrics,展示当前正在执行的高层次概要,如正在执行的查询总数、正在合并的操作数等。 - 系统事件(events):出自
system.events,累计统计已执行的高层次事件,包括查询总次数、SELECT 查询总次数等(约 64 个指标)。 - 异步指标(asynchronous_metrics):源自
system.asynchronous_metrics,反映后台异步运行的概要信息,如当前分配的内存、执行队列中的任务数量等(约 500 个指标)。 - 查询日志:共有六种类型,默认关闭,需在
config.xml中开启,之后可在system.query_log表中查询。



⚠️注意:以上仅为关键指标,更多详细指标可前往 Prometheus 实例详情页 → 集成中心 → ClickHouse 查看。

(二)ClickHouse 监控大盘
阿里云默认提供了 arms-clickhouse-ecs 和 arms-clickhouse-k8s 两个预设大盘,分别对应 ClickHouse 部署在 ECS 和容器服务 ACK 两种环境。所有图表数据均源自上述 Metrics 指标。
⚠️注意:需提前安装 Node-Exporter,大盘中的数值仅为展示示例,实际数值以真实 ClickHouse 环境为准。
1. 主机节点指标

2. ClickHouse Server 指标

3. MergeTree 指标

4. 消息队列指标

(三)告警规则
参照前述主要指标,可配置如下重点告警项(已内置在 arms-clickhouse 告警规则中,阈值可按需调整):
- 【L0】CPU 使用率 > 90%
- 【L0】内存使用率 > 90%
- 【L0】磁盘使用率 > 90%
- 【L0】Inode 使用率 > 90%
- 【L0】写入失败率 > 5%
- 【L1】运行中 Query 数量 > 95
- 【L1】连接数 > 4000
- 【L1】失败 Query 数量 > 10
(四)常见问题排查
1. CPU 使用率过高
- 通过
top -H -p <pid>确认高 CPU 是否由 ClickHouse 进程引起。 - 执行以下 SQL 查看最耗时的查询:
SHOW PROCESSLIST query WHERE query NOT LIKE '%SYSTEM%' ORDER BY elapsed DESC LIMIT 10 - 检查 ClickHouse 配置文件,调整不合理参数。
- 分析 ClickHouse 日志,定位错误或告警。
- 评估硬件资源是否充足,必要时进行扩容。
- 考虑升级到更稳定的 ClickHouse 版本。
2. 内存使用率过高
- 通过系统表查询内存占用详情:
SELECT * FROM system.metrics WHERE metric LIKE '%memory%'; - 审视 ClickHouse 配置,优化内存相关参数。
- 使用
free -m检查系统整体内存。 - 查看 ClickHouse 日志寻找异常。
- 升级版本或优化高消耗查询,减少数据扫描与计算量。
3. 磁盘使用率过高
- 使用
df -h查看系统磁盘空间。 - 核查 ClickHouse 配置,避免不合理的磁盘占用。
- 通过内置查询定位大表:
SELECT database, table, sum(bytes) AS total_size FROM system.parts WHERE active GROUP BY database, table ORDER BY total_size DESC - 检查日志。
- 清理过期或无用数据,释放磁盘空间。
三、通过阿里云可观测监控 Prometheus 版监控 ClickHouse
(一)安装部署
根据 ClickHouse 的部署环境选择对应方式:
- 部署在容器服务 ACK 中 → 参考 Prometheus for 容器服务
- 部署在 ECS 中 → 参考 Prometheus for ECS
方式一:Prometheus for 容器服务
在 Prometheus for 容器服务实例中,ClickHouse 已出现在集成中心。进入 ARMS 控制台 → 实例详情 → 集成中心,点击 ClickHouse 图标可预览指标列表和大盘缩略图。点击“+安装”即可接入,配置项如下:
- Exporter 名称:自定义
- ClickHouse scrape 地址:Exporter 可访问的 ClickHouse IP:Port
- ClickHouse 用户名:登录用户
- ClickHouse 密码:对应密码
- Metrics 采集间隔:默认 30 秒

确认后,名为 clickhouse-exporter-<名称> 的 Exporter 会被部署到 arms-prom 命名空间,并自动完成采集配置。

在集成中心 → 已安装 → ClickHouse 中,可快捷查看 Target、指标、大盘、告警、服务发现及 Exporter 详情。

方式二:Prometheus for ECS
在相同 VPC 下创建 Prometheus for ECS 实例,主机节点监控依赖 Node-Exporter。先在集成中心点击 Node-Exporter 并安装到对应 ECS 实例。

随后在集成中心点击 ClickHouse,其配置项与容器服务场景相同。
指标未采集的排查
⚠️注意:以下适用于 Prometheus for 容器服务实例,ECS 实例请联系 Prometheus 值班人员。
- 检查 Prometheus Target 状态:若为 Unhealthy,排查 clickhouse-exporter Pod 运行状态;若正常则进入下一步。

- 若 Target 状态正常但指标量很少且多为
go_相关,查看 clickhouse-exporter Pod 日志,确认是否有报错。


- 在日志中确认 Exporter 抓取目标 URL 是否可达。

(二)查看监控大盘
在实例详情 → 集成中心 → 已安装 → ClickHouse 中选择“大盘”,根据环境选用 arms-clickhouse-ecs 或 arms-clickhouse-k8s。
arms-clickhouse-k8s 参数说明:
- datasource:选择对应实例
- job:clickhouse-exporter 对应的 Job 名称(与 Exporter 名称一致),用于展示 ClickHouseServer、MergeTree 及消息队列指标
- namespace:ClickHouse Pod 所在命名空间,用于节点指标过滤
- pod:可指定具体 Pod

arms-clickhouse-ecs 参数说明:
- datasource:数据源实例
- job:clickhouse-exporter 对应 Job 名称
- instance:ECS 实例 IP,用于主机节点过滤

(三)配置告警
集成中心安装 ClickHouse 时,已默认生成 arms-clickhouse 告警分组规则(未启用)。可在集成中心 → 已安装 → ClickHouse → 告警 → 创建告警规则,选择 arms-clickhouse 分组,根据环境启用所需指标,调整阈值并保存即可生效。

四、自建 Prometheus 与阿里云可观测 Prometheus 版对比
Prometheus 作为业界主流开源可观测工具,虽已普遍应用,但在监控云产品时仍面临诸多挑战:
- 全套自建需手动部署、配置 Prometheus、Grafana、AlertManager 等组件,过程复杂、周期长,且升级维护繁琐;
- 开源大盘专业度不足,更新缓慢,缺乏开箱即用的丰富指标;
- 受限于安全与组织隔离,多 VPC 场景需重复独立部署 Prometheus,运维成本高。
阿里云可观测监控 Prometheus 版针对上述痛点进行了深度优化,提供免运维、一键集成、专业大盘与告警模板,大幅降低监控建设门槛。

结语
阿里云可观测监控 Prometheus 版与容器服务深度集成,可为开源 ClickHouse 提供指标采集、预置大盘、告警规则的一键式接入,用户无需关注底层运维,开箱即用。目前 ClickHouse 监控功能仍在持续迭代,欢迎试用并反馈建议。
相关链接:
[1] 开源 exporter:https://github.com/ClickHouse/clickhouse_exporter
[2] 开源 Grafana ClickHouse 大盘:https://grafana.com/grafana/dashboards/882-clickhouse/