26Y28p1

QK·2026년 7월 28일
{
  "__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
      }
    }
  ]
}
profile
engineer

0개의 댓글