ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/5 19:16:31 拓冰建站 浏览量
MinIO Prometheus 监控实战指南:四个指标端点、JWT 认证配置与 Grafana 可视化全解 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.goconst ( 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.gofunc 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下载 Prometheus 对应平台的最新发行版并解压下载渠道见 Prometheus 官方站点tar xvfz prometheus-*.tar.gz cd prometheus-*Prometheus 服务端是一个名为prometheusWindows 下为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_TYPEpublic 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的合法取值为cluster、node、bucket、resource缺省为clustermc admin prometheus generate alias [METRIC-TYPE]命令为每个类型生成如下四种配置bearer_token为 mc 生成的密钥集群级Clusterscrape_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.NewGoCollectorGo runtime 指标这与文档中“node 端点额外包含 go metrics 或 process metrics”的描述完全一致集群级metricsServerHandlercmd/metrics-v2.go将clusterCollector注册进独立 registry 后聚合输出因此任一节点返回的都是集群视角数据桶级/资源级分别由metricsBucketHandlercmd/metrics-v2.go与 cmd/metrics-resource.go 中的metricsResourceHandler提供。所有 Handler 最终都通过expfmt.NewEncoder按客户端协商的Content-Type输出 Prometheus 文本格式。5. 启动 Prometheus 并验证抓取将生成的scrape_configs片段复制进prometheus.yml并保存启动或重启Prometheus./prometheus --config.fileprometheus.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要点如下部署 AlertManager编写路由配置分组、去重、抑制规则例如使用 webhook 接收器http://127.0.0.1:8010/webhookAlertManager 默认监听9093端口让 Prometheus 对接 AlertManager在prometheus.yml中追加alerting: alertmanagers: - static_configs: - targets: [localhost:9093] rule_files: - rules.yml添加 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.验证方式启动 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_TYPEpublic认证模式推荐用mc admin prometheus generate alias [METRIC-TYPE]自动生成带bearer_token的scrape_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),仅供参考