{
"__inputs": [
{
"name": "DS_PROMETHEUS",
"label": "Prometheus",
"description": "MinIO AIStor 메트릭을 스크레이핑하는 Prometheus 데이터소스",
"type": "datasource",
"pluginId": "prometheus",
"pluginName": "Prometheus"
}
],
"__requires": [
{ "type": "grafana", "id": "grafana", "name": "Grafana", "version": "10.4.0" },
{ "type": "datasource", "id": "prometheus", "name": "Prometheus", "version": "1.0.0" },
{ "type": "panel", "id": "timeseries", "name": "Time series", "version": "" },
{ "type": "panel", "id": "stat", "name": "Stat", "version": "" },
{ "type": "panel", "id": "table", "name": "Table", "version": "" },
{ "type": "panel", "id": "bargauge", "name": "Bar gauge", "version": "" },
{ "type": "panel", "id": "histogram", "name": "Histogram", "version": "" },
{ "type": "panel", "id": "row", "name": "Row", "version": "" }
],
"id": null,
"uid": "minio-aistor-perf-01",
"title": "MinIO AIStor Performance (1/2) - Requests & Disk/Network",
"description": "128 노드 x 20 디스크(총 2560 디스크) 규모의 AIStor 클러스터를 위한 성능 대시보드. 1) API 요청량/Verb별 분석, 2) 노드별 Disk/Network. 개별 디스크 나열 대신 분포(histogram)와 Top-N 이상치 테이블로 가시성을 확보했습니다.",
"tags": ["minio", "aistor", "performance", "s3"],
"timezone": "browser",
"editable": true,
"graphTooltip": 1,
"refresh": "30s",
"schemaVersion": 39,
"version": 1,
"time": { "from": "now-6h", "to": "now" },
"timepicker": {
"refresh_intervals": ["10s", "30s", "1m", "5m", "15m", "30m", "1h"]
},
"templating": {
"list": [
{
"name": "datasource",
"type": "datasource",
"query": "prometheus",
"hide": 0,
"label": "Prometheus",
"current": {}
},
{
"name": "server",
"type": "query",
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"query": "label_values(minio_system_drive_used_bytes, server)",
"label": "Node (drill-down, optional)",
"hide": 0,
"includeAll": true,
"multi": true,
"allValue": ".*",
"current": { "text": "All", "value": "$__all" },
"refresh": 2,
"sort": 1
},
{
"name": "topn",
"type": "custom",
"query": "10,15,20,30",
"label": "Top N",
"hide": 0,
"current": { "text": "15", "value": "15" },
"options": [
{ "text": "10", "value": "10", "selected": false },
{ "text": "15", "value": "15", "selected": true },
{ "text": "20", "value": "20", "selected": false },
{ "text": "30", "value": "30", "selected": false }
]
}
]
},
"panels": [
{
"id": 100,
"type": "row",
"title": "1. 요청(Request) 개요 - 클러스터 전체",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
"collapsed": false,
"panels": []
},
{
"id": 1,
"type": "stat",
"title": "Total Request Rate (req/s)",
"description": "minio_api_requests_total 기준 클러스터 전체 초당 요청 수",
"gridPos": { "h": 4, "w": 4, "x": 0, "y": 1 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(rate(minio_api_requests_total{server=~\"$server\"}[5m]))",
"legendFormat": "req/s",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "reqps",
"decimals": 1,
"color": { "mode": "thresholds" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
},
"overrides": []
},
"options": { "graphMode": "area", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "auto" }
},
{
"id": 2,
"type": "stat",
"title": "Error Rate (4xx+5xx) %",
"description": "전체 요청 대비 4xx/5xx 에러 비율. 급격한 상승 시 verb별 패널에서 원인 파악",
"gridPos": { "h": 4, "w": 4, "x": 4, "y": 1 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "100 * sum(rate(minio_api_requests_errors_total{server=~\"$server\"}[5m])) / clamp_min(sum(rate(minio_api_requests_total{server=~\"$server\"}[5m])), 1)",
"legendFormat": "error %",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "percent",
"decimals": 2,
"color": { "mode": "thresholds" },
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "yellow", "value": 1 },
{ "color": "red", "value": 5 }
]
}
},
"overrides": []
},
"options": { "graphMode": "area", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "auto" }
},
{
"id": 3,
"type": "stat",
"title": "Requests Waiting (현재)",
"description": "minio_api_requests_waiting_total - 처리 대기 중인 요청 수. 지속 상승은 처리 능력 부족 신호",
"gridPos": { "h": 4, "w": 4, "x": 8, "y": 1 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(minio_api_requests_waiting_total{server=~\"$server\"})",
"legendFormat": "waiting",
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"color": { "mode": "thresholds" },
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "yellow", "value": 100 },
{ "color": "red", "value": 1000 }
]
}
},
"overrides": []
},
"options": { "graphMode": "area", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "auto" }
},
{
"id": 4,
"type": "stat",
"title": "Requests Inflight (현재)",
"description": "minio_api_requests_inflight_total - 현재 처리 중인 요청 수 (goroutine 급증과 상관관계 확인용)",
"gridPos": { "h": 4, "w": 4, "x": 12, "y": 1 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(minio_api_requests_inflight_total{server=~\"$server\"})",
"legendFormat": "inflight",
"refId": "A"
}
],
"fieldConfig": {
"defaults": { "unit": "short", "color": { "mode": "thresholds" }, "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] } },
"overrides": []
},
"options": { "graphMode": "area", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "auto" }
},
{
"id": 5,
"type": "stat",
"title": "Rejected Requests Rate",
"description": "인증/헤더/타임스탬프/형식/미구현 사유로 거부된 요청 합계 (초당). 클라이언트 이슈 식별용",
"gridPos": { "h": 4, "w": 4, "x": 16, "y": 1 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(rate(minio_api_requests_rejected_auth_total{server=~\"$server\"}[5m])) + sum(rate(minio_api_requests_rejected_header_total{server=~\"$server\"}[5m])) + sum(rate(minio_api_requests_rejected_timestamp_total{server=~\"$server\"}[5m])) + sum(rate(minio_api_requests_rejected_invalid_total{server=~\"$server\"}[5m])) + sum(rate(minio_api_requests_rejected_notimplemented_total{server=~\"$server\"}[5m]))",
"legendFormat": "rejected/s",
"refId": "A"
}
],
"fieldConfig": {
"defaults": { "unit": "reqps", "decimals": 2, "color": { "mode": "thresholds" }, "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 1 }, { "color": "red", "value": 10 }] } },
"overrides": []
},
"options": { "graphMode": "area", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "auto" }
},
{
"id": 6,
"type": "stat",
"title": "Canceled Requests Rate",
"description": "클라이언트가 완료 전 취소한 요청 비율 (초당). 클라이언트 타임아웃/네트워크 문제 신호일 수 있음",
"gridPos": { "h": 4, "w": 4, "x": 20, "y": 1 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(rate(minio_api_requests_canceled_total{server=~\"$server\"}[5m]))",
"legendFormat": "canceled/s",
"refId": "A"
}
],
"fieldConfig": {
"defaults": { "unit": "reqps", "decimals": 2, "color": { "mode": "thresholds" }, "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 1 }] } },
"overrides": []
},
"options": { "graphMode": "area", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "auto" }
},
{
"id": 101,
"type": "row",
"title": "1-1. Verb(오퍼레이션)별 요청 분석",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 },
"collapsed": false,
"panels": []
},
{
"id": 7,
"type": "timeseries",
"title": "Request Rate by Verb (Top 10)",
"description": "minio_api_requests_total{name=...} 기준 오퍼레이션(GetObject/PutObject/HeadObject 등)별 요청률 상위 10개",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk(10, sum by (name) (rate(minio_api_requests_total{server=~\"$server\"}[5m])))",
"legendFormat": "{{name}}",
"refId": "A"
}
],
"fieldConfig": {
"defaults": { "unit": "reqps", "custom": { "drawStyle": "line", "fillOpacity": 15, "stacking": { "mode": "normal" }, "showPoints": "never" } },
"overrides": []
},
"options": { "legend": { "displayMode": "table", "placement": "right", "calcs": ["mean", "max", "lastNotNull"] }, "tooltip": { "mode": "multi" } }
},
{
"id": 8,
"type": "timeseries",
"title": "Error Rate by Verb (4xx / 5xx)",
"description": "오퍼레이션별 4xx/5xx 에러율. 5xx는 서버 문제, 4xx는 클라이언트/권한 문제일 가능성이 높음",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk(10, sum by (name) (rate(minio_api_requests_4xx_errors_total{server=~\"$server\"}[5m])))",
"legendFormat": "4xx {{name}}",
"refId": "A"
},
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk(10, sum by (name) (rate(minio_api_requests_5xx_errors_total{server=~\"$server\"}[5m])))",
"legendFormat": "5xx {{name}}",
"refId": "B"
}
],
"fieldConfig": {
"defaults": { "unit": "reqps", "custom": { "drawStyle": "line", "fillOpacity": 10, "showPoints": "never" } },
"overrides": [
{ "matcher": { "id": "byRegexp", "options": "5xx.*" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } }] },
{ "matcher": { "id": "byRegexp", "options": "4xx.*" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "orange" } }] }
]
},
"options": { "legend": { "displayMode": "table", "placement": "right", "calcs": ["mean", "max"] }, "tooltip": { "mode": "multi" } }
},
{
"id": 9,
"type": "bargauge",
"title": "Rejected Requests by Reason (5m rate)",
"description": "요청이 거부된 사유별 분류: 인증실패 / 헤더오류 / 타임스탬프오류 / 형식오류 / 미구현 API",
"gridPos": { "h": 8, "w": 8, "x": 0, "y": 14 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(rate(minio_api_requests_rejected_auth_total{server=~\"$server\"}[5m]))", "legendFormat": "auth", "refId": "A" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(rate(minio_api_requests_rejected_header_total{server=~\"$server\"}[5m]))", "legendFormat": "header", "refId": "B" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(rate(minio_api_requests_rejected_timestamp_total{server=~\"$server\"}[5m]))", "legendFormat": "timestamp", "refId": "C" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(rate(minio_api_requests_rejected_invalid_total{server=~\"$server\"}[5m]))", "legendFormat": "invalid", "refId": "D" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(rate(minio_api_requests_rejected_notimplemented_total{server=~\"$server\"}[5m]))", "legendFormat": "not_implemented", "refId": "E" }
],
"fieldConfig": { "defaults": { "unit": "reqps", "decimals": 3, "min": 0 }, "overrides": [] },
"options": { "orientation": "horizontal", "displayMode": "gradient", "reduceOptions": { "calcs": ["lastNotNull"] } }
},
{
"id": 10,
"type": "timeseries",
"title": "Incoming / Waiting / Inflight (클러스터 합계 추이)",
"description": "요청 처리 파이프라인 포화도 추적. waiting이 지속적으로 쌓이면 처리 능력 대비 요청량 과다",
"gridPos": { "h": 8, "w": 16, "x": 8, "y": 14 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(minio_api_requests_incoming_total{server=~\"$server\"})", "legendFormat": "incoming", "refId": "A" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(minio_api_requests_waiting_total{server=~\"$server\"})", "legendFormat": "waiting", "refId": "B" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(minio_api_requests_inflight_total{server=~\"$server\"})", "legendFormat": "inflight", "refId": "C" }
],
"fieldConfig": { "defaults": { "unit": "short", "custom": { "drawStyle": "line", "fillOpacity": 10, "showPoints": "never" } }, "overrides": [] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi" } }
},
{
"id": 102,
"type": "row",
"title": "2. 노드/디스크 개요 (128 노드 x 20 디스크 = 2560 디스크)",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 22 },
"collapsed": false,
"panels": []
},
{
"id": 11,
"type": "stat",
"title": "Online Nodes / Total",
"description": "minio_cluster_health_nodes_online_count / minio_cluster_health_nodes_offline_count",
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 23 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "minio_cluster_health_nodes_online_count", "legendFormat": "online", "refId": "A" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "minio_cluster_health_nodes_online_count + minio_cluster_health_nodes_offline_count", "legendFormat": "total", "refId": "B" }
],
"fieldConfig": { "defaults": { "unit": "short", "color": { "mode": "thresholds" }, "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] } }, "overrides": [] },
"options": { "graphMode": "none", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "value_and_name" }
},
{
"id": 12,
"type": "stat",
"title": "Online Drives / Total (기대값 2560)",
"description": "minio_cluster_health_drives_online_count / minio_cluster_health_drives_count. 2560에서 벗어나면 즉시 확인 필요",
"gridPos": { "h": 4, "w": 6, "x": 6, "y": 23 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "minio_cluster_health_drives_online_count", "legendFormat": "online", "refId": "A" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "minio_cluster_health_drives_count", "legendFormat": "total", "refId": "B" }
],
"fieldConfig": {
"defaults": {
"unit": "short",
"color": { "mode": "thresholds" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
},
"overrides": []
},
"options": { "graphMode": "none", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "value_and_name" }
},
{
"id": 13,
"type": "stat",
"title": "Offline Drives",
"description": "minio_cluster_health_drives_offline_count - 0이 아니면 경고",
"gridPos": { "h": 4, "w": 6, "x": 12, "y": 23 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "minio_cluster_health_drives_offline_count", "legendFormat": "offline", "refId": "A" }],
"fieldConfig": {
"defaults": {
"unit": "short",
"color": { "mode": "thresholds" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "red", "value": 1 }] }
},
"overrides": []
},
"options": { "graphMode": "none", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "auto" }
},
{
"id": 14,
"type": "stat",
"title": "Healing Drives (전체 pool/set 합계)",
"description": "minio_cluster_erasure_set_healing_drives_count 합계. 힐링 중에는 해당 세트 성능 저하가 정상적임 - 성능 이슈와 구분할 것",
"gridPos": { "h": 4, "w": 6, "x": 18, "y": 23 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(minio_cluster_erasure_set_healing_drives_count)", "legendFormat": "healing", "refId": "A" }],
"fieldConfig": {
"defaults": {
"unit": "short",
"color": { "mode": "thresholds" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }, { "color": "yellow", "value": 1 }] }
},
"overrides": []
},
"options": { "graphMode": "none", "reduceOptions": { "calcs": ["lastNotNull"] }, "textMode": "auto" }
},
{
"id": 103,
"type": "row",
"title": "2-1. 디스크 성능 - 분포 및 이상치 (Top-N)",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 },
"collapsed": false,
"panels": []
},
{
"id": 15,
"type": "histogram",
"title": "Drive API Latency 분포 (2560개 디스크 전체)",
"description": "minio_system_drive_api_latency_micros 값을 전체 디스크 기준으로 분포화. 개별 디스크를 나열하지 않고 '몇 개 디스크가 어느 지연 구간에 있는지'로 이상치를 한눈에 파악",
"gridPos": { "h": 9, "w": 12, "x": 0, "y": 28 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "minio_system_drive_api_latency_micros{server=~\"$server\"}",
"legendFormat": "{{server}}-{{drive}}",
"instant": true,
"format": "time_series",
"refId": "A"
}
],
"fieldConfig": { "defaults": { "unit": "µs" }, "overrides": [] },
"options": { "bucketSize": 500, "combine": true, "legend": { "showLegend": false } }
},
{
"id": 16,
"type": "timeseries",
"title": "Drive Latency - Max / Avg (클러스터 전체 추이)",
"description": "avg는 전반적 추세를, max는 최악의 디스크 1개가 어떻게 움직이는지를 보여줌 (outlier 조기 감지)",
"gridPos": { "h": 9, "w": 12, "x": 12, "y": 28 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "avg(minio_system_drive_api_latency_micros{server=~\"$server\"})", "legendFormat": "avg", "refId": "A" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "max(minio_system_drive_api_latency_micros{server=~\"$server\"})", "legendFormat": "max (worst drive)", "refId": "B" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "quantile(0.99, minio_system_drive_api_latency_micros{server=~\"$server\"})", "legendFormat": "p99", "refId": "C" }
],
"fieldConfig": { "defaults": { "unit": "µs", "custom": { "drawStyle": "line", "fillOpacity": 10, "showPoints": "never" } }, "overrides": [
{ "matcher": { "id": "byName", "options": "max (worst drive)" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } }] }
] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi" } }
},
{
"id": 17,
"type": "table",
"title": "Top-N 디스크 - I/O Error Rate",
"description": "minio_system_drive_io_errors_total 증가율 상위 디스크. 특정 디스크의 하드웨어 열화 후보",
"gridPos": { "h": 8, "w": 8, "x": 0, "y": 37 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk($topn, sum by (server, drive) (rate(minio_system_drive_io_errors_total{server=~\"$server\"}[5m])))",
"format": "table",
"instant": true,
"refId": "A"
}
],
"transformations": [
{ "id": "organize", "options": { "excludeByName": { "Time": true }, "renameByName": { "Value": "io_errors/s" } } },
{ "id": "sortBy", "options": { "fields": {}, "sort": [{ "field": "io_errors/s", "desc": true }] } }
],
"fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "color-background" } }, "unit": "short" }, "overrides": [] },
"options": { "showHeader": true }
},
{
"id": 18,
"type": "table",
"title": "Top-N 디스크 - Timeout Errors Rate",
"description": "minio_system_drive_timeout_errors_total 증가율 상위 디스크. I/O 응답 지연/과부하 후보",
"gridPos": { "h": 8, "w": 8, "x": 8, "y": 37 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk($topn, sum by (server, drive) (rate(minio_system_drive_timeout_errors_total{server=~\"$server\"}[5m])))",
"format": "table",
"instant": true,
"refId": "A"
}
],
"transformations": [
{ "id": "organize", "options": { "excludeByName": { "Time": true }, "renameByName": { "Value": "timeout_errors/s" } } },
{ "id": "sortBy", "options": { "fields": {}, "sort": [{ "field": "timeout_errors/s", "desc": true }] } }
],
"fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "color-background" } }, "unit": "short" }, "overrides": [] },
"options": { "showHeader": true }
},
{
"id": 19,
"type": "table",
"title": "Top-N 디스크 - Waiting I/O (현재)",
"description": "minio_system_drive_waiting_io 현재값 상위 디스크. 대기열이 쌓이는 디스크 = 병목 후보",
"gridPos": { "h": 8, "w": 8, "x": 16, "y": 37 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk($topn, minio_system_drive_waiting_io{server=~\"$server\"})",
"format": "table",
"instant": true,
"refId": "A"
}
],
"transformations": [
{ "id": "organize", "options": { "excludeByName": { "Time": true }, "renameByName": { "Value": "waiting_io" } } },
{ "id": "sortBy", "options": { "fields": {}, "sort": [{ "field": "waiting_io", "desc": true }] } }
],
"fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "color-background" } }, "unit": "short" }, "overrides": [] },
"options": { "showHeader": true }
},
{
"id": 20,
"type": "table",
"title": "Top-N 노드 - 평균 Drive Latency",
"description": "노드 내 20개 디스크 평균 지연시간 기준 상위 노드. 노드 단위 하드웨어/컨트롤러 이슈 식별용",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 45 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk($topn, avg by (server) (minio_system_drive_api_latency_micros{server=~\"$server\"}))",
"format": "table",
"instant": true,
"refId": "A"
}
],
"transformations": [
{ "id": "organize", "options": { "excludeByName": { "Time": true }, "renameByName": { "Value": "avg_latency_us" } } },
{ "id": "sortBy", "options": { "fields": {}, "sort": [{ "field": "avg_latency_us", "desc": true }] } }
],
"fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "color-background" } }, "unit": "µs" }, "overrides": [] },
"options": { "showHeader": true }
},
{
"id": 21,
"type": "table",
"title": "Top-N 노드 - Drive Availability Errors",
"description": "minio_system_drive_availability_errors_total (I/O 에러+타임아웃 종합) 노드 합산 기준 상위. 노드 단위 하드웨어 이슈 스크리닝",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 45 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk($topn, sum by (server) (rate(minio_system_drive_availability_errors_total{server=~\"$server\"}[5m])))",
"format": "table",
"instant": true,
"refId": "A"
}
],
"transformations": [
{ "id": "organize", "options": { "excludeByName": { "Time": true }, "renameByName": { "Value": "availability_errors/s" } } },
{ "id": "sortBy", "options": { "fields": {}, "sort": [{ "field": "availability_errors/s", "desc": true }] } }
],
"fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "color-background" } }, "unit": "short" }, "overrides": [] },
"options": { "showHeader": true }
},
{
"id": 104,
"type": "row",
"title": "2-2. 네트워크(Internode) - 노드별",
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 53 },
"collapsed": false,
"panels": []
},
{
"id": 22,
"type": "timeseries",
"title": "Internode TX/RX Bytes Rate (클러스터 합계)",
"description": "노드 간(erasure coding fan-out, replication 등) 송수신 트래픽 총량. 메트릭명은 배포 버전에 따라 접미사가 다를 수 있어 /minio/metrics/v3/system/network/internode?list 로 검증 권장",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 54 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(rate(minio_system_internode_tx_bytes_total{server=~\"$server\"}[5m]))", "legendFormat": "tx (sent)", "refId": "A" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "sum(rate(minio_system_internode_rx_bytes_total{server=~\"$server\"}[5m]))", "legendFormat": "rx (received)", "refId": "B" }
],
"fieldConfig": { "defaults": { "unit": "Bps", "custom": { "drawStyle": "line", "fillOpacity": 10, "showPoints": "never" } }, "overrides": [] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi" } }
},
{
"id": 23,
"type": "timeseries",
"title": "Internode Dial Avg Time - Avg / Max (노드 간)",
"description": "TCP dial 평균 소요시간의 클러스터 평균과 최악 노드. 급상승은 특정 노드 구간 네트워크 지연/포화 신호",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 54 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "avg(minio_system_internode_dial_avg_time_nanos{server=~\"$server\"})", "legendFormat": "avg", "refId": "A" },
{ "datasource": { "type": "prometheus", "uid": "${datasource}" }, "expr": "max(minio_system_internode_dial_avg_time_nanos{server=~\"$server\"})", "legendFormat": "max (worst node)", "refId": "B" }
],
"fieldConfig": { "defaults": { "unit": "ns", "custom": { "drawStyle": "line", "fillOpacity": 10, "showPoints": "never" } }, "overrides": [
{ "matcher": { "id": "byName", "options": "max (worst node)" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } }] }
] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi" } }
},
{
"id": 24,
"type": "table",
"title": "Top-N 노드 - Internode 호출 실패율",
"description": "minio_system_internode_errors_total 증가율 상위 노드. 특정 노드가 클러스터 전체 성능을 끌어내리는 병목 후보",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 62 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk($topn, sum by (server) (rate(minio_system_internode_errors_total{server=~\"$server\"}[5m])))",
"format": "table",
"instant": true,
"refId": "A"
}
],
"transformations": [
{ "id": "organize", "options": { "excludeByName": { "Time": true }, "renameByName": { "Value": "internode_errors/s" } } },
{ "id": "sortBy", "options": { "fields": {}, "sort": [{ "field": "internode_errors/s", "desc": true }] } }
],
"fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "color-background" } }, "unit": "short" }, "overrides": [] },
"options": { "showHeader": true }
},
{
"id": 25,
"type": "table",
"title": "Top-N 노드 - Internode Dial 타임아웃/에러율",
"description": "minio_system_internode_dial_errors_total 증가율 상위 노드. TCP 연결 자체의 문제로, 스위치/NIC 등 하드웨어 레벨 확인 필요",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 62 },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "topk($topn, sum by (server) (rate(minio_system_internode_dial_errors_total{server=~\"$server\"}[5m])))",
"format": "table",
"instant": true,
"refId": "A"
}
],
"transformations": [
{ "id": "organize", "options": { "excludeByName": { "Time": true }, "renameByName": { "Value": "dial_errors/s" } } },
{ "id": "sortBy", "options": { "fields": {}, "sort": [{ "field": "dial_errors/s", "desc": true }] } }
],
"fieldConfig": { "defaults": { "custom": { "align": "auto", "cellOptions": { "type": "color-background" } }, "unit": "short" }, "overrides": [] },
"options": { "showHeader": true }
}
]
}