使用 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 租户的 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 建议以下指标作为监控的基本集。
有关所有可用指标的信息,请参阅 指标和警报。
指标 |
描述 |
---|---|
|
驱动器上可用的总存储空间。 |
|
总空闲 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 服务器