MinIO Prometheus 监控实战指南:四个指标端点、JWT 认证配置与 Grafana 可视化全解
2026/9/5 19:16:16 网站建设 项目流程

MinIO Prometheus 监控实战指南:四个指标端点、JWT 认证配置与 Grafana 可视化全解

【免费下载链接】minioMinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.项目地址: https://gitcode.com/GitHub_Trending/mi/minio

本篇围绕 MinIO 官方文档《How to monitor MinIO server with Prometheus》展开,讲清 MinIO 如何以 Prometheus 兼容格式对外暴露指标、如何通过MINIO_PROMETHEUS_AUTH_TYPE控制端点认证方式,以及如何完成从生成scrape_configs、启动 Prometheus 到 Grafana 可视化与 AlertManager 告警的完整落地流程。读完本文,你将能够独立为 MinIO(单机或分布式部署)搭建可运维的监控体系,并理解各指标端点背后的源码实现。

1. MinIO 暴露的 Prometheus 指标端点总览

Prometheus 是一个云原生监控平台,采用多维数据模型:时间序列数据由“指标名 + key/value 标签对”唯一标识,采集通过 HTTP/HTTPS 上的拉取(pull)模型完成。MinIO 服务端默认即以 Prometheus 兼容格式暴露数据,监控方只需将 Prometheus 指向相应端点抓取即可。

MinIO 提供 4 个按不同维度划分的 v2 指标端点,完整清单见 监控总览文档:

端点维度特点
/minio/v2/metrics/cluster集群级从任意单个节点即可读取整个集群的指标。这意味着经过负载均衡器暴露的 MinIO 实例,无需知晓各节点地址即可完成全集群指标采集
/minio/v2/metrics/bucket桶级(bucket centric)按桶维度聚合的指标
/minio/v2/metrics/node节点级(node centric)额外包含 Go runtime 指标与进程指标,需逐节点抓取
/minio/v2/metrics/resource资源级(resource centric)面向底层资源(磁盘、网络等)的指标

上述路径在源码中集中定义于 cmd/metrics-router.go:

const ( prometheusMetricsPathLegacy = "/prometheus/metrics" prometheusMetricsV2ClusterPath = "/v2/metrics/cluster" prometheusMetricsV2BucketPath = "/v2/metrics/bucket" prometheusMetricsV2NodePath = "/v2/metrics/node" prometheusMetricsV2ResourcePath = "/v2/metrics/resource" // Metrics v3 endpoints metricsV3Path = "/metrics/v3" )

两点需要注意:

  • 旧的/minio/prometheus/metrics端点已废弃(deprecated),官方文档明确要求使用上述 v2 端点;
  • 从源码结构看,路由中还注册了新的/metrics/v3端点,由newMetricsV3Server处理并支持?list查询参数,属于 v2 之外的另一套指标接口,本文聚焦 v2 端点的 Prometheus 抓取场景。

各端点 Handler 的注册逻辑同样位于 cmd/metrics-router.go:

func registerMetricsRouter(router *mux.Router) { // metrics router metricsRouter := router.NewRoute().PathPrefix(minioReservedBucketPath).Subrouter() authType := prometheusAuthType(strings.ToLower(env.Get(EnvPrometheusAuthType, string(prometheusJWT)))) auth := AuthMiddleware if authType == prometheusPublic { auth = NoAuthMiddleware } metricsRouter.Handle(prometheusMetricsPathLegacy, auth(metricsHandler())) metricsRouter.Handle(prometheusMetricsV2ClusterPath, auth(metricsServerHandler())) metricsRouter.Handle(prometheusMetricsV2BucketPath, auth(metricsBucketHandler())) metricsRouter.Handle(prometheusMetricsV2NodePath, auth(metricsNodeHandler())) metricsRouter.Handle(prometheusMetricsV2ResourcePath, auth(metricsResourceHandler())) // ... }

2. 准备 Prometheus

  1. 下载 Prometheus 对应平台的最新发行版并解压(下载渠道见 Prometheus 官方站点):
tar xvfz prometheus-*.tar.gz cd prometheus-*
  1. Prometheus 服务端是一个名为prometheus(Windows 下为prometheus.exe)的单二进制文件。运行并传入--help可查看全部可用参数:
./prometheus --help usage: prometheus [<flags>] The Prometheus monitoring server . . .

开始前提前需已按 MinIO 官方快速入门文档部署好 MinIO 实例。

3. 配置 MinIO 指标端点的认证模式

MinIO 对 Prometheus 端点支持两种认证模式,由环境变量MINIO_PROMETHEUS_AUTH_TYPE控制,取值jwt(默认)或public。从 cmd/metrics-router.go 可以确认这一实现事实:

// Standard env prometheus auth type const ( EnvPrometheusAuthType = "MINIO_PROMETHEUS_AUTH_TYPE" EnvPrometheusOpenMetrics = "MINIO_PROMETHEUS_OPEN_METRICS" ) type prometheusAuthType string const ( prometheusJWT prometheusAuthType = "jwt" prometheusPublic prometheusAuthType = "public" )

即路由注册时读取该环境变量并转小写,默认为jwt;仅当显式设为public时,端点才切换为NoAuthMiddleware(免认证)。源码中还定义了MINIO_PROMETHEUS_OPEN_METRICS环境变量,从命名可推断其用于控制指标输出是否采用 OpenMetrics 格式。

允许免认证抓取(适用于内部可信网络):

export MINIO_PROMETHEUS_AUTH_TYPE="public" minio server ~/test

默认 JWT 模式下,Prometheus 抓取请求必须携带凭证。Prometheus 支持 bearer token 认证抓取请求,MinIO 官方推荐用mc直接生成配置(见下节),无需手工管理 token。

4. 编写 Prometheus 抓取配置

4.1 认证模式:用 mc 生成 scrape_configs

如果已将 MinIO 配置为免认证暴露指标,可跳过本节直接使用 4.2 的公开配置。

对别名执行如下命令即可生成对应的scrape_configs片段,METRIC-TYPE的合法取值为clusternodebucketresource,缺省为cluster

mc admin prometheus generate <alias> [METRIC-TYPE]

命令为每个类型生成如下四种配置(bearer_token为 mc 生成的密钥):

集群级(Cluster)

scrape_configs: - job_name: minio-job bearer_token: <secret> metrics_path: /minio/v2/metrics/cluster scheme: http static_configs: - targets: ['localhost:9000']

桶级(Bucket centric)

- job_name: minio-job-bucket bearer_token: <secret> metrics_path: /minio/v2/metrics/bucket scheme: http static_configs: - targets: ['localhost:9000']

节点级(Node centric,可选)

- job_name: minio-job-node bearer_token: <secret> metrics_path: /minio/v2/metrics/node scheme: http static_configs: - targets: ['localhost:9000']

资源级(Resource centric,可选)

- job_name: minio-job-resource bearer_token: <secret> metrics_path: /minio/v2/metrics/resource scheme: http static_configs: - targets: ['localhost:9000']

4.2 公开模式:免认证抓取配置

当认证类型设为public时,无需bearer_token。集群级与桶级指标各只需在任一节点抓取一次即可采集全量:

集群级

scrape_configs: - job_name: minio-job metrics_path: /minio/v2/metrics/cluster scheme: http static_configs: - targets: ['localhost:9000']

桶级

scrape_configs: - job_name: minio-job-bucket metrics_path: /minio/v2/metrics/bucket scheme: http static_configs: - targets: ['localhost:9000']

节点级(可选)——节点指标必须逐服务器实例采集,因此targets需要列出所有节点,这样 Grafana 等可视化系统才能按节点区分展示:

scrape_configs: - job_name: minio-job metrics_path: /minio/v2/metrics/node scheme: http static_configs: - targets: ['server1:9000','server2:9000','server3:9000','server4:9000']

资源级(可选)

scrape_configs: - job_name: minio-job metrics_path: /minio/v2/metrics/resource scheme: http static_configs: - targets: ['localhost:9000']

4.3 各端点 Handler 的底层实现

理解各端点“抓回来什么”有助于选择监控策略,源码中的 Handler 差异十分直观:

  • 节点级:cmd/metrics-v2.go 中metricsNodeHandler注册了nodeCollector,并额外挂入prometheus.NewProcessCollector(带minioNamespace前缀的进程指标)与prometheus.NewGoCollector(Go runtime 指标),这与文档中“node 端点额外包含 go metrics 或 process metrics”的描述完全一致;
  • 集群级metricsServerHandler(cmd/metrics-v2.go)将clusterCollector注册进独立 registry 后聚合输出,因此任一节点返回的都是集群视角数据;
  • 桶级/资源级:分别由metricsBucketHandler(cmd/metrics-v2.go)与 cmd/metrics-resource.go 中的metricsResourceHandler提供。

所有 Handler 最终都通过expfmt.NewEncoder按客户端协商的Content-Type输出 Prometheus 文本格式。

5. 启动 Prometheus 并验证抓取

  1. 将生成的scrape_configs片段复制进prometheus.yml并保存;
  2. 启动(或重启)Prometheus:
./prometheus --config.file=prometheus.yml

其中prometheus.yml为配置文件名。启动后在 Prometheus 控制台(默认http://localhost:9090)即可看到 MinIO 指标与抓取目标状态。

负载均衡 / 反向代理部署注意:Prometheus 对 MinIO 指标端点的 HTTP 请求会把Host头设置为domain:port。若 MinIO 部署在负载均衡器、反向代理或其他控制平面(HAProxy、nginx、pfsense、opnsense 等)之后,需确保这些网络设备能够将此类请求正确路由到 MinIO 部署,否则抓取会失败。

6. 用 Grafana 可视化 MinIO 指标

Prometheus 配置完成后,推荐使用 Grafana 进行可视化。MinIO 仓库内置了官方 Grafana 面板 JSON 文件,位于 docs/metrics/prometheus/grafana/,可直接导入:

面板JSON 文件说明
集群总览minio-dashboard.json官方主监控面板
节点级minio-node.json配合 node 端点抓取,按节点展示
桶级minio-bucket.json配合 bucket 端点抓取
复制集群级minio-replication-cluster.json跨站点复制集群视角
复制节点级minio-replication-node.json跨站点复制节点视角

官方文档同时提醒:这些面板均为示例基线,实际使用中应在此基础上定制并补充新的图表。主面板效果如文首所示。

7. 配置 Prometheus AlertManager 告警

完整的告警配置流程见仓库内 alerts.md,要点如下:

  1. 部署 AlertManager:编写路由配置(分组、去重、抑制规则),例如使用 webhook 接收器http://127.0.0.1:8010/webhook,AlertManager 默认监听9093端口;
  2. 让 Prometheus 对接 AlertManager:在prometheus.yml中追加:
alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'] rule_files: - rules.yml
  1. 添加 MinIO 告警规则rules.yml示例——纠删集失去法定人数):
groups: - name: example rules: - alert: MinIOClusterTolerance expr: minio_cluster_health_erasure_set_status < 1 for: 5m labels: severity: critical annotations: summary: "Instance {{ $labels.server }} has lost quorum on pool {{ $labels.pool }} on set {{ $labels.set }}" description: "MinIO instance {{ $labels.server }} of job {{ $labels.job }} has lost quorum on pool {{ $labels.pool }} on set {{ $labels.set }} for more than 5 minutes."
  1. 验证方式:启动 4 节点分布式 MinIO + Prometheus + AlertManager,停掉若干节点使纠删集容错度降为 -1,用mc admin prometheus metrics ALIAS | grep minio_cluster_health_erasure_set_status确认指标变化,等待 5 分钟后(规则for: 5m)即可在 webhook 与 Prometheus 控制台看到 firing 的告警:

8. 指标清单与延伸阅读

  • 集群级与桶级暴露的完整指标列表(含每项指标定义)见 docs/metrics/prometheus/list.md,该文档按/minio/v2/metrics/cluster/minio/v2/metrics/bucket/minio/v2/metrics/resource端点分段列出;
  • 除 Prometheus 外,MinIO 还提供免认证的 liveness 探针/minio/health/live与集群探针/minio/health/cluster,可用于 Kubernetes 等编排场景的健康探测,详见 docs/metrics/healthcheck/README.md;
  • 在 Kubernetes 环境使用 Prometheus Operator 时,MinIO 官方 Helm Chart 的 ServiceMonitor 模板已默认配置/minio/v2/metrics/node/minio/v2/metrics/cluster两条抓取路径,见 helm/minio/templates/servicemonitor.yaml。

小结

  • MinIO 默认以 JWT 认证暴露 4 个 Prometheus v2 指标端点(cluster / bucket / node / resource),集群级端点支持从任意单节点拉取全集群数据,是负载均衡部署下的首选;
  • 免认证模式只需设置MINIO_PROMETHEUS_AUTH_TYPE="public";认证模式推荐用mc admin prometheus generate <alias> [METRIC-TYPE]自动生成带bearer_tokenscrape_configs
  • 节点级指标需在targets中列出全部服务器实例,才能支撑 Grafana 的按节点可视化;
  • 仓库内配套的 Grafana 面板 JSON、AlertManager 告警示例与指标清单文档,构成了从采集、可视化到告警的完整监控闭环。

【免费下载链接】minioMinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.项目地址: https://gitcode.com/GitHub_Trending/mi/minio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询