文档

使用 Prometheus 进行监控和告警

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

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

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

先决条件

此过程需要以下内容

  • 一个现有的 Prometheus 部署,并支持 Alert Manager

  • 一个现有的 MinIO 部署,并且可以网络访问 Prometheus 部署

  • 在您的本地主机上安装了 mc,并已配置为 访问 MinIO 部署

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

1) 生成抓取配置

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

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

mc admin prometheus generate ALIAS

ALIAS 替换为 MinIO 部署的 别名

该命令返回类似于以下内容的输出

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 部署的 别名

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 部署的 别名

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 部署的 别名

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 节点连接的负载均衡器/代理。

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 服务器