1
0
mirror of https://github.com/minio/docs.git synced 2025-04-25 17:22:39 +03:00
docs/source/operations/monitoring/collect-minio-metrics-using-prometheus.rst
2023-12-01 13:58:17 -08:00

9.1 KiB

Monitoring and Alerting using Prometheus

minio

Table of Contents

MinIO publishes cluster, node, bucket, and resource metrics using the Prometheus Data Model <concepts/data_model/#data-model>. The procedure on this page documents the following:

  • Configuring a Prometheus service to scrape and display metrics from a MinIO deployment
  • Configuring an Alert Rule on a MinIO Metric to trigger an AlertManager action

Prerequisites

This procedure requires the following:

  • An existing Prometheus deployment <prometheus/latest/installation/> with backing Alert Manager <alerting/latest/overview/>
  • An existing MinIO deployment with network access to the Prometheus deployment
  • An mc installation on your local host configured to access <alias> the MinIO deployment

Configure Prometheus to Collect and Alert using MinIO Metrics

1) Generate the Scrape Configuration

Use the mc admin prometheus generate command to generate the scrape configuration for use by Prometheus in making scraping requests:

MinIO Server

The following command scrapes metrics for the MinIO cluster.

mc admin prometheus generate ALIAS

Replace ALIAS <mc admin prometheus generate TARGET> with the alias <mc alias> of the MinIO deployment.

Nodes

The following command scrapes metrics for a node on the MinIO Server.

mc admin prometheus generate ALIAS node

Replace ALIAS <mc admin prometheus generate TARGET> with the alias <mc alias> of the MinIO deployment.

Buckets

The following command scrapes metrics for buckets on the MinIO Server.

mc admin prometheus generate ALIAS bucket

Replace ALIAS <mc admin prometheus generate TARGET> with the alias <mc alias> of the MinIO deployment.

Resources

RELEASE.2023-10-07T15-07-38Z

The following command scrapes metrics for resources on the MinIO Server.

mc admin prometheus generate ALIAS resource

Replace ALIAS <mc admin prometheus generate TARGET> with the alias <mc alias> of the MinIO deployment.

The command returns output similar to the following:

scrape_configs:
- job_name: minio-job 
  bearer_token: TOKEN
  metrics_path: /minio/v2/metrics/cluster
  scheme: https
  static_configs:
  - targets: [minio.example.net]
  • Set the job_name to a value associated to the MinIO deployment.

    Use a unique value to ensure isolation of the deployment metrics from any others collected by that Prometheus service.

  • MinIO deployments started with MINIO_PROMETHEUS_AUTH_TYPE set to "public" can omit the bearer_token field.

  • Set the scheme to http for MinIO deployments not using TLS.

  • Set the targets array with a hostname that resolves to the MinIO deployment.

    This can be any single node, or a load balancer/proxy which handles connections to the MinIO nodes.

    k8s

    For Prometheus deployments in the same cluster as the MinIO Tenant, you can specify the service DNS name for the minio service.

    For Prometheus deployments external to the cluster, you must specify an ingress or load balancer endpoint configured to route connections to and from the MinIO Tenant.

2) Restart Prometheus with the Updated Configuration

Append the desired scrape_configs job generated in the previous step to the configuration file:

Cluster

Cluster metrics aggregate node-level metrics and, where appropriate, attach labels to metrics for the originating node. If you are already collecting cluster metrics, you do not need to add an additional scrape_configs job for node.

global:
   scrape_interval: 15s

scrape_configs:
   - job_name: minio-job
     bearer_token: TOKEN
     metrics_path: /minio/v2/metrics/cluster
     scheme: https
     static_configs:
     - targets: [minio.example.net]

Bucket

global:
   scrape_interval: 15s

scrape_configs:
   - job_name: minio-job-bucket
     bearer_token: TOKEN
     metrics_path: /minio/v2/metrics/bucket
     scheme: https
     static_configs:
     - targets: [minio.example.net]

Resource

global:
   scrape_interval: 15s

scrape_configs:
   - job_name: minio-job-resource
     bearer_token: TOKEN
     metrics_path: /minio/v2/metrics/resource
     scheme: https
     static_configs:
     - targets: [minio.example.net]

Start the Prometheus cluster using the configuration file:

prometheus --config.file=prometheus.yaml

3) Analyze Collected Metrics

Prometheus includes a expression browser <prometheus/latest/getting_started/#using-the-expression-browser>. You can execute queries here to analyze the collected metrics.

The following query examples return metrics collected by Prometheus:

minio_cluster_drive_online_total{job="minio-job"}[5m]
minio_cluster_drive_offline_total{job="minio-job"}[5m]

minio_bucket_usage_object_total{job="minio-job"}[5m]

minio_cluster_capacity_usable_free_bytes{job="minio-job"}[5m]

See minio-metrics-and-alerts for information about metrics.

1) Configure an Alert Rule using MinIO Metrics

You must configure Alert Rules <prometheus/latest/configuration/alerting_rules/> on the Prometheus deployment to trigger alerts based on collected MinIO metrics.

The following example alert rule files provide a baseline of alerts for a MinIO deployment. You can modify or otherwise use these examples as guidance in building your own alerts.

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: DrivesOffline
    expr: avg_over_time(minio_cluster_drive_offline_total{job="minio-job"}[5m]) > 0
    for: 10m
    labels:
      severity: warn
    annotations:
      summary: "Drives down in MinIO deployment"
      description: "Drives(s) in cluster {{ $labels.instance }} offline for more than 5 minutes"

Specify the path to the alert file to the Prometheus configuration as part of the rule_files key:

global:
  scrape_interval: 5s

rule_files:
- minio-alerting.yml

Once triggered, Prometheus sends the alert to the configured AlertManager service.

5) (Optional) Configure MinIO Console to Query Prometheus

The Console also supports displaying time-series and historical data by querying a Prometheus <prometheus/latest/getting_started/> service configured to scrape data from the MinIO deployment.

MinIO Console displaying Prometheus-backed Monitoring Data

To enable historical data visualization in MinIO Console, set the following environment variables on each node in the MinIO deployment:

  • Set MINIO_PROMETHEUS_URL to the URL of the Prometheus service
  • Set MINIO_PROMETHEUS_JOB_ID to the unique job ID assigned to the collected metrics

Restart the MinIO deployment and visit the Monitoring <minio-console-monitoring> pane to see the historical data views.

Dashboards

MinIO provides Grafana Dashboards to display metrics collected by Prometheus. For more information, see minio-grafana