如何在Grafana中为ClickHouse服务器可用磁盘空间创建时间序列?
构建ClickHouse磁盘可用空间时间序列的方案
由于system.disks仅存储实时瞬时数据,要构建时间序列,核心思路是定期采集并持久化这些瞬时数据到自定义时序表,以下是具体实现方案:
1. 创建自定义时序存储表
首先创建用于存储磁盘空间历史数据的表,推荐使用MergeTree引擎(适配时序数据存储特性),可按需添加TTL规则自动清理旧数据:
CREATE TABLE disk_space_history ( timestamp DateTime DEFAULT now(), host String DEFAULT hostName(), -- 集群环境下用于区分节点 disk_name String, total_space UInt64, free_space UInt64, used_space UInt64 ) ENGINE = MergeTree() ORDER BY (host, disk_name, timestamp) TTL timestamp + INTERVAL 30 DAY DELETE; -- 自动删除30天前的历史数据,可根据需求调整周期
2. 定期采集数据到自定义表
有两种常用方式实现定期采集:
方式一:使用ClickHouse内置任务调度(21.12+版本支持)
直接在ClickHouse中创建定时任务,指定采集频率(示例为每5分钟执行一次):
CREATE TASK disk_space_collection ON SCHEDULE EVERY 5 MINUTE DO INSERT INTO disk_space_history (disk_name, total_space, free_space, used_space) SELECT name, total_space, free_space, total_space - free_space AS used_space FROM system.disks;
方式二:使用外部定时工具(如crontab)
如果ClickHouse版本不支持内置任务调度,可通过外部定时工具触发采集命令:
# 编写shell脚本 disk_collect.sh #!/bin/bash clickhouse-client --query " INSERT INTO disk_space_history (disk_name, total_space, free_space, used_space) SELECT name, total_space, free_space, total_space - free_space AS used_space FROM system.disks; " # 添加crontab任务,每5分钟执行一次 */5 * * * * /path/to/disk_collect.sh
3. 查询时间序列数据
数据采集完成后,即可基于disk_space_history表查询磁盘空间的时间序列,例如查询某节点某磁盘的可用空间变化:
SELECT timestamp, free_space / 1024 / 1024 / 1024 AS free_space_gb -- 转换为GB单位便于查看 FROM disk_space_history WHERE host = 'your-host-name' AND disk_name = 'default' ORDER BY timestamp DESC;
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

