使用 Prometheus 进行监控和警报
MinIO 使用 Prometheus 数据模型 发布集群、节点、存储桶和资源指标。本页面的步骤记录了以下内容
配置 Prometheus 服务以从 MinIO 部署中抓取和显示指标
配置 MinIO 指标上的警报规则以触发 AlertManager 操作
配置 Prometheus 以使用 MinIO 指标进行收集和警报
1) 生成抓取配置
使用 mc admin prometheus generate
命令生成抓取配置,供 Prometheus 用于进行抓取请求
以下命令抓取 MinIO 集群的指标。
mc admin prometheus generate 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
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
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
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 建议以下指标作为基本监控集。
有关所有可用指标的信息,请参见 指标和警报。
指标 |
描述 |
---|---|
|
驱动器上可用的总存储空间。 |
|
总的空闲 inode。 |
|
驱动器 API 存储操作的平均最近一分钟延迟(µs)。 |
|
此节点中离线的总驱动器数。 |
|
此节点中在线的总驱动器数。 |
|
此节点中的总驱动器数。 |
|
驱动器上的总存储空间。 |
|
驱动器上使用的总存储空间。 |
|
自服务器启动以来的总驱动器超时错误数。 |
|
自服务器启动以来的总驱动器 I/O 错误、权限被拒和超时数。 |
|
等待驱动器 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 服务器