28Y18b6

Young-Kyoo Kim·2026년 7월 17일

멀티 클러스터 및 Thanos/Federation 환경에서 데이터 자가 치유(Self-Healing), 오브젝트 크롤링, 그리고 ILM 수명주기 대상을 판별하는 핵심 서브시스템인 스캐너의 부하 상태만 단독 감시하도록 최상단에 $cluster 선택 단추와 연동(Cascading) 필터를 탑재한 6. Scanner 전용 독립형 대시보드의 Metrics v3 리빌딩 스펙입니다.

이 대시보드는 최신 MinIO Metrics v3 스펙의 /minio/metrics/v3/cluster/scanner 엔드포인트 지표를 기반으로 동작하며, 시스템 전체의 스캔 주기 성능을 갉아먹는 액티브 스캐너 워커(Active Workers) 수, 노드별 스캔 주기 소요 시간(Cycle Duration), 그리고 초당 오브젝트/디렉터리 탐색 처리 속도를 정밀하게 추적합니다.


🔍 AIStor Operations: 6. Scanner 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": 600,
      "title": "⚙️ 1. TARGET CLUSTER SCANNER CORE ENGINE VITALS",
      "type": "row"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "orange",
                "value": 32
              },
              {
                "color": "red",
                "value": 64
              }
            ]
          },
          "unit": "short"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 4,
        "w": 6,
        "x": 0,
        "y": 1
      },
      "id": 601,
      "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_scanner_active_workers{cluster=\"$cluster\", namespace=\"$namespace\"})",
          "legendFormat": "Active Workers",
          "refId": "A"
        }
      ],
      "title": "Total Active Scanner Workers",
      "type": "stat"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "blue",
                "value": null
              },
              {
                "color": "orange",
                "value": 86400
              },
              {
                "color": "red",
                "value": 259200
              }
            ]
          },
          "unit": "s"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 4,
        "w": 6,
        "x": 6,
        "y": 1
      },
      "id": 602,
      "options": {
        "colorMode": "value",
        "graphMode": "none",
        "justifyMode": "center",
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "max"
          ],
          "fields": "",
          "values": false
        },
        "textMode": "value"
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "max(minio_cluster_scanner_cycle_duration_seconds{cluster=\"$cluster\", namespace=\"$namespace\"})",
          "legendFormat": "Max Cycle Duration",
          "refId": "A"
        }
      ],
      "title": "Worst Node Scan Cycle Duration",
      "type": "stat"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              }
            ]
          },
          "unit": "ops"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 4,
        "w": 6,
        "x": 12,
        "y": 1
      },
      "id": 603,
      "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_scanner_objects_scanned_total{cluster=\"$cluster\", namespace=\"$namespace\"}[5m]))",
          "legendFormat": "Objects/s",
          "refId": "A"
        }
      ],
      "title": "Global Object Scan Speed (Items/s)",
      "type": "stat"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "${datasource}"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              }
            ]
          },
          "unit": "ops"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 4,
        "w": 6,
        "x": 18,
        "y": 1
      },
      "id": 604,
      "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_scanner_directories_scanned_total{cluster=\"$cluster\", namespace=\"$namespace\"}[5m]))",
          "legendFormat": "Dirs/s",
          "refId": "A"
        }
      ],
      "title": "Global Directory Scan Speed (Dirs/s)",
      "type": "stat"
    },
    {
      "collapsed": false,
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 5
      },
      "id": 700,
      "title": "📈 2. TIMELINE TRENDS: CYCLE DURATION & WORKER LOAD DISTRIBUTION",
      "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": "s"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 7,
        "w": 12,
        "x": 0,
        "y": 6
      },
      "id": 701,
      "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_scanner_cycle_duration_seconds{cluster=\"$cluster\", namespace=\"$namespace\"}",
          "legendFormat": "Cycle: {{server}}",
          "refId": "A"
        }
      ],
      "title": "Scanner Cycle Duration Timeline per Server Node",
      "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": "short"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 7,
        "w": 12,
        "x": 12,
        "y": 6
      },
      "id": 702,
      "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_scanner_active_workers{cluster=\"$cluster\", namespace=\"$namespace\"}",
          "legendFormat": "Workers: {{server}}",
          "refId": "A"
        }
      ],
      "title": "Scanner Active Workers Distribution per Server Node",
      "type": "timeseries"
    },
    {
      "collapsed": false,
      "gridPos": {
        "h": 1,
        "w": 24,
        "x": 0,
        "y": 13
      },
      "id": 800,
      "title": "🚀 3. SCAN SPEED THROUGHPUT VELOCITY PROFILE",
      "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": "ops"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 7,
        "w": 24,
        "x": 0,
        "y": 14
      },
      "id": 801,
      "options": {
        "legend": {
          "calcs": [
            "sum",
            "max"
          ],
          "displayMode": "table",
          "placement": "right",
          "showLegend": true
        },
        "tooltip": {
          "mode": "multi",
          "sort": "desc"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "${datasource}"
          },
          "editorMode": "code",
          "expr": "rate(minio_cluster_scanner_objects_scanned_total{cluster=\"$cluster\", namespace=\"$namespace\"}[5m])",
          "legendFormat": "Scanned Node: {{server}}",
          "refId": "A"
        }
      ],
      "title": "Per-Node Object Scan Execution Velocity (Objects/sec)",
      "type": "timeseries"
    }
  ],
  "refresh": "30s",
  "schemaVersion": 38,
  "style": "dark",
  "tags": [
    "AIStor",
    "Metrics-V3",
    "Scanner-Engine",
    "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_scanner_active_workers, cluster)",
        "hide": 0,
        "includeAll": true,
        "multi": false,
        "label": "AIStor Cluster",
        "name": "cluster",
        "options": [],
        "query": {
          "query": "label_values(minio_cluster_scanner_active_workers, cluster)",
          "refId": "ClusterVariableQuery"
        },
        "refresh": 1,
        "regex": "",
        "skipUrlSync": false,
        "sort": 1,
        "type": "query"
      },
      {
        "current": {},
        "datasource": {
          "type": "prometheus",
          "uid": "${datasource}"
        },
        "definition": "label_values(minio_cluster_scanner_active_workers{cluster=\"$cluster\"}, namespace)",
        "hide": 0,
        "includeAll": false,
        "label": "Namespace",
        "name": "namespace",
        "options": [],
        "query": {
          "query": "label_values(minio_cluster_scanner_active_workers{cluster=\"$cluster\"}, namespace)",
          "refId": "NamespaceVariableQuery"
        },
        "refresh": 1,
        "regex": "",
        "skipUrlSync": false,
        "sort": 1,
        "type": "query"
      }
    ]
  },
  "time": {
    "from": "now-6h",
    "to": "now"
  },
  "timepicker": {
    "refresh_intervals": [
      "10s",
      "30s",
      "1m"
    ]
  },
  "timezone": "browser",
  "title": "AIStor Operations - 6. Scanner (Multi-Cluster v3)",
  "version": 2
}

⚙️ SRE 크롤러 스캔 지연(Stall) 진단 플레이북

1. Cycle Duration 무한 연장 현상 분리 (Small-File 병목)

  • 상황 판단: 특정 클러스터를 선택했을 때 Worst Node Scan Cycle Duration 수치가 수십 시간 혹은 수일 단위(>86400s)로 팽창하는데, 하단의 Per-Node Object Scan Execution Velocity 속도는 극도로 낮게 유지되는 현상입니다.
  • 원인 격리: 스캐너가 메타데이터 디렉터리를 크롤링하는 과정에서 수십억 개의 미세 분산 파일(Small Files) 혹은 메인테넌스가 유실된 수많은 가비지 버전(Deleted Object Versions) 더미를 마주쳐 디스크 I/O 락이 걸린 상태입니다.
  • 조치: 즉시 새벽 OLAP 시스템(StarRocks)에 구축해 둔 aistor_inventory_daily 뷰 쿼리를 실행하여, 어떤 테넌트의 버킷 접두사(Prefix) 구간에 미세 파일 및 만료된 버전이 밀집해 있는지 식별한 후 ILM 자동 처리를 가속하십시오.

2. 크로스 리전 스캐너 쓰로틀링 제어 (scanner delay)

  • 특정 노드의 Active Workers가 비정상적으로 집중되면서 S3 트래픽의 Latency(TTFB)가 동반 상승한다면, MinIO 설정 단에서 mc admin config set api scanner_delay=X 변수를 튜닝하여 운영 API 통신 스레드가 스캐너 크롤러 스레드에 의해 잠식당하지 않도록 제동을 걸어야 합니다. 이 대시보드가 리전별 스캐너 쓰로틀링 임계치(Threshold) 결정의 정량적 기준이 됩니다.

0개의 댓글