멀티 클러스터 및 Thanos/Federation 환경에서 데이터 자가 치유(Self-Healing), 오브젝트 크롤링, 그리고 ILM 수명주기 대상을 판별하는 핵심 서브시스템인 스캐너의 부하 상태만 단독 감시하도록 최상단에 $cluster 선택 단추와 연동(Cascading) 필터를 탑재한 6. Scanner 전용 독립형 대시보드의 Metrics v3 리빌딩 스펙입니다.
이 대시보드는 최신 MinIO Metrics v3 스펙의 /minio/metrics/v3/cluster/scanner 엔드포인트 지표를 기반으로 동작하며, 시스템 전체의 스캔 주기 성능을 갉아먹는 액티브 스캐너 워커(Active Workers) 수, 노드별 스캔 주기 소요 시간(Cycle Duration), 그리고 초당 오브젝트/디렉터리 탐색 처리 속도를 정밀하게 추적합니다.
그라파나(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
}
Worst Node Scan Cycle Duration 수치가 수십 시간 혹은 수일 단위(>86400s)로 팽창하는데, 하단의 Per-Node Object Scan Execution Velocity 속도는 극도로 낮게 유지되는 현상입니다.aistor_inventory_daily 뷰 쿼리를 실행하여, 어떤 테넌트의 버킷 접두사(Prefix) 구간에 미세 파일 및 만료된 버전이 밀집해 있는지 식별한 후 ILM 자동 처리를 가속하십시오.scanner delay)Active Workers가 비정상적으로 집중되면서 S3 트래픽의 Latency(TTFB)가 동반 상승한다면, MinIO 설정 단에서 mc admin config set api scanner_delay=X 변수를 튜닝하여 운영 API 통신 스레드가 스캐너 크롤러 스레드에 의해 잠식당하지 않도록 제동을 걸어야 합니다. 이 대시보드가 리전별 스캐너 쓰로틀링 임계치(Threshold) 결정의 정량적 기준이 됩니다.