prometheus - 监控磁盘

本文介绍如何使用节点导出器监控磁盘使用情况,包括度量挂载点的磁盘空间百分比,预测磁盘爆满时间,以及通过正则表达式匹配多个挂载点。

节点导出器的磁盘使用指标位于以node_filesystem为前缀的指标列表中

node_filesystem_size_bytes
度量显示正在被监控的每个文件系统挂载的大小。
磁盘空间百分比

(node_filesystem_size_bytes {mountpoint ="/"} - node_filesystem_free_bytes {mountpoint ="/"}) /
node_filesystem_size_bytes {mountpoint ="/"} * 100

不过,与内存度量不同的是,我们在每个主机上的每个挂载点都有文件系统度量。因此我们添加了挂载点标签,特
别是 / 。 这将在被监视的每个主机上返回该文件系统的磁盘使用度量。

如果我们想要或者需要,我们现在可以为配置的特定挂载点添加额外的查询。要监视一个称为/data 的挂载点,我们将使用

(node_filesystem_size_bytes{mountpoint="/data"} - node_filesystem_free_bytes{mountpoint="/data"}) / node_filesystem_size_bytes{mountpoint="/data"} * 100

或者我们可以使用正则表达式来匹配多个挂载点

(node_filesystem_size_bytes{mountpoint=~"/|/run "} - node_filesystem_free_bytes{mountpoint=~"/|/run"}) / node_filesystem_size_bytes{mountpoint=~"/|/run"} * 100

可以看到,我们已经更新了挂载点标签,将操作符从改为 ==,这告诉 Prometheus 右手 边的值将是一个正则表达式。
然后我们匹配了 /run 和 / 文件系统 。
注意:

  1. 不能使用匹配空字符串的正则表达式。
  2. 对于不匹配的正则表达式,还有一个 运算符。

预计多长时间磁盘爆满

predict_linear(node_filesystem_free_bytes {mountpoint ="/"}[1h], 4*3600) < 0
predict_linear(node_filesystem_free_bytes {job="node"}[1h], 4*3600) < 0

//一旦小于就会返回一个负数,然后触发报警
predict_linear()

<think>我们正在讨论如何使用Prometheus监控特定磁盘。根据引用[4],我们知道Prometheus通过exporter来收集指标,对于主机监控通常使用node_exporter。node_exporter会暴露各种系统指标,包括磁盘相关指标。 监控特定磁盘的方法: 1. 确保已安装并运行node_exporter(默认端口9100) 2. 在Prometheus配置文件中添加对node_exporter的抓取配置(如引用[4]所示) 3. 使用node_exporter提供的磁盘相关指标进行监控 关键指标: - node_filesystem_size_bytes:文件系统总大小 - node_filesystem_avail_bytes:可用空间 - node_filesystem_free_bytes:空闲空间 - node_filesystem_files:文件总数 - node_filesystem_files_free:空闲文件节点数 如果要监控特定磁盘,可以在PromQL查询中使用`device`标签进行过滤。例如,只监控`/dev/sda1`分区: ``` node_filesystem_avail_bytes{device="/dev/sda1"} ``` 步骤详解: 1. 配置Prometheus抓取node_exporter(引用[4]中的配置示例) 2. 在Prometheus的Web界面或Grafana中使用上述指标进行查询和绘图 注意事项: - 确保node_exporter版本支持所需的指标(一般较新版本均可) - 如果磁盘设备标签值不确定,可以先查询所有磁盘设备:`node_filesystem_avail_bytes` 示例PromQL查询: - 特定磁盘(设备名为/dev/sda1)的可用空间(字节): $$ node\_filesystem\_avail\_bytes\{device="/dev/sda1"\} $$ - 特定挂载点(如/)的磁盘使用率(百分比): $$ (1 - \frac{node\_filesystem\_free\_bytes\{mountpoint="/"\}}{node\_filesystem\_size\_bytes\{mountpoint="/"\}}) \times 100 $$ 如果设备名或挂载点有多个(比如多个分区),可以通过选择实例(instance)标签进一步限定。 如果用户需要监控磁盘I/O,可以使用以下指标: - node_disk_read_bytes_total:累计读取字节数 - node_disk_written_bytes_total:累计写入字节数 同样,通过device标签指定磁盘,例如:`node_disk_read_bytes_total{device="sda"}` 注意:磁盘I/O指标的名称可能因node_exporter版本而略有不同,请以实际暴露的指标为准。 相关问题: 1. 如何安装和配置node_exporter来监控Linux主机? 2. 如何通过PromQL计算磁盘使用率? 3. node_exporter还提供哪些有用的磁盘相关指标? 4. 如何监控磁盘的读写速率? 5. 如何在Grafana中可视化特定磁盘的使用情况? 通过以上方法,我们可以实现对特定磁盘监控。需要注意的是,node_exporter默认会采集所有磁盘和分区信息,因此我们在使用指标时通过标签选择器来过滤出我们关心的磁盘即可。 引用说明: 根据引用[4]我们得知,Prometheus监控主机是通过node_exporter来实现的,配置中将node_exporter的地址(ip:9100)作为target。因此,监控磁盘也是建立在node_exporter的基础上的[^4]。 </think>以下是使用 Prometheus 监控特定磁盘的完整方法指南,结合 Node Exporter 实现精准监控: ### 🔧 监控特定磁盘的步骤 #### 1. 安装并配置 Node Exporter ```bash # 下载并运行 Node Exporter docker run -d \ --net="host" \ --pid="host" \ --name=node_exporter \ -v "/:/host:ro,rslave" \ quay.io/prometheus/node-exporter:latest \ --path.rootfs=/host ``` #### 2. 修改 Prometheus 配置文件 编辑 `prometheus.yml`,添加磁盘过滤规则: ```yaml scrape_configs: - job_name: 'disk-monitoring' static_configs: - targets: ['localhost:9100'] # Node Exporter 地址 params: collect[]: - 'diskstats' # 只采集磁盘指标 metric_relabel_configs: - source_labels: [device] regex: '(sda|nvme0n1)' # 只监控指定磁盘设备 action: keep ``` #### 3. 重启 Prometheus 服务 ```bash docker restart prometheus_container ``` ### 📊 关键磁盘监控指标 | 指标名称 | 说明 | 示例 PromQL | |---------|------|------------| | `node_disk_read_bytes_total` | 磁盘读取总量 | `rate(node_disk_read_bytes_total{device="sda"}[5m])` | | `node_disk_write_bytes_total` | 磁盘写入总量 | `rate(node_disk_write_bytes_total{device="sda"}[5m])` | | `node_disk_io_time_seconds_total` | I/O操作时间 | `rate(node_disk_io_time_seconds_total{device="sda"}[10m])` | | `node_filesystem_avail_bytes` | 可用空间 | `node_filesystem_avail_bytes{mountpoint="/", device="/dev/sda1"}` | | `node_disk_io_now` | 当前I/O操作数 | `node_disk_io_now{device="sda"}` | ### 📈 实用监控面板配置(Grafana) ```json { "panels": [{ "title": "磁盘使用率", "type": "gauge", "targets": [{ "expr": "100 - (node_filesystem_avail_bytes{device=~'/dev/sda.*'} * 100 / node_filesystem_size_bytes)", "format": "time_series" }] },{ "title": "磁盘IOPS", "type": "graph", "targets": [{ "expr": "rate(node_disk_reads_completed_total{device='sda'}[5m]) + rate(node_disk_writes_completed_total{device='sda'}[5m])" }] }] } ``` ### 🔍 验证监控数据 1. 访问 Prometheus Web UI:`http://<prometheus-ip>:9090` 2. 执行查询: ```promql node_disk_read_bytes_total{device="sda"} ``` 3. 检查返回数据是否包含目标磁盘指标 ### ️ 注意事项 1. **设备名匹配**: - Linux 磁盘设备通常命名为 `sda`, `sdb`, `nvme0n1` 等 - 使用 `lsblk` 命令确认实际设备名 2. **挂载点监控**: ```promql node_filesystem_size_bytes{mountpoint="/data"} # 监控特定挂载点 ``` 3. **指标更新频率**: - 默认抓取间隔为15秒,可通过 `scrape_interval` 调整[^4] 4. **容器环境**: - 在 Kubernetes 中需使用 `--path.procfs=/host/proc` 挂载主机进程文件系统[^1] ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值