ClickHouse三分片集群Prometheus监控缺失分片活动与可用性指标
解决ClickHouse分片集群的Prometheus监控缺失问题
方案1:通过系统表自定义采集分片状态指标
ClickHouse内置的系统表存储了分片和副本的核心状态数据,你可以通过定时查询这些表,将结果转换为Prometheus兼容的指标格式:
- 核心查询示例(针对分片可用性):
SELECT cluster, shard_num, host_name, port, is_local, CASE WHEN is_alive THEN 1 ELSE 0 END AS shard_alive FROM system.clusters WHERE cluster = '你的集群名称' - 落地方式:
- 编写Shell/Python脚本,定期执行上述查询,将输出转换为
clickhouse_shard_alive{cluster="xxx",shard_num="1",host="xxx"} 1这类标准指标格式 - 把脚本输出通过Prometheus的
node_exporter文本采集器暴露,或者直接推送到Pushgateway
- 编写Shell/Python脚本,定期执行上述查询,将输出转换为
方案2:启用副本相关内置指标间接判断分片状态
默认Prometheus指标没有直接的分片状态,但开启副本监控指标后,可通过副本状态聚合推断分片可用性:
- 在
config.xml中补充启用副本相关指标:<prometheus> <endpoint>/metrics</endpoint> <port>9363</port> <metrics>true</metrics> <events>true</events> <asynchronous_metrics>true</asynchronous_metrics> <!-- 添加副本状态指标 --> <enable_metrics>replication_queue_size,replica_is_leader,replica_is_synced</enable_metrics> </prometheus> - 通过
replica_is_synced等指标判断分片内副本的健康状态,若分片内至少一个副本同步正常,即可认定分片可用
方案3:用Blackbox Exporter探测分片节点可用性
通过Prometheus的Blackbox Exporter定期探测每个分片节点的服务端口(默认9000)和HTTP端口(默认8123):
- 配置Blackbox的TCP/HTTP探测规则,针对每个分片节点生成
probe_success指标 - 为指标添加
shard_num、cluster等标签,用于区分不同分片的可用性状态
内容的提问来源于stack exchange,提问作者Mohammad Reza Mousavi
相关产品推荐
相关产品推荐

