文档

使用 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 存储操作的平均最近一分钟延迟(单位:微秒)。

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