跳转到主要内容

使用 Prometheus 进行监控与告警

SILO 20261026 / Console 2.5.1: Console 的 Metrics 页面使用 Metrics V3 指标,按节点聚合并明确区分“真实零值”与“缺失数据”。Overview 页面展示的是 Server 上报的裸盘总容量(而非扣除纠删码开销后的可用容量估算);存储桶列表为实时读取,对象数量与空间占用则由后台扫描器统计,查看时请留意扫描时间。详见Console 发布说明与指标映射文档。

MinIO 使用 Prometheus 数据模型 发布集群、节点、存储桶和资源指标。 本页过程说明了以下内容:

  • 配置 Prometheus 服务,抓取并展示 MinIO 部署的指标
  • 基于某个 MinIO 指标配置 Alert Rule,以触发 AlertManager 动作

20261026 推荐的 Metrics V3 抓取

新部署以及 Console 2.5 的 Metrics 页面建议抓取 V3 指标。使用 mcli 20261026 显式指定 API 版本即可生成配置:

mcli admin prometheus generate mysilo --api-version v3

生成的配置抓取 /minio/metrics/v3 路径并包含所需的 bearer token。将其合并到 Prometheus 配置中,把 targets 设为待监控的各个 SILO 节点,妥善保管 token,并在确认抓取正常后再启用告警规则。你可以按 cluster、system 等类别限制采集子集,但 Console 的完整监控面板依赖对应的指标族,详见命令参考。

  • 集群级指标去重: 同一集群的 cluster 指标会由多个节点重复导出,查询时应保留集群标识标签并用 max 或 min 聚合去重,切勿直接跨节点 sum 求和。
  • 零值与缺失数据: 部分合法零值默认不导出样本。仅在同生命周期的伴随指标存在时才应补零;抓取失败或后台扫描器尚未产出用量数据时,应保持为“无数据”(no-data)。
  • 标签与单位差异: V3 API 指标使用 name 标签,节点指标带 server 标签,磁盘指标带 pool/set/drive 索引,耗时统一以秒为单位。从 V2 迁移仪表盘时需同步调整 PromQL 查询与告警阈值。

下文保留 V2 指标 的抓取与告警配置步骤,供既有仪表盘参考(省略 --api-version 时仍默认生成 V2 配置)。

说明

前提条件

此过程要求满足以下条件:

配置 Prometheus 收集 MinIO 指标并触发告警

1) 生成抓取配置

使用 mc admin prometheus generate 命令生成 Prometheus 执行抓取请求所需的 scrape 配置:

以下命令用于抓取 MinIO 集群的指标。

mc admin prometheus generate ALIAS

将 ALIAS 替换为该 MinIO 部署的 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]

以下命令用于抓取 MinIO Server 上某个节点的指标。

mc admin prometheus generate ALIAS node

将 ALIAS 替换为该 MinIO 部署的 alias。

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]

以下命令用于抓取 MinIO Server 上存储桶的指标。

mc admin prometheus generate ALIAS bucket

将 ALIAS 替换为该 MinIO 部署的 alias。

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]
说明

新增: RELEASE.2023-10-07T15-07-38Z

以下命令用于抓取 MinIO Server 上资源的指标。

mc admin prometheus generate ALIAS resource

将 ALIAS 替换为该 MinIO 部署的 alias。

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]
  • 设置合适的 scrape_interval,确保每次抓取操作都能在下一次开始前完成。 推荐值为 60 秒。

    某些部署由于需要抓取的指标数量较多,可能需要更长的抓取间隔。 为降低 MinIO 和 Prometheus Server 的负载,请选择满足监控要求的最长间隔。

  • 将 job_name 设置为与该 MinIO 部署相关的值。

    请使用唯一值,以确保该部署的指标与同一 Prometheus 服务采集的其他指标彼此隔离。

  • 对于以 MINIO_PROMETHEUS_AUTH_TYPE 设置为 "public" 启动的 MinIO 部署,可以省略 bearer_token 字段。

  • 对于未使用 TLS 的 MinIO 部署,请将 scheme 设置为 http。

  • 在 targets 数组中设置能够解析到 MinIO 部署的主机名。

    这可以是任意单个节点,也可以是负责处理与 MinIO 节点连接的负载均衡器或代理。

    对于 Kubernetes 基础设施上的 MinIO Tenant,如果使用的是同一集群中的 Prometheus 集群,则可以指定 minio service 的 DNS 名称。 否则,你可以指定已配置为向 MinIO Tenant 路由连接的 ingress 或 load balancer 端点。

2) 使用更新后的配置重启 Prometheus

将上一步生成的目标 scrape_configs job 追加到配置文件中:

集群指标会聚合节点级指标,并在适用时为指标附加来源节点的标签。

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]

节点指标专用于节点级监控。该配置需要列出所有 MinIO 节点。

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]
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]
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]

使用该配置文件启动 Prometheus 集群:

prometheus --config.file=prometheus.yaml

3) 分析已采集指标

Prometheus 内置 expression browser。 你可以在其中执行查询,以分析已采集的指标。

以下查询示例会返回抓取任务名为 minio-job 的 Prometheus 每五分钟采集一次的指标:

minio_node_drive_free_bytes{job="minio-job"}[5m]
minio_node_drive_free_inodes{job="minio-job"}[5m]

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

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

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

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

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

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

MinIO 建议将以下指标作为基础监控项。

所有可用指标的信息请参见 指标与告警。

指标 说明
minio_node_drive_free_bytes 驱动器上的总可用存储空间。
minio_node_drive_free_inodes 总空闲 inode 数量。
minio_node_drive_latency_us 最近一分钟内驱动器 API 存储操作的平均延迟,单位为 µs。
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 自 server 启动以来驱动器超时错误的总数。
minio_node_drive_errors_availability 自 server 启动以来驱动器 I/O 错误、权限拒绝和超时的总数。
minio_node_drive_io_waiting 驱动器上等待中的 I/O 操作总数。

4) 使用 MinIO 指标配置告警规则

你必须在 Prometheus 部署上配置 Alert Rules,以根据已采集的 MinIO 指标触发告警。

以下示例告警规则文件为 MinIO 部署提供了一组基础告警。 你可以修改这些示例,或将其作为构建自定义告警的参考。

groups:
- name: minio-alerts
  rules:
  - alert: NodesOffline
    expr: avg_over_time(minio_cluster_nodes_offline_total{job="minio-job"}[5m]) > 0
    for: 10m
    labels:
      severity: warn
    annotations:
      summary: "Node down in MinIO deployment"
      description: "Node(s) in cluster {{ $labels.instance }} offline for more than 5 minutes"

  - alert: DisksOffline
    expr: avg_over_time(minio_cluster_drive_offline_total{job="minio-job"}[5m]) > 0
    for: 10m
    labels:
      severity: warn
    annotations:
      summary: "Disks down in MinIO deployment"
      description: "Disks(s) in cluster {{ $labels.instance }} offline for more than 5 minutes"

在 Prometheus 配置中,请在 rule_files 键中指定告警文件路径:

rule_files:
- minio-alerting.yml

一旦触发,Prometheus 会将告警发送到已配置的 AlertManager 服务。

仪表板

MinIO 提供 Grafana 仪表板,用于展示由 Prometheus 采集的指标。 更多信息请参见 使用 Grafana 监控 MinIO Server