文件

使用 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 欄位。

  • scheme 設定為 http,用於未使用 TLS 的 MinIO 部署。

  • 使用解析為 MinIO 部署的主機名稱設定 targets 陣列。

    這可以是任何單一節點,或處理與 MinIO 節點連線的負載平衡器/Proxy。

    對於與 MinIO Tenant 部署在同一叢集中的 Prometheus,您可以指定 minio 服務的服務 DNS 名稱。

    對於叢集外部的 Prometheus 部署,您必須指定一個 ingress 或負載平衡器端點,該端點配置為路由與 MinIO Tenant 的連線。

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