28Y18b4

Young-Kyoo Kim·2026년 7월 17일

멀티 클러스터 및 Thanos/Federation 환경에서 타 리전 사이트 간의 데이터 동기화 파이프라인(Cross-Site Replication) 상태만 정밀 관제할 수 있도록 최상단에 $cluster 동적 선택 단추와 연동(Cascading) 필터를 완전히 내장한 4. Replication 전용 독립형 대시보드의 Metrics v3 리빌딩 스펙입니다.

이 대시보드는 최신 MinIO Metrics v3 스펙의 /minio/metrics/v3/cluster/replication 엔드포인트에서 수집되는 핵심 지표들을 기반으로 작동합니다. 리전 간 대역폭 포화, WAN 구간 라우팅 장애, 혹은 대상 클러스터 다운으로 인한 Replication Backlog(Bytes/Count) 적체 현상동기화 실패(Failed Count), 그리고 리전 간 링크 레이턴시(Link Latency)를 실시간 격리 분석합니다.


🔁 AIStor Operations: 4. Replication Dashboard (Multi-Cluster v3)

그라파나(Grafana)의 Import Dashboard 메뉴에 복사하여 즉시 배포할 수 있습니다. 모든 하부 패널의 PromQL 인덱스에 {cluster="$cluster", namespace="$namespace"} 가드레일 필터가 강제 인젝션되어 다중 리전 간 지표 오탐을 원천 차단합니다.

{
  "annotations": {
    "list": [
      {
        "builtIn": 1,
        "datasource": {
          "type": "datasource",
          "uid": "grafana"
        },
        "enable": true,
        "hide": true,
        "name": "Annotations & Alerts",
        "type": "dashboard"
      }
    ]
  },
  "editable": true,
  "fiscalYearStartMonth": 0,
  "graphTooltip": 1,
  "id": null,
  "links": [],
  "liveNow": false,
  "panels": [
    {
      "collapsed": false,
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 0
      },
      "id": 400,
      "title": "🚨 1. TARGET REPLICATION VITALS & BACKLOG LOGIC",
      "type": "row"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "orange",
                "value": 107374182400
              },
              {
                "color": "red",
                "value": 536870912000
              }
            ]
          },
          "unit": "decbytes"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 5,
        "w": 6,
        "x": 0,
        "y": 1
      },
      "id": 401,
      "options": {
        "colorMode": "value",
        "graphMode": "area",
        "justifyMode": "center",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "",
          "values": false
        },
        "textMode": "value"
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "sum(minio_cluster_replication_pending_bytes{cluster=\"$cluster\", namespace=\"$namespace\"})",
          "legendFormat": "Pending Bytes",
          "refId": "A"
        }
      ],
      "title": "Replication Pending Backlog Size (Bytes)",
      "type": "stat"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "orange",
                "value": 10000
              },
              {
                "color": "red",
                "value": 50000
              }
            ]
          },
          "unit": "short"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 5,
        "w": 6,
        "x": 6,
        "y": 1
      },
      "id": 402,
      "options": {
        "colorMode": "value",
        "graphMode": "area",
        "justifyMode": "center",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "",
          "values": false
        },
        "textMode": "value"
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "sum(minio_cluster_replication_pending_count{cluster=\"$cluster\", namespace=\"$namespace\"})",
          "legendFormat": "Pending Objects",
          "refId": "A"
        }
      ],
      "title": "Replication Pending Objects Count",
      "type": "stat"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 1
              }
            ]
          },
          "unit": "pps"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 5,
        "w": 6,
        "x": 12,
        "y": 1
      },
      "id": 403,
      "options": {
        "colorMode": "value",
        "graphMode": "none",
        "justifyMode": "center",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "",
          "values": false
        },
        "textMode": "value"
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "sum(rate(minio_cluster_replication_failed_count{cluster=\"$cluster\", namespace=\"$namespace\"}[5m]))",
          "legendFormat": "Failed Rate",
          "refId": "A"
        }
      ],
      "title": "Replication Failed Transfer Speed (Objects/s)",
      "type": "stat"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "orange",
                "value": 0.2
              },
              {
                "color": "red",
                "value": 0.5
              }
            ]
          },
          "unit": "s"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 5,
        "w": 6,
        "x": 18,
        "y": 1
      },
      "id": 404,
      "options": {
        "colorMode": "value",
        "graphMode": "none",
        "justifyMode": "center",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "",
          "values": false
        },
        "textMode": "value"
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "max(minio_cluster_replication_link_latency_seconds{cluster=\"$cluster\", namespace=\"$namespace\"})",
          "legendFormat": "Max Latency",
          "refId": "A"
        }
      ],
      "title": "Worst Cross-Site Link Latency (Seconds)",
      "type": "stat"
    },
    {
      "collapsed": false,
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 6
      },
      "id": 500,
      "title": "📈 2. CROSS-SITE BANDWIDTH THROUGHPUT & LATENCY TRENDS",
      "type": "row"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "palette-classic"
          },
          "custom": {
            "axisBorderShow": false,
            "axisPlacement": "auto",
            "drawStyle": "line",
            "fillOpacity": 10,
            "lineInterpolation": "smooth",
            "lineWidth": 2,
            "showPoints": "none"
          },
          "mappings": [],
          "unit": "Bps"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 7,
        "w": 12,
        "x": 0,
        "y": 7
      },
      "id": 501,
      "options": {
        "legend": {
          "calcs": [
            "mean",
            "max"
          ],
          "displayMode": "table",
          "placement": "bottom",
          "showLegend": true
        },
        "tooltip": {
          "mode": "multi",
          "sort": "desc"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "sum(rate(minio_cluster_replication_sent_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[5m])) by (server)",
          "legendFormat": "Sent from {{server}}",
          "refId": "A"
        },
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "sum(rate(minio_cluster_replication_received_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\"}[5m])) by (server)",
          "legendFormat": "Received by {{server}}",
          "refId": "B"
        }
      ],
      "title": "Cross-Site Replication Bandwidth Velocity (Sent/Received Bps)",
      "type": "timeseries"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "palette-classic"
          },
          "custom": {
            "axisBorderShow": false,
            "axisPlacement": "auto",
            "drawStyle": "line",
            "fillOpacity": 5,
            "lineInterpolation": "smooth",
            "lineWidth": 2,
            "showPoints": "none"
          },
          "mappings": [],
          "unit": "s"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 7,
        "w": 12,
        "x": 12,
        "y": 7
      },
      "id": 502,
      "options": {
        "legend": {
          "calcs": [
            "mean",
            "max"
          ],
          "displayMode": "table",
          "placement": "bottom",
          "showLegend": true
        },
        "tooltip": {
          "mode": "multi",
          "sort": "desc"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "minio_cluster_replication_link_latency_seconds{cluster=\"$cluster\", namespace=\"$namespace\"}",
          "legendFormat": "Link: {{server}} -> Target",
          "refId": "A"
        }
      ],
      "title": "Cross-Site Replication Link Latency Timeline",
      "type": "timeseries"
    },
    {
      "collapsed": false,
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 14
      },
      "id": 600,
      "title": "📋 3. DETAILED BACKLOG ACCUMULATION TRENDS",
      "type": "row"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "palette-classic"
          },
          "custom": {
            "axisBorderShow": false,
            "axisPlacement": "auto",
            "drawStyle": "line",
            "fillOpacity": 5,
            "lineInterpolation": "smooth",
            "lineWidth": 2,
            "showPoints": "none"
          },
          "mappings": []
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 24,
        "x": 0,
        "y": 15
      },
      "id": 601,
      "options": {
        "legend": {
          "calcs": [
            "max",
            "lastNotNull"
          ],
          "displayMode": "table",
          "placement": "right",
          "showLegend": true
        },
        "tooltip": {
          "mode": "multi",
          "sort": "desc"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "minio_cluster_replication_pending_count{cluster=\"$cluster\", namespace=\"$namespace\"}",
          "legendFormat": "Pending: {{server}}",
          "refId": "A"
        }
      ],
      "title": "Replication Pending Backlog Count Profile per Node Server",
      "type": "timeseries"
    }
  ],
  "refresh": "10s",
  "schemaVersion": 38,
  "style": "dark",
  "tags": [
    "AIStor",
    "Metrics-V3",
    "Replication-Only",
    "Multi-Cluster-WAN"
  ],
  "templating": {
    "list": [
      {
        "current": {},
        "hide": 0,
        "includeAll": false,
        "label": "Data Source",
        "name": "datasource",
        "options": [],
        "query": "prometheus",
        "refresh": 1,
        "regex": "",
        "skipUrlSync": false,
        "type": "datasource"
      },
      {
        "current": {},
        "datasource": {
          "type": "prometheus",
          "uid": "${datasource}"
        },
        "definition": "label_values(minio_cluster_replication_pending_bytes, cluster)",
        "hide": 0,
        "includeAll": true,
        "multi": false,
        "label": "AIStor Cluster",
        "name": "cluster",
        "options": [],
        "query": {
          "query": "label_values(minio_cluster_replication_pending_bytes, cluster)",
          "refId": "ClusterVariableQuery"
        },
        "refresh": 1,
        "regex": "",
        "skipUrlSync": false,
        "sort": 1,
        "type": "query"
      },
      {
        "current": {},
        "datasource": {
          "type": "prometheus",
          "uid": "${datasource}"
        },
        "definition": "label_values(minio_cluster_replication_pending_bytes{cluster=\"$cluster\"}, namespace)",
        "hide": 0,
        "includeAll": false,
        "label": "Namespace",
        "name": "namespace",
        "options": [],
        "query": {
          "query": "label_values(minio_cluster_replication_pending_bytes{cluster=\"$cluster\"}, namespace)",
          "refId": "NamespaceVariableQuery"
        },
        "refresh": 1,
        "regex": "",
        "skipUrlSync": false,
        "sort": 1,
        "type": "query"
      }
    ]
  },
  "time": {
    "from": "now-1h",
    "to": "now"
  },
  "timepicker": {
    "refresh_intervals": [
      "5s",
      "10s",
      "30s"
    ]
  },
  "timezone": "browser",
  "title": "AIStor Operations - 4. Replication (Multi-Cluster v3)",
  "version": 2
}

🔍 SRE 멀티 클러스터 크로스 사이트 장애 유출 진단 공식 (v3)

  • 장애 징후: Worst Cross-Site Link Latency 지표가 수 초(>0.5s) 이상 튀어 오르기 시작하고, 동시간대에 Replication Pending Backlog Size (Bytes) 게이지의 숫자가 GB 단위를 넘어 TB 방향으로 가파르게 치솟는 현상입니다.
  • 원인 추정: 이 징후는 로컬 AIStor 클러스터의 문제는 아닙니다. 두 리전 사이트 간을 잇는 전용회선(WAN) 구간에 라우팅 루프가 돌거나 패킷 드롭이 대량 방출되어 TCP 윈도우 사이즈가 축소되었거나, 혹은 대상 타겟 사이트 클러스터가 I/O 포화 상태에 빠져 복제 스트림 수신을 스로틀링하고 있음을 보여주는 강력한 증적입니다.
  • 조치: 즉시 이전에 빌드한 9. Network 대시보드의 TCP Retransmission(재전송) 비율을 체크하여 네트워크 장비 단의 문제인지 원격지 클러스터 다운인지 판독하십시오.

2. Failed Transfer Speed 감시를 통한 정합성 오염 차단

  • Failed Transfer Speed 패널에 상시 0이 아닌 수치가 찍히기 시작한다면, 네트워크의 단순 지연이 아니라 데이터 정합성 실패(예: 암호화 키 불일치, 오브젝트 변형, 불량 IAM 정책 권한 탈락 등)로 인해 복제 프로세스가 강제로 드롭(Abort)되고 있음을 시사합니다.
  • 이 카운트가 발생하는 즉시 n8n 자동화 룰셋이 작동되도록 Webhook을 연동하여 불량 버킷의 미러링 세션을 긴급 복구하도록 설계해야 합니다.

0개의 댓글