글로벌 멀티 클러스터 및 Thanos/Federation 환경에서 분산 스토리지의 가장 핵심적인 생존 조건인 데이터 쿼럼(Quorum) 상태를 실시간 관제하고, 패리티(Parity) 드라이브 손실로 인한 데이터 유실 위험을 사전에 차단하기 위한 7. Erasure Coding (이레이저 코딩) 전용 독립형 대시보드의 Metrics v3 Grafana JSON 명세입니다.
이 대시보드는 /minio/metrics/v3/cluster/health 및 erasure 서브시스템 지표를 매핑하여 작동합니다. 전체 세트의 건전성뿐만 아니라, 특정 이레이저 세트(Erasure Set) 내에서 물리 드라이브 결손으로 인해 릭(Write/Read Quorum) 한계점에 직면한 세트들을 정밀 격리하도록 돕습니다.
그라파나(Grafana)의 Import Dashboard 캔버스에 붙여넣어 즉시 기동할 수 있습니다. 상단 $cluster 셀렉터를 변경하면 해당 지역 인프라 코어의 네임스페이스($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": 700,
"title": "🛡️ 1. TARGET CLUSTER ERASURE SET VITAL HEALTH STATUS",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "red",
"value": null
},
{
"color": "green",
"value": 1
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 8,
"x": 0,
"y": 1
},
"id": 701,
"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(minio_cluster_health_erasure_sets_online_count{cluster=\"$cluster\", namespace=\"$namespace\"})",
"legendFormat": "Healthy Sets",
"refId": "A"
}
],
"title": "Healthy Erasure Sets (Fully Operational)",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "orange",
"value": 1
},
{
"color": "red",
"value": 3
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 8,
"x": 8,
"y": 1
},
"id": 702,
"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(minio_cluster_health_erasure_sets_degraded_count{cluster=\"$cluster\", namespace=\"$namespace\"})",
"legendFormat": "Degraded Sets",
"refId": "A"
}
],
"title": "Degraded Erasure Sets (Drives Missing)",
"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": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 8,
"x": 16,
"y": 1
},
"id": 703,
"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(minio_cluster_health_erasure_sets_offline_count{cluster=\"$cluster\", namespace=\"$namespace\"})",
"legendFormat": "Offline Sets",
"refId": "A"
}
],
"title": "Offline Erasure Sets (Quorum Broken)",
"type": "stat"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 5
},
"id": 800,
"title": "📉 2. DRIVES PER ERASURE SET MATRIX & HEALING VELOCITY",
"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": [],
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 6
},
"id": 801,
"options": {
"legend": {
"calcs": [
"min",
"lastNotNull"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "asc"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"editorMode": "code",
"expr": "minio_cluster_erasure_set_online_drives_count{cluster=\"$cluster\", namespace=\"$namespace\"}",
"legendFormat": "Pool {{pool_index}} Set {{set_index}} Online",
"refId": "A"
}
],
"title": "Online Drives Profile per individual Erasure Set",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisPlacement": "auto",
"drawStyle": "area",
"fillOpacity": 15,
"lineInterpolation": "smooth",
"lineWidth": 2,
"showPoints": "none"
},
"mappings": [],
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 6
},
"id": 802,
"options": {
"legend": {
"calcs": [
"max",
"sum"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "desc"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"editorMode": "code",
"expr": "minio_cluster_erasure_set_healing_drives_count{cluster=\"$cluster\", namespace=\"$namespace\"}",
"legendFormat": "Healing: Pool {{pool_index}} Set {{set_index}}",
"refId": "A"
}
],
"title": "Active Self-Healing Drives Timeline per Erasure Set",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 14
},
"id": 900,
"title": "🚨 3. QUORUM DEFICIT AVOIDANCE TIMELINE (CRITICAL RISK MONITOR)",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisPlacement": "auto",
"drawStyle": "line",
"fillOpacity": 5,
"lineInterpolation": "linear",
"lineWidth": 2,
"showPoints": "auto"
},
"mappings": [],
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 15
},
"id": 901,
"options": {
"legend": {
"calcs": [
"min"
],
"displayMode": "table",
"placement": "right",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "asc"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"editorMode": "code",
"expr": "minio_cluster_erasure_set_online_drives_count{cluster=\"$cluster\", namespace=\"$namespace\"} - minio_cluster_erasure_set_read_quorum{cluster=\"$cluster\", namespace=\"$namespace\"}",
"legendFormat": "Read Quorum Margin: Pool {{pool_index}} Set {{set_index}}",
"refId": "A"
}
],
"title": "Remaining Drive Margin Before Read Quorum Breakdown (Safety Buffer)",
"type": "timeseries"
}
],
"refresh": "10s",
"schemaVersion": 38,
"style": "dark",
"tags": [
"AIStor",
"Metrics-V3",
"Erasure-Coding",
"Quorum-Safety",
"Multi-Cluster-Core"
],
"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_health_erasure_sets_online_count, cluster)",
"hide": 0,
"includeAll": true,
"multi": false,
"label": "AIStor Cluster",
"name": "cluster",
"options": [],
"query": {
"query": "label_values(minio_cluster_health_erasure_sets_online_count, cluster)",
"refId": "ClusterVariableQuery"
},
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 1,
"type": "query"
},
{
"current": {},
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"definition": "label_values(minio_cluster_health_erasure_sets_online_count{cluster=\"$cluster\"}, namespace)",
"hide": 0,
"includeAll": false,
"label": "Namespace",
"name": "namespace",
"options": [],
"query": {
"query": "label_values(minio_cluster_health_erasure_sets_online_count{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 - 7. Erasure Coding (Multi-Cluster v3)",
"version": 2
}
이레이저 코딩 아키텍처는 전체 물리 드라이브 수 개 가 데이터 블록 개와 패리티 블록 개의 합인 구조로 파티셔닝됩니다. 본 대시보드는 이 수식을 기반으로 쿼럼 붕괴 임계치를 정량 계측합니다.
Remaining Drive Margin Before Read Quorum Breakdown 그래프의 선이 0을 향해 하향 곡선을 그리는 현상입니다.0에 도달하면 해당 이레이저 세트는 추가로 단 한 개의 드라이브만 유실되어도 S3 API 읽기 요청 처리가 불가능한 Read Quorum 다운 장애(Data Loss 위험) 상태에 빠집니다. 마진이 1 혹은 2로 떨어지는 순간 경고를 발생하도록 그라파나 알람(Alerting)을 바인딩해야 합니다.Degraded Erasure Sets의 카운트가 발생함과 동시에, 섹션 2 우측의 Active Self-Healing Drives Timeline 그래프가 솟구치는 현상입니다.하드웨어 내결함성의 마지노선인 이레이저 코딩 쿼럼 감시판까지 멀티 클러스터 v3 표준 규격으로 완벽하게 수립되었습니다.