文档

使用 Prometheus 进行监控和警报

MinIO 使用 Prometheus 数据模型 发布集群、节点、存储桶和资源指标。本页面的步骤记录了以下内容

  • 配置 Prometheus 服务以从 MinIO 部署中抓取和显示指标

  • 配置 MinIO 指标上的警报规则以触发 AlertManager 操作

先决条件

此步骤需要以下内容

配置 Prometheus 以使用 MinIO 指标进行收集和警报

1) 生成抓取配置

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

以下命令抓取 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 服务器上节点的指标。

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 服务器上存储桶的指标。

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 服务器上资源的指标。

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 服务器的负载,请选择最长的满足您监控要求的间隔。

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

    使用唯一值以确保将部署指标与该 Prometheus 服务收集的任何其他指标隔离开来。

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

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

  • 使用解析到 MinIO 部署的主机名设置 targets 数组。

    这可以是任何单个节点,或处理到 MinIO 节点连接的负载均衡器/代理。

    对于与 MinIO 租户位于同一集群中的 Prometheus 部署,您可以为 minio 服务指定服务 DNS 名称。

    对于集群外部的 Prometheus 部署,您必须指定配置为将连接路由到 MinIO 租户的入口或负载均衡器端点。

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

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

集群指标聚合节点级指标,并在适当情况下为源节点添加标签。

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 包含一个 表达式浏览器。您可以在此处执行查询以分析收集的指标。

以下查询示例返回 Prometheus 每五分钟为名为 minio-job 的抓取作业收集的指标

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

自服务器启动以来的总驱动器超时错误数。

minio_node_drive_errors_availability

自服务器启动以来的总驱动器 I/O 错误、权限被拒和超时数。

minio_node_drive_io_waiting

等待驱动器 I/O 操作的总数。

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

您必须在 Prometheus 部署上配置 警报规则 以根据收集的 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 服务器