You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:00:11