Quota alerts for Buckets ‐ v3 - allanrogerr/public GitHub Wiki

Overview

MinIO provides built-in bucket quota metrics that can be monitored through Prometheus and Grafana. You can create alert rules to get notified when bucket usage reaches specific thresholds (e.g., 80%) without needing custom scripts.

Available Bucket Quota Metrics (v3)

MinIO v3 exposes the following key metrics for bucket quotas:

1. Bucket Usage Metrics

minio_cluster_usage_buckets_total_bytes{bucket="bucket_name"} - Current bucket usage in bytes
minio_cluster_usage_buckets_quota_total_bytes{bucket="bucket_name"} - Bucket quota limit in bytes

2. Additional Bucket Metrics

minio_cluster_usage_buckets_objects_count{bucket="bucket_name"} - Number of objects in bucket
minio_cluster_usage_buckets_versions_count{bucket="bucket_name"} - Number of object versions
minio_cluster_usage_buckets_delete_markers_count{bucket="bucket_name"} - Number of delete markers

3. Distribution Metrics

minio_cluster_usage_buckets_object_size_distribution{range="size_range",bucket="bucket_name"} - Object size distribution
minio_cluster_usage_buckets_object_version_count_distribution{range="version_range",bucket="bucket_name"} - Object version count distribution

Prometheus Alert Rules for 80% Quota Usage

1. Basic 80% Quota Alert

groups:
- name: minio-bucket-quota
  rules:
  - alert: BucketQuotaUsageHigh
    expr: |
      (
        minio_cluster_usage_buckets_total_bytes / minio_cluster_usage_buckets_quota_total_bytes
      ) * 100 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Bucket {{ $labels.bucket }} is {{ $value | humanizePercentage }} full"
      description: "Bucket {{ $labels.bucket }} has reached {{ $value | humanizePercentage }} of its quota limit. Current usage: {{ $labels.bucket_usage | humanize }} / {{ $labels.bucket_quota | humanize }}"

2. Enhanced Alert with Usage Details

groups:
- name: minio-bucket-quota
  rules:
  - alert: BucketQuotaUsageHigh
    expr: |
      (
        minio_cluster_usage_buckets_total_bytes / minio_cluster_usage_buckets_quota_total_bytes
      ) * 100 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Bucket {{ $labels.bucket }} quota usage is {{ $value | humanizePercentage }}"
      description: |
        Bucket {{ $labels.bucket }} has reached {{ $value | humanizePercentage }} of its quota limit.
        
        Current Usage: {{ $labels.bucket_usage | humanize }}
        Quota Limit: {{ $labels.bucket_quota | humanize }}
        Objects: {{ $labels.objects_count }}
        
        Please review and clean up if necessary.

3. Multiple Threshold Alerts

groups:
- name: minio-bucket-quota
  rules:
  - alert: BucketQuotaUsageWarning
    expr: |
      (
        minio_cluster_usage_buckets_total_bytes / minio_cluster_usage_buckets_quota_total_bytes
      ) * 100 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Bucket {{ $labels.bucket }} is {{ $value | humanizePercentage }} full"
      description: "Bucket {{ $labels.bucket }} has reached {{ $value | humanizePercentage }} of its quota limit"

  - alert: BucketQuotaUsageCritical
    expr: |
      (
        minio_cluster_usage_buckets_total_bytes / minio_cluster_usage_buckets_quota_total_bytes
      ) * 100 > 95
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "Bucket {{ $labels.bucket }} is {{ $value | humanizePercentage }} full - CRITICAL"
      description: "Bucket {{ $labels.bucket }} has reached {{ $value | humanizePercentage }} of its quota limit - IMMEDIATE ACTION REQUIRED"

4. Alert with Rate of Growth

groups:
- name: minio-bucket-quota
  rules:
  - alert: BucketQuotaUsageHighWithGrowth
    expr: |
      (
        minio_cluster_usage_buckets_total_bytes / minio_cluster_usage_buckets_quota_total_bytes
      ) * 100 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Bucket {{ $labels.bucket }} is {{ $value | humanizePercentage }} full"
      description: |
        Bucket {{ $labels.bucket }} has reached {{ $value | humanizePercentage }} of its quota limit.
        
        Usage Growth Rate (24h): {{ $labels.growth_rate | humanize }}/day
        Estimated Time to Full: {{ $labels.time_to_full }}