文档

使用 Prometheus 进行监控和告警

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

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

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

这些说明使用版本 2 的指标。有关指标 API 版本的更多信息,请参阅指标和警报

先决条件

此步骤需要以下内容:

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

    对于 Kubernetes 基础设施上的 MinIO 租户,当在同一集群中使用 Prometheus 集群时,您可以为 minio 服务指定服务 DNS 名称。否则,您可以指定配置为路由进出 MinIO 租户连接的入口(ingress)或负载均衡器端点。

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

English 中文