{
  "uid": "otel-training-service",
  "title": "Vue service — Formation OTel",
  "tags": [
    "otel-training"
  ],
  "timezone": "browser",
  "schemaVersion": 39,
  "refresh": "30s",
  "time": {
    "from": "now-15m",
    "to": "now"
  },
  "templating": {
    "list": [
      {
        "name": "service_name",
        "label": "Service",
        "type": "query",
        "datasource": {
          "type": "prometheus",
          "uid": "webstore-metrics"
        },
        "query": "label_values(traces_span_metrics_calls_total, service_name)",
        "refresh": 2,
        "includeAll": false,
        "current": {
          "text": "review-service",
          "value": "review-service"
        }
      },
      {
        "name": "span_name",
        "label": "Opération",
        "type": "query",
        "datasource": {
          "type": "prometheus",
          "uid": "webstore-metrics"
        },
        "query": "label_values(traces_span_metrics_calls_total{service_name=~\"$service_name\"}, span_name)",
        "refresh": 2,
        "includeAll": true,
        "allValue": ".*",
        "multi": true,
        "current": {
          "text": "All",
          "value": "$__all"
        }
      }
    ]
  },
  "panels": [
    {
      "id": 1,
      "title": "Débit de spans — $service_name",
      "type": "timeseries",
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 0,
        "y": 0
      },
      "datasource": {
        "type": "prometheus",
        "uid": "webstore-metrics"
      },
      "targets": [
        {
          "refId": "A",
          "expr": "sum(rate(traces_span_metrics_calls_total{service_name=~\"$service_name\"}[2m]))",
          "legendFormat": "spans/s"
        }
      ]
    },
    {
      "id": 2,
      "title": "Latence p95 (ms) — $service_name",
      "type": "timeseries",
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 12,
        "y": 0
      },
      "datasource": {
        "type": "prometheus",
        "uid": "webstore-metrics"
      },
      "targets": [
        {
          "refId": "A",
          "expr": "topk(5, histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service_name\", span_name=~\"$span_name\"}[2m])) by (le, span_name)))",
          "legendFormat": "{{span_name}}"
        }
      ],
      "description": "Seuil à 20 ms, matérialisé en rouge : un repère de lecture, calibré sur le review-service, qui tourne à ~4 ms au repos. La requête calcule un p95 par opération (by span_name) et affiche les cinq plus lentes.",
      "fieldConfig": {
        "defaults": {
          "unit": "ms",
          "custom": {
            "thresholdsStyle": {
              "mode": "dashed+area"
            }
          },
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 20
              }
            ]
          }
        },
        "overrides": []
      }
    },
    {
      "id": 3,
      "title": "Logs — $service_name",
      "type": "logs",
      "gridPos": {
        "h": 9,
        "w": 12,
        "x": 0,
        "y": 8
      },
      "datasource": {
        "type": "grafana-opensearch-datasource",
        "uid": "webstore-logs"
      },
      "targets": [
        {
          "refId": "A",
          "query": "resource.service.name:\"$service_name\"",
          "queryType": "lucene",
          "metrics": [
            {
              "id": "1",
              "type": "logs"
            }
          ],
          "bucketAggs": []
        }
      ],
      "options": {
        "showTime": true,
        "wrapLogMessage": true,
        "sortOrder": "Descending"
      }
    },
    {
      "id": 4,
      "title": "Traces récentes — $service_name",
      "type": "table",
      "gridPos": {
        "h": 9,
        "w": 12,
        "x": 12,
        "y": 8
      },
      "datasource": {
        "type": "jaeger",
        "uid": "webstore-traces"
      },
      "targets": [
        {
          "refId": "A",
          "queryType": "search",
          "service": "$service_name",
          "limit": 20
        }
      ]
    }
  ]
}
