MENU

《Prometheus监控MinIO:指标采集与Grafana可视化实战指南》

• December 16, 2025 • Read: 96 • 编码👨🏻‍💻

一、Prometheus监控配置与MinIO指标采集​

1.1 先决条件:

  • 一个现有的 Prometheus 部署,并支持告警
  • 一个现有的 MinIO 部署,并具有对 Prometheus 部署的网络访问权限
  • 本地主机上安装了 mc,并已配置可访问 MinIO

1.2 使用mc命令生成抓取配置

使用 mc admin prometheus generate 命令生成抓取配置,供 Prometheus 用于发出抓取请求

1.2.1 抓取 MinIO 集群的指标

以下命令抓取 MinIO 集群的指标。将 ALIAS 替换为 MinIO 部署的 别名。

mc admin prometheus generate ALIAS

该命令返回类似于以下内容的输出:

global:
   scrape_interval: 60s

scrape_configs:
   - job_name: minio-job
     bearer_token: TOKEN
     metrics_path: /minio/v2/metrics/cluster
     scheme: https
     static_configs:
     - targets: [minio.example.net]

1.2.2 抓取 MinIO 服务器上某个节点的指标

以下命令抓取 MinIO 服务器上某个节点的指标。将 ALIAS 替换为 MinIO 部署的 别名。

mc admin prometheus generate ALIAS node

该命令返回类似于以下内容的输出:

global:
   scrape_interval: 60s

scrape_configs:
   - job_name: minio-job-node
     bearer_token: TOKEN
     metrics_path: /minio/v2/metrics/node
     scheme: https
     static_configs:
     - targets: [minio-1.example.net, minio-2.example.net, minio-N.example.net]

1.2.3 抓取 MinIO 服务器上存储桶的指标

以下命令抓取 MinIO 服务器上存储桶的指标。将 ALIAS 替换为 MinIO 部署的 别名。

mc admin prometheus generate ALIAS bucket

该命令返回类似于以下内容的输出:

global:
   scrape_interval: 60s

scrape_configs:
   - job_name: minio-job-bucket
     bearer_token: TOKEN
     metrics_path: /minio/v2/metrics/bucket
     scheme: https
     static_configs:
     - targets: [minio.example.net]

1.2.4 抓取 MinIO 服务器上资源的指标。

以下命令抓取 MinIO 服务器上资源的指标。将 ALIAS 替换为 MinIO 部署的 别名。

⚠️:版本 RELEASE.2023-10-07T15-07-38Z 中的新增功能。

mc admin prometheus generate ALIAS resource

该命令返回类似于以下内容的输出:

global:
   scrape_interval: 60s

scrape_configs:
   - job_name: minio-job-resource
     bearer_token: TOKEN
     metrics_path: /minio/v2/metrics/resource
     scheme: https
     static_configs:
     - targets: [minio.example.net]

1.2.5 配置抓取注意事项

  • 设置适当的 scrape_interval 值以确保每个抓取操作在下一个操作开始之前完成。建议的值为 60 秒。由于要抓取的指标数量,某些部署需要更长的抓取间隔。为了减少 MinIO 和 Prometheus 服务器的负载,请选择满足监控要求的最长间隔。
  • 将 job_name 设置为与 MinIO 部署关联的值。使用唯一值以确保部署指标与该 Prometheus 服务收集的任何其他指标隔离。
  • 如果 MINIO_PROMETHEUS_AUTH_TYPE 设置为 "public",则可以省略 bearer_token 字段。
  • 对于不使用 TLS 的 MinIO 部署,请将 scheme 设置为 http。
  • 使用解析到 MinIO 部署的主机名设置 targets 数组。这可以是任何单个节点,或处理到 MinIO 节点连接的负载均衡器/代理。对于与 MinIO 租户位于同一集群中的 Prometheus 部署,您可以为 minio 服务指定服务 DNS 名称。对于集群外部的 Prometheus 部署,必须指定一个配置为路由 MinIO 租户之间连接的入口或负载均衡器端点。

1.3 使用更新的配置重新启动 Prometheus

1.3.1 将上一步生成的所需 scrape_configs 作业附加到配置文件中

  • 我这里提供一个聚合好的配置文件:
global:
  scrape_interval: 25s

scrape_configs:
  - job_name: 'srebro-prod-minio'
    scrape_interval: 60s  # 每 60秒采集一次
    bearer_token: xxxxxx
    metrics_path: /minio/v2/metrics/cluster
    scheme: http
    static_configs:
    - targets: ['127.0.0.1:9000']
      labels:
        tsingyun_project_name: "srebro-prod"
        nodename: "运维小弟-生产-minio-单节点-192.168.3.110"
        type: "minio-job"

  - job_name: 'srebro-prod-minio-node'
    scrape_interval: 60s  # 每 60秒采集一次
        bearer_token: xxxxxx
    metrics_path: /minio/v2/metrics/node
    scheme: http
    static_configs:
    - targets: ['127.0.0.1:9000']
      labels:
        tsingyun_project_name: "srebro-prod"
        nodename: "运维小弟-生产-minio-单节点-192.168.3.110"
        type: "minio-node"

  - job_name: 'srebro-prod-minio-bucket'
    scrape_interval: 60s  # 每 60秒采集一次
        bearer_token: xxxxxx
    metrics_path: /minio/v2/metrics/bucket
    scheme: http
    static_configs:
    - targets: ['127.0.0.1:9000']
      labels:
        tsingyun_project_name: "srebro-prod"
        nodename: "运维小弟-生产-minio-单节点-192.168.3.110"
        type: "minio-bucket"

  - job_name: 'srebro-prod-minio-resource'
    scrape_interval: 60s  # 每 60秒采集一次
        bearer_token: xxxxxx
    metrics_path: /minio/v2/metrics/resource
    scheme: http
    static_configs:
    - targets: ['127.0.0.1:9000']
      labels:
        tsingyun_project_name: "srebro-prod"
        nodename: "运维小弟-生产-minio-单节点-192.168.3.110"
        type: "minio-resource"

1.3.2 检查配置文件是否正确

./promtool check config prometheus.yml

Checking prometheus.yml
 SUCCESS: prometheus.yml is valid prometheus config file syntax

1.3.3 重新加载 prometheus 服务

curl -X POST http://127.0.0.1:9090/-/reload

1.3.4 观察 prometheus 中的 Targets 情况

image-20251216162227204

1.3.5 查看收集的指标

  • 以下查询示例返回 Prometheus 每五分钟为名为 srebro-prod-minio-node 的抓取作业收集的指标
minio_node_drive_free_bytes{job="srebro-prod-minio-node"}[5m]
minio_node_drive_free_inodes{job="srebro-prod-minio-node"}[5m]

minio_node_drive_latency_us{job="srebro-prod-minio-node"}[5m]

minio_node_drive_offline_total{job="srebro-prod-minio-node"}[5m]
minio_node_drive_online_total{job="srebro-prod-minio-node"}[5m]

minio_node_drive_total{job="srebro-prod-minio-node"}[5m]

minio_node_drive_total_bytes{job="srebro-prod-minio-node"}[5m]
minio_node_drive_used_bytes{job="srebro-prod-minio-node"}[5m]

minio_node_drive_errors_timeout{job="srebro-prod-minio-node"}[5m]
minio_node_drive_errors_availability{job="srebro-prod-minio-node"}[5m]

minio_node_drive_io_waiting{job="srebro-prod-minio-node"}[5m]

1.3.6 MinIO 推荐的指标作为基本监控集。

指标描述
minio_node_drive_free_bytes驱动器上可用的总存储空间。
minio_node_drive_free_inodes空闲 inode 总数。
minio_node_drive_latency_us驱动器 API 存储操作的平均最近一分钟延迟(以微秒为单位)。
minio_node_drive_offline_total此节点中脱机的驱动器总数。
minio_node_drive_online_total此节点中联机的驱动器总数。
minio_node_drive_total此节点中的驱动器总数。
minio_node_drive_total_bytes驱动器上的总存储空间。
minio_node_drive_used_bytes驱动器上使用的总存储空间。
minio_node_drive_errors_timeout自服务器启动以来驱动器超时错误的总数。
minio_node_drive_errors_availability自服务器启动以来驱动器 I/O 错误、权限被拒绝和超时的总数。
minio_node_drive_io_waiting等待驱动器 I/O 操作的总数。

1.4 使用 MinIO 指标配置警报规则

  • 检测过去5分钟内是否存在离线状态的MinIO节点,若存在则触发告警
avg_over_time(minio_cluster_nodes_offline_total{job="srebro-prod-minio-node"}[5m]) > 0
  • 检测过去5分钟内MinIO集群中存在离线磁盘,若存在则触发告警
avg_over_time(minio_cluster_drive_offline_total{job="srebro-prod-minio-node"}[5m]) > 0

1.5 MinIO 健康检查 API

  • MinIO 公开了未经身份验证的端点,用于探测节点正常运行时间和集群高可用性,以进行简单的健康检查。这些端点返回一个 HTTP 状态代码,指示基础资源是否健康或是否满足读取/写入仲裁。MinIO 不会通过这些端点公开任何其他数据。
  • 仅靠健康检查探测无法确定 MinIO 服务器是否脱机,只能确定当前主机是否可以访问服务器。可搭配👆上面提到的 minio_cluster_nodes_offline_total 指标配置 Prometheus 警报,以检测一个或多个 MinIO 节点是否脱机。

1.5.1 节点存活性

使用以下端点测试 MinIO 服务器是否在线

curl -I https://minio.example.net:9000/minio/health/live

https://minio.example.net:9000 替换为要检查的 MinIO 服务器的 DNS 主机名。响应代码 200 OK 表示 MinIO 服务器在线且功能正常。任何其他 HTTP 代码都表示在访问服务器时出现问题,例如瞬态网络问题或潜在的停机时间。

1.5.2 使用 Node Exporter textfile 自定义指标收集器

  • 前提: 需要先部署好 node-exporter 监控组件。
  • 通过获取这个接口的状态,将自定义的指标数据 写入文本文件。
  • 定义脚本,获取每次接口的健康状态。
[root@localhost logs]# cat /home/application/prometheus/minio-health-check.sh
ENDPOINT="http://192.168.3.110:9000/minio/health/live"
STATUS_FILE="/home/application/prometheus/textfile_collector/minio_health.prom"

# 检查健康状态
if curl -f -s -o /dev/null --max-time 5 "$ENDPOINT"; then
    echo "minio_health_check{endpoint=\"$ENDPOINT\"} 1" > "$STATUS_FILE"
else
    echo "minio_health_check{endpoint=\"$ENDPOINT\"} 0" > "$STATUS_FILE"
fi
  • 提前创建好minio_health.prom 文件。
touch /home/application/prometheus/textfile_collector/minio_health.prom
  • 配置定时任务; 每 30秒执行一次。
crontab -e

#minio-health-check
* * * * * /home/application/prometheus/minio-health-check.sh
* * * * * sleep 30; /home/application/prometheus/minio-health-check.sh
  • 查看minio_health.prom 文件文件数据
minio_health_check{endpoint="http://192.168.3.110:9000/minio/health/live"} 1
  • 配置 node-exporter 采集器,指定 textfile 目录
[root@localhost logs]# cat  /etc/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/home/application/node_exporter/node_exporter --collector.systemd --collector.textfile --collector.textfile.directory=/home/application/prometheus/textfile_collector
Restart=on-failure

[Install]
WantedBy=multi-user.target
  • 重新加载,并重启
systemctl daemon-reload
systemctl restart node_exporter
  • 配置 Prometheus 抓取数据 (新增 textfile 收集器)
scrape_configs:
  - job_name: 'srebro-prod-linux'
    params:
      collect[]:
        - textfile  #新增 textfile 收集器
        - cpu
        - meminfo
        - diskstats
        - netdev
        - netstat
        - filefd
        - filesystem
        - xfs
        - systemd
        - uname
        - time
        - os
        - stat
        - loadavg
        - sockstat
        - netclass
  • 重载 prometheus 服务
curl -X POST http://127.0.0.1:9090/-/reload
  • 查看收集的指标
minio_health_check

image-20251216220554064

  • 配置告警规则,检测过去5分钟内是否存在健康检查失败的状态,若存在则触发告警
avg_over_time(minio_health_check[5m]) == 0

二、使用 Grafana 绘制 MinIO 监控大屏

2.1 先决条件:

  • 现有的 Prometheus 部署,并支持 警报管理器
  • 现有的 MinIO 部署,可以与 Prometheus 部署建立网络连接
  • 已安装的 Grafana

2.2 Grafana 模板

MinIO 提供了多个官方 Grafana 仪表板,可以从 Grafana 仪表板门户网站下载。

直接导入模板 id,json 文件;然后微调变量即可。

  • MinIO 服务器指标仪表板,模板 id:13502

  • MinIO 存储桶指标仪表板,模板 id:19237

  • MinIO 节点指标仪表板,json 文件https://raw.githubusercontent.com/minio/minio/master/docs/metrics/prometheus/grafana/node/minio-node.json

三、参考

Last Modified: January 2, 2026
Archives Tip
QR Code for this page
Tipping QR Code