文档

使用 Prometheus 进行监控和报警

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

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

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

先决条件

此过程需要以下内容

  • 带有支持 Alert Manager 的现有 Prometheus 部署

  • 具有对 Prometheus 部署的网络访问权限的现有 MinIO 部署

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

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

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