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

如何通过Prometheus Node Exporter获取单个目录的磁盘空间信息?

关于Prometheus获取目录级磁盘空间的解决方案

原生Prometheus+Node Exporter无法直接查询目录级消耗

Node Exporter默认只提供挂载点维度的磁盘指标(比如你用到的node_filesystem_avail_bytes、node_filesystem_size_bytes),没有内置统计单个目录空间的能力,所以没法直接用PromQL拿到某个挂载点下顶级目录的具体消耗。

可行的替代方案

1. 自定义脚本+Node Exporter的textfile采集器

这是最通用的实现方式,步骤很直接:

  • 写个Shell脚本,遍历目标挂载点的顶级目录,用du -sb统计每个目录的字节数(方便Prometheus处理),输出成Prometheus格式的文本:
    # 示例脚本(以/data挂载点为例)
    #!/bin/bash
    MOUNT_POINT="/data"
    OUTPUT_FILE="/var/lib/node_exporter/textfile_collector/directory_size.prom"
    
    echo "# HELP directory_size_bytes Disk usage of top-level directories under $MOUNT_POINT" > $OUTPUT_FILE
    echo "# TYPE directory_size_bytes gauge" >> $OUTPUT_FILE
    
    for dir in $(ls -d $MOUNT_POINT/*/); do
        dir_name=$(basename $dir)
        dir_size=$(du -sb $dir | awk '{print $1}')
        echo "directory_size_bytes{mountpoint=\"$MOUNT_POINT\",directory=\"$dir_name\"} $dir_size" >> $OUTPUT_FILE
    done
    
  • 给Node Exporter加启动参数--collector.textfile.directory=/var/lib/node_exporter/textfile_collector,指向存放上述脚本输出文件的目录
  • 用Crontab定时跑脚本(比如每5分钟一次),更新统计数据
  • 之后就能用PromQL查询并转成GB:
    directory_size_bytes{mountpoint="/data"} / 1024 / 1024 / 1024
    

2. 用第三方目录专属Exporter

比如node-dir-exporter,专门用来收集目录级磁盘使用数据,配置好要监控的目录路径后,它会自动暴露directory_size_bytes这类指标,直接用PromQL查询即可,转GB的方式和上面一样。

3. Grafana可视化树形展示

如果只是需要直观的树形目录空间视图,在Grafana里可以装Tree Panel插件,结合上面自定义的指标,把字节数转成GB后,配置成树形结构展示,就能清晰看到每个目录的空间占用层级。

注意点

  • 自定义脚本要保证有足够权限遍历目标目录的所有内容
  • 不要太频繁运行脚本(比如1分钟一次),避免加重系统IO负担
  • 如果目录数量多,建议过滤掉临时目录、缓存目录这类不需要监控的项,减少指标数量

内容的提问来源于stack exchange,提问作者vinWin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:24:37