首页
/ MinIO 监控可视化实践:基于官方 Grafana 仪表盘体系搭建 MinIO 可观测性面板

MinIO 监控可视化实践:基于官方 Grafana 仪表盘体系搭建 MinIO 可观测性面板

2026-09-04 17:52:37作者:冯梦姬Eddie

本文围绕 MinIO 仓库中 Grafana 监控文档 展开,讲解如何在已接入 Prometheus 的 MinIO 部署之上,导入并定制 MinIO 官方提供的 5 套 Grafana 仪表盘(集群、桶级、节点级、节点复制、集群复制),并结合仓库源码与仪表盘 JSON 中的真实 PromQL 查询,说明每套仪表盘背后依赖哪些指标、模板变量如何与 Prometheus 抓取任务对应,帮助读者快速搭建可复制、可扩展的 MinIO 监控大屏。

MinIO 官方 Grafana 集群仪表盘总览

一、前置条件:先让 Prometheus 采到 MinIO 指标

Grafana 本身不产生指标,它只是查询和可视化层。按照 Grafana 文档的 Prerequisites 部分,落地前需要完成两件事:

  1. MinIO 与 Prometheus 已按官方指南对接。MinIO 默认以受认证端点暴露 Prometheus 兼容数据,采集入口有四个(见 Prometheus 集成文档):

    • /minio/v2/metrics/cluster:集群级指标;
    • /minio/v2/metrics/bucket:桶级指标(带 bucket 标签);
    • /minio/v2/metrics/node:节点级指标;
    • /minio/v2/metrics/resource:节点资源指标(CPU、内存、磁盘、网卡等)。

    认证方式由环境变量 MINIO_PROMETHEUS_AUTH_TYPE 控制,默认 jwt(配合 mc admin prometheus generate 生成的 bearer token 抓取),也可设为 public 免认证抓取。这一行为可在源码中印证:metrics-router.goregisterMetricsRouter 注册了四个 v2 路由以及遗留的 /prometheus/metrics 路径,并根据 EnvPrometheusAuthType(第 41 行定义为 MINIO_PROMETHEUS_AUTH_TYPE)在第 56-61 行选择 AuthMiddlewareNoAuthMiddleware。同一文件第 36 行还注册了 /metrics/v3 端点,说明 v2 之外另有 v3 指标通道,本文与文档聚焦的仍是 v2 抓取路径。

  2. Grafana 已安装并可访问。导入前建议在 Grafana 的 Configuration → Data Sources 中确认 Prometheus 数据源可用。

一个容易踩的坑:Prometheus 抓取时会将 Host 头设置为 domain:port,部署在负载均衡器或反向代理(HAProxy、nginx 等)之后的 MinIO 需要确保这些请求能被正确路由,这一点在 Prometheus 集成文档 的启动章节中有明确提示。

二、官方仪表盘总览:5 个 JSON,5 个视角

MinIO 仓库在 docs/metrics/prometheus/grafana/ 目录下随源码提供了 5 个可直接导入的仪表盘 JSON 文件,官方说明也提到这些仪表盘在 Grafana 社区的仪表盘门户(编号 13502)上有对应版本。仓库内的 JSON 文件与文档中列出的对应关系如下:

仪表盘 JSON 文件 面板数 聚焦视角
MinIO Dashboard(主仪表盘) minio-dashboard.json 37 集群健康、容量、S3 API、KMS、扫描与修复
MinIO Bucket Dashboard minio-bucket.json 34 桶维度用量、请求、TTFB、桶级复制
MinIO Cluster Replication Dashboard minio-replication-cluster.json 22 站点复制的发送/接收/失败/代理请求
MinIO Node Replication Dashboard minio-replication-node.json 20 节点复制链路时延、工作进程、队列积压
MinIO Node Dashboard minio-node.json 8 单机磁盘容量、inode、延迟与 I/O 错误

导入方法

  1. 打开 Grafana 的 Dashboards → New → Import(或仪表盘管理界面的 Import);
  2. 将对应 JSON 文件内容粘贴或上传;
  3. 保存时注意仪表盘定义了模板变量,导入向导会要求选择数据源:
    • DS_PROMETHEUS:数据源变量,必须指向你的 Prometheus 数据源;
    • scrape_jobs:取值查询为 label_values(job),即自动枚举 Prometheus 中所有 job 标签值——这要求你在 prometheus.yml 里为 MinIO 抓取任务配置的 job_name 与你在 Grafana 变量下拉框中选择的值一致(如官方 Prometheus 文档示例中使用的 minio-job);
    • Node Dashboard 额外定义了 server 变量,取值查询为 label_values(minio_node_drive_total,server),用于在面板中按节点过滤。

MinIO 桶级仪表盘

三、主仪表盘(minio-dashboard.json):37 个面板的组成

主仪表盘是官方文档给出的第一套看板,从 JSON 中解析出的面板可分为五组,全部查询都通过 job=~"$scrape_jobs" 约束到所选抓取任务:

1. 集群容量与健康(stat / gauge / bargauge / piechart)

  • Uptimetime() - max(minio_node_process_starttime_seconds{job=~"$scrape_jobs"}),用当前时间减去进程启动时间戳;
  • Capacity(饼图):分别取 minio_cluster_capacity_usable_total_bytesminio_cluster_capacity_usable_free_bytes,展示可用容量与已用容量;
  • Cluster Health Status:直接读 minio_cluster_health_status
  • Health Breakdown:用 minio_cluster_health_erasure_set_online_drives / read_quorum / write_quorum / healing_drives / status 五个指标,逐纠删集展示在线盘、读写法定盘与修复中盘数——这是分布式 MinIO 最核心的健康信号;
  • Total Online ServersTotal Online/Offline DrivesNumber of BucketsNumber of Objects:分别对应 minio_cluster_nodes_online_totalminio_cluster_drive_online/offline_totalminio_cluster_bucket_totalminio_cluster_usage_object_total

2. S3 API 流量与错误率(timeseries)

  • S3 API Ingress/Egress Ratesum by (server) (rate(minio_s3_traffic_received_bytes{...}[$__rate_interval]))(发送方向同理),使用 $__rate_interval 自适应速率窗口,避免抓取间隔不整除导致的锯齿;
  • S3 API Request Rate / Error Rate (4xx) / (5xx):对 minio_s3_requests_totalminio_s3_requests_4xx_errors_totalminio_s3_requests_5xx_errors_totalincrease(...[$__rate_interval])sum by (server,api),可按 API 维度定位是哪类操作在报错;
  • Data Usage Growthmax(minio_cluster_usage_total_bytes{...})

3. 进程与系统资源

  • Open FDsminio_node_file_descriptor_open_total)、Goroutinesminio_node_go_routine_total)、Memory Usageminio_node_process_resident_memory_bytes)、CPU Usagerate(minio_node_process_cpu_total_seconds{...}));
  • Read, Write I/OSyscalls:基于 minio_node_io_rchar/wchar_bytesminio_node_syscall_read/write_total 的速率曲线。

4. 数据后台作业(scanner / heal)

  • Scanned Objects / Versions / Directoriesminio_node_scanner_* 系列速率曲线;
  • Time Since Last Healmax(minio_heal_time_last_activity_nano_seconds{...})
  • Time Since Last Scanmax(minio_usage_last_activity_nano_seconds{...})

5. KMS 状态

  • KMS Online(1)/Offline(0)KMS UptimeKMS Request 4xx/5xx Error RateKMS Request Success Rate,对应 minio_cluster_kms_online / uptime / request_error / request_failure / request_success

上述每个指标名的官方释义,可在 指标清单文档 的 Cluster Metrics 章节逐条对照;集群级指标从任一 MinIO 节点抓取一次即可代表整个集群。

四、桶级仪表盘(minio-bucket.json):把指标下钻到单个 Bucket

桶级仪表盘所有面板都按 bucket 标签聚合,典型查询包括:

  • 用量与分布minio_bucket_objects_size_distribution(对象大小分布)、minio_bucket_objects_version_distribution(版本数分布)、minio_bucket_usage_object_total / version_total / deletemarker_total
  • 请求与性能sum by (bucket,api) (increase(minio_bucket_requests_total{...}[$__rate_interval]))(总请求速率)、4xx 错误率、minio_bucket_requests_inflight_total(在途请求)、sum by (bucket,le,api) (minio_bucket_requests_ttfb_seconds_distribution{...})(按 API 与延迟分桶的 TTFB 直方图);
  • 流量sum by (bucket) (rate(minio_bucket_traffic_sent_bytes{...}[$__rate_interval])) 与接收方向同理;
  • 桶级复制:对配置了 Bucket Replication 或 Batch Replication 的部署,minio_bucket_replication_sent/received/total_failed_byteslast_minute/last_hour_failed_countminio_bucket_replication_latency_ms 以及一组 minio_bucket_replication_proxied_*_requests_total(GET/HEAD/tagging 代理请求与其失败数)都有独立面板。注意 指标清单 中的说明:站点复制(Site Replication)场景下,对应指标会落到集群端点,桶端点主要承载 Bucket/Batch 复制的指标。

MinIO 集群复制仪表盘

一个来自源码的实用提示:metrics-v2.go 定义了 v2MetricsMaxBuckets = 100,注释说明 v2 桶级调用对桶数量有上限,超过时官方建议迁移到 v3 指标通道。桶数很多的部署在看桶级指标时应留意这一限制。

五、复制监控双仪表盘:站点级与节点级

复制链路是 MinIO 多站点部署的重点观测对象,官方提供了两套互补的仪表盘:

集群复制(Cluster Replication),数据来自 /minio/v2/metrics/cluster 端点,22 个面板覆盖:

  • Received/Sent Data/Objectsminio_cluster_replication_received_bytes / received_count / sent_bytes / sent_count
  • 失败趋势:minio_cluster_replication_last_hour_failed_bytes/countlast_minute_failed_bytes/counttotal_failed_bytes/count
  • 代理请求与失败:minio_cluster_replication_proxied_get/head_requests_total 及 GET/tagging 系列代理请求的 _failures 计数器。

节点复制(Node Replication),数据来自 /minio/v2/metrics/node 端点(需要按节点逐一抓取),20 个面板覆盖链路健康与吞吐:

  • 链路状态:minio_node_replication_link_online(1/0 曲线)、minio_node_replication_link_offline_duration_secondsminio_node_replication_link_downtime_duration_seconds
  • 时延:minio_node_replication_current/average/max_link_latency_ms
  • 吞吐:minio_node_replication_current/average/max_transfer_rate
  • 工作进程与队列:minio_node_replication_current/average/max_active_workerslast_minute_queued_count/bytesmax_queued_*,以及 minio_node_replication_recent_backlog_count(近 5 分钟积压)。

这两组指标的完整释义见 list.md 的 Cluster Replication Metrics 与 Node Replication Metrics 两个表格。

六、节点仪表盘(minio-node.json):单机磁盘体检

节点仪表盘是 5 套中最小的一套(8 个面板),通过 server 模板变量(label_values(minio_node_drive_total,server))定位单台节点,全部查询形如 max(minio_node_drive_total{job=~"$scrape_jobs",server="$server"})

  • Total Drives / Total Online/Offline Drivesminio_node_drive_totalminio_node_drive_online_totalminio_node_drive_offline_total
  • Drive Usageminio_node_drive_total_bytes / used_bytes / free_bytes 三线叠加;
  • Free Inodesminio_node_drive_free_inodes
  • Drive Latency (micro sec)minio_node_drive_latency_us(上一分钟存储操作的平均延迟);
  • Drive Errors / Drive Timeout Errorsminio_node_drive_errors_availabilityminio_node_drive_errors_timeout
  • IO Operations Waitingminio_node_drive_io_waiting

这套面板的价值在于把"集群在线盘数下降"这类宏观告警下钻到"哪台机器的哪块盘在超时"。

七、从示例到生产:定制仪表盘与配套告警

Grafana 文档在结尾给出一条重要提示:仓库提供的仪表盘均以示例(example)身份给出,应当在它们的基础上按自身场景定制并持续添加新面板。落地时建议遵循以下路径:

  1. 保持模板变量约定:新增面板的查询沿用 job=~"$scrape_jobs"(Node Dashboard 再加 server="$server"),让面板自动适配不同环境的抓取任务命名;速率类查询统一使用 rate/increase(...[$__rate_interval]) 写法;
  2. 从指标清单选列:需要新面板时,先到 list.md 中查找指标定义(Cluster、Bucket、Node、Resource 四大类共上百个指标),确认语义后再写 PromQL,避免误读 _total 计数器与 gauge 的区别;
  3. 配置告警闭环:可视化之外,仓库还提供了 AlertManager 告警配置文档,可基于同样的 v2 指标配置 Prometheus 告警规则,与 Grafana 面板形成"看得到 + 叫得醒"的完整监控体系;
  4. 留意端点差异:集群/桶指标从任一节点抓一次即可(负载均衡场景用 LB 域名),而节点与资源指标需要把所有服务器都列入 static_configs.targets,否则 Grafana 中按节点过滤的变量(如 server)只会列出被抓到的那部分节点。

小结

本文以 Grafana 监控文档 为主线,覆盖了三部分信息:一是前置的 Prometheus 对接要求(四个 v2 端点、jwt/public 两种认证模式,源码依据见 cmd/metrics-router.go);二是仓库随源码发布的 5 套仪表盘 JSON(共 121 个面板)的导入方式、模板变量机制与各面板真实 PromQL;三是以 v2 桶级指标 100 桶上限(cmd/metrics-v2.go)、Node Dashboard 的 server 变量、按节点抓取 node/resource 端点等源码与配置细节,说明这些仪表盘在生产环境中如何定制与扩展。照此搭建,你可以在一个 Grafana 实例内同时观测 MinIO 的集群健康、S3 API 性能、桶级用量与复制链路状态,并以官方指标清单为词典持续扩充自己的监控面。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
903
1.82 K
docsdocs
暂无描述
Markdown
888
5.78 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.51 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384
flutter_flutterflutter_flutter
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.17 K
341