{
"__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": "cluster",
"type": "query",
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"query": "label_values(minio_cluster_health_nodes_online_count, cluster)",
"label": "Cluster",
"hide": 0,
"includeAll": true,
"multi": true,
"allValue": ".*",
"current": {
"text": "All",
"value": "$__all"
},
"refresh": 2,
"sort": 1
},
{
"name": "server",
"type": "query",
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"query": "label_values(minio_system_drive_used_bytes{cluster=~\"$cluster\"}, 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{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", server=~\"$server\"}[5m])) / clamp_min(sum(rate(minio_api_requests_total{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", server=~\"$server\"}[5m])) + sum(rate(minio_api_requests_rejected_header_total{cluster=~\"$cluster\", server=~\"$server\"}[5m])) + sum(rate(minio_api_requests_rejected_timestamp_total{cluster=~\"$cluster\", server=~\"$server\"}[5m])) + sum(rate(minio_api_requests_rejected_invalid_total{cluster=~\"$cluster\", server=~\"$server\"}[5m])) + sum(rate(minio_api_requests_rejected_notimplemented_total{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", server=~\"$server\"}[5m]))",
"legendFormat": "auth",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "sum(rate(minio_api_requests_rejected_header_total{cluster=~\"$cluster\", server=~\"$server\"}[5m]))",
"legendFormat": "header",
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "sum(rate(minio_api_requests_rejected_timestamp_total{cluster=~\"$cluster\", server=~\"$server\"}[5m]))",
"legendFormat": "timestamp",
"refId": "C"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "sum(rate(minio_api_requests_rejected_invalid_total{cluster=~\"$cluster\", server=~\"$server\"}[5m]))",
"legendFormat": "invalid",
"refId": "D"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "sum(rate(minio_api_requests_rejected_notimplemented_total{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", server=~\"$server\"})",
"legendFormat": "incoming",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "sum(minio_api_requests_waiting_total{cluster=~\"$cluster\", server=~\"$server\"})",
"legendFormat": "waiting",
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "sum(minio_api_requests_inflight_total{cluster=~\"$cluster\", 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{cluster=~\"$cluster\"}",
"legendFormat": "online",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "minio_cluster_health_nodes_online_count{cluster=~\"$cluster\"} + minio_cluster_health_nodes_offline_count{cluster=~\"$cluster\"}",
"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{cluster=~\"$cluster\"}",
"legendFormat": "online",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "minio_cluster_health_drives_count{cluster=~\"$cluster\"}",
"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{cluster=~\"$cluster\"}",
"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{cluster=~\"$cluster\"})",
"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{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", server=~\"$server\"})",
"legendFormat": "avg",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "max(minio_system_drive_api_latency_micros{cluster=~\"$cluster\", server=~\"$server\"})",
"legendFormat": "max (worst drive)",
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "quantile(0.99, minio_system_drive_api_latency_micros{cluster=~\"$cluster\", 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 (cluster, server, drive) (rate(minio_system_drive_io_errors_total{cluster=~\"$cluster\", 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 (cluster, server, drive) (rate(minio_system_drive_timeout_errors_total{cluster=~\"$cluster\", 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{cluster=~\"$cluster\", 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 (cluster, server) (minio_system_drive_api_latency_micros{cluster=~\"$cluster\", 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 (cluster, server) (rate(minio_system_drive_availability_errors_total{cluster=~\"$cluster\", 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_network_internode_sent_bytes_total{cluster=~\"$cluster\", server=~\"$server\"}[5m]))",
"legendFormat": "tx (sent)",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "sum(rate(minio_system_network_internode_recv_bytes_total{cluster=~\"$cluster\", 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_network_internode_dial_avg_time_nanos{cluster=~\"$cluster\", server=~\"$server\"})",
"legendFormat": "avg",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "${datasource}"
},
"expr": "max(minio_system_network_internode_dial_avg_time_nanos{cluster=~\"$cluster\", 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_network_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 (cluster, server) (rate(minio_system_network_internode_errors_total{cluster=~\"$cluster\", 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_network_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 (cluster, server) (rate(minio_system_network_internode_dial_errors_total{cluster=~\"$cluster\", 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
}
}
]
}