文件系统性能监控需通过node exporter采集细粒度指标并在prometheus中留存查询告警;确认启用filesystem收集器、正确配置抓取任务、编写promql查询与告警规则,并在grafana构建可视化看板。

文件系统性能监控的关键在于采集真实、细粒度、可聚合的指标,并让它们在 Prometheus 中长期留存、可查询、可告警。Node Exporter 是默认启用文件系统采集器(filesystem collector)的,只要配置得当,就能稳定输出 node_filesystem_* 类指标,比如使用率、可用空间、inode 使用情况等。
确认 Node Exporter 已启用 filesystem 收集器
Node Exporter 默认开启大部分收集器,但部分环境(如精简镜像或自定义启动参数)可能禁用了文件系统相关采集。验证方法:
- 访问
http://<node-exporter-host>:9100/metrics</node-exporter-host>,搜索node_filesystem_avail_bytes或node_filesystem_size_bytes,确认存在且有非零数值 - 若无结果,说明收集器被关闭;启动容器时需显式启用:
--collector.filesystem.ignored-mount-points="^/(sys|proc|dev|run|var/lib/docker)($|/)" - 避免忽略根分区(
/)或关键挂载点(如/data、/var/log),否则监控将缺失核心路径
在 prometheus.yml 中正确配置抓取任务
确保 Prometheus 能持续拉取到文件系统指标,需检查 job 配置是否覆盖目标节点及路径:
- 静态配置示例中,
targets必须指向实际运行 Node Exporter 的主机和端口,例如:['192.168.1.10:9100', '192.168.1.11:9100'] - 推荐使用标签区分不同角色,例如添加
labels: {env: "prod", role: "db"},便于后续按环境或用途筛选文件系统数据 - 设置合理的抓取间隔(如
scrape_interval: 30s),太短会增加负载,太长则难以捕捉突发性磁盘写入高峰
常用 PromQL 查询与告警逻辑
采集只是起点,真正发挥作用的是对数据的理解和响应。几个高频实用表达式:
- 根分区使用率(排除 tmpfs 等虚拟文件系统):
(1 - node_filesystem_free_bytes{mountpoint="/",fstype!="tmpfs"} / node_filesystem_size_bytes{mountpoint="/",fstype!="tmpfs"}) * 100 - inode 使用率预警:
(1 - node_filesystem_files_free{mountpoint="/"} / node_filesystem_files{mountpoint="/"}) * 100 > 90 - 近一小时平均写入速率(字节/秒):
avg(rate(node_disk_written_bytes_total[1h])) by (instance, device) - 告警规则建议加入
for: 5m和降噪标签(如severity: "critical"),防止瞬时抖动触发误报
Grafana 中构建可读性强的文件系统看板
单纯数字不够直观,Grafana 是把指标转化为运维语言的桥梁:
- 使用 Stat 面板展示各节点根分区当前使用率,颜色阈值设为 85%(黄)、95%(红)
- 用 Time series 图叠加多个挂载点(如
/、/home、/var/lib/postgresql),观察增长趋势差异 - 添加 Logs 面板联动
journalctl -u docker --since "1 hour ago"类日志(需配合 Loki),定位磁盘爆满前的应用行为 - 导入社区成熟模板,如 ID 1860(Node Exporter Full)或 ID 14726(Filesystem Dashboard),再按实际路径微调变量











