xpeditis2.0/infra/logging/grafana/provisioning/dashboards/xpeditis-logs.json
David 40d917e160
All checks were successful
CD Preprod / Backend — Lint (push) Successful in 10m22s
CD Preprod / Frontend — Lint & Type-check (push) Successful in 10m55s
CD Preprod / Backend — Unit Tests (push) Successful in 10m10s
CD Preprod / Frontend — Unit Tests (push) Successful in 10m34s
CD Preprod / Backend — Integration Tests (push) Successful in 9m57s
CD Preprod / Build Frontend (push) Successful in 47s
CD Preprod / Build Log Exporter (push) Successful in 33s
CD Preprod / Build Backend (push) Successful in 7m24s
CD Preprod / Deploy to Preprod (push) Successful in 24s
CD Preprod / Notify Failure (push) Has been skipped
CD Preprod / Notify Success (push) Successful in 2s
chore(ci): remove smoke tests from preprod and prod pipelines
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 20:13:17 +02:00

533 lines
17 KiB
JSON

{
"__inputs": [
{
"name": "DS_LOKI",
"label": "Loki",
"description": "Loki datasource",
"type": "datasource",
"pluginId": "loki",
"pluginName": "Loki"
}
],
"__requires": [
{ "type": "grafana", "id": "grafana", "name": "Grafana", "version": "11.0.0" },
{ "type": "datasource", "id": "loki", "name": "Loki", "version": "1.0.0" },
{ "type": "panel", "id": "stat", "name": "Stat", "version": "" },
{ "type": "panel", "id": "timeseries", "name": "Time series", "version": "" },
{ "type": "panel", "id": "piechart", "name": "Pie chart", "version": "" },
{ "type": "panel", "id": "bargauge", "name": "Bar gauge", "version": "" },
{ "type": "panel", "id": "logs", "name": "Logs", "version": "" }
],
"title": "Xpeditis — Logs & KPIs",
"uid": "xpeditis-logs-kpis",
"description": "Logs applicatifs, KPIs HTTP, temps de réponse et erreurs — Backend & Frontend",
"tags": ["xpeditis", "logs", "monitoring", "backend"],
"timezone": "Europe/Paris",
"refresh": "30s",
"schemaVersion": 39,
"time": { "from": "now-1h", "to": "now" },
"timepicker": {},
"graphTooltip": 1,
"editable": true,
"version": 1,
"links": [],
"annotations": { "list": [] },
"templating": {
"list": [
{
"name": "service",
"label": "Service",
"type": "query",
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"query": "label_values(service)",
"refresh": 2,
"includeAll": true,
"allValue": ".+",
"multi": true,
"current": {},
"hide": 0,
"sort": 1
},
{
"name": "level",
"label": "Niveau",
"type": "query",
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"query": "label_values(level)",
"refresh": 2,
"includeAll": true,
"allValue": ".+",
"multi": true,
"current": {},
"hide": 0,
"sort": 1
}
]
},
"panels": [
{
"id": 1,
"title": "Requêtes totales",
"type": "stat",
"gridPos": { "x": 0, "y": 0, "w": 6, "h": 4 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"reduceOptions": { "calcs": ["sum"], "fields": "", "values": false },
"orientation": "auto",
"textMode": "auto",
"colorMode": "background",
"graphMode": "none",
"justifyMode": "center"
},
"fieldConfig": {
"defaults": {
"color": { "mode": "fixed", "fixedColor": "#10183A" },
"unit": "short",
"thresholds": { "mode": "absolute", "steps": [{ "color": "#10183A", "value": null }] }
},
"overrides": []
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "sum(count_over_time({service=~\"$service\"} | json | req_method != \"\" [$__range]))",
"legendFormat": "Requêtes",
"instant": true,
"range": false,
"refId": "A"
}
]
},
{
"id": 2,
"title": "Erreurs (error + fatal)",
"type": "stat",
"gridPos": { "x": 6, "y": 0, "w": 6, "h": 4 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"reduceOptions": { "calcs": ["sum"], "fields": "", "values": false },
"orientation": "auto",
"textMode": "auto",
"colorMode": "background",
"graphMode": "none",
"justifyMode": "center"
},
"fieldConfig": {
"defaults": {
"color": { "mode": "fixed", "fixedColor": "red" },
"unit": "short",
"thresholds": { "mode": "absolute", "steps": [{ "color": "red", "value": null }] }
},
"overrides": []
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "sum(count_over_time({service=~\"$service\", level=~\"error|fatal\"} [$__range]))",
"legendFormat": "Erreurs",
"instant": true,
"range": false,
"refId": "A"
}
]
},
{
"id": 3,
"title": "Warnings",
"type": "stat",
"gridPos": { "x": 12, "y": 0, "w": 6, "h": 4 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"reduceOptions": { "calcs": ["sum"], "fields": "", "values": false },
"orientation": "auto",
"textMode": "auto",
"colorMode": "background",
"graphMode": "none",
"justifyMode": "center"
},
"fieldConfig": {
"defaults": {
"color": { "mode": "fixed", "fixedColor": "orange" },
"unit": "short",
"thresholds": { "mode": "absolute", "steps": [{ "color": "orange", "value": null }] }
},
"overrides": []
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "sum(count_over_time({service=~\"$service\", level=\"warn\"} [$__range]))",
"legendFormat": "Warnings",
"instant": true,
"range": false,
"refId": "A"
}
]
},
{
"id": 4,
"title": "Taux d'erreur",
"type": "stat",
"gridPos": { "x": 18, "y": 0, "w": 6, "h": 4 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false },
"orientation": "auto",
"textMode": "auto",
"colorMode": "background",
"graphMode": "none",
"justifyMode": "center"
},
"fieldConfig": {
"defaults": {
"unit": "percentunit",
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "orange", "value": 0.01 },
{ "color": "red", "value": 0.05 }
]
},
"color": { "mode": "thresholds" }
},
"overrides": []
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "sum(rate({service=~\"$service\", level=~\"error|fatal\"} [$__interval])) / sum(rate({service=~\"$service\"} [$__interval]))",
"legendFormat": "Taux d'erreur",
"instant": false,
"range": true,
"refId": "A"
}
]
},
{
"id": 5,
"title": "Trafic par service (req/s)",
"type": "timeseries",
"gridPos": { "x": 0, "y": 4, "w": 12, "h": 8 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "list", "placement": "bottom" }
},
"fieldConfig": {
"defaults": {
"unit": "reqps",
"color": { "mode": "palette-classic" },
"custom": {
"lineWidth": 2,
"fillOpacity": 10,
"gradientMode": "opacity",
"spanNulls": false
}
},
"overrides": []
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "sum by(service) (rate({service=~\"$service\"} | json | req_method != \"\" [$__interval]))",
"legendFormat": "{{service}}",
"instant": false,
"range": true,
"refId": "A"
}
]
},
{
"id": 6,
"title": "Erreurs & Warnings dans le temps",
"type": "timeseries",
"gridPos": { "x": 12, "y": 4, "w": 12, "h": 8 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "list", "placement": "bottom" }
},
"fieldConfig": {
"defaults": {
"unit": "short",
"color": { "mode": "palette-classic" },
"custom": {
"lineWidth": 2,
"fillOpacity": 15,
"gradientMode": "opacity"
}
},
"overrides": [
{
"matcher": { "id": "byName", "options": "error" },
"properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } }]
},
{
"matcher": { "id": "byName", "options": "fatal" },
"properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "dark-red" } }]
},
{
"matcher": { "id": "byName", "options": "warn" },
"properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "orange" } }]
}
]
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "sum by(level) (rate({service=~\"$service\", level=~\"error|fatal|warn\"} [$__interval]))",
"legendFormat": "{{level}}",
"instant": false,
"range": true,
"refId": "A"
}
]
},
{
"id": 7,
"title": "Temps de réponse Backend",
"type": "timeseries",
"gridPos": { "x": 0, "y": 12, "w": 16, "h": 8 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"tooltip": { "mode": "multi", "sort": "desc" },
"legend": { "displayMode": "list", "placement": "bottom" }
},
"fieldConfig": {
"defaults": {
"unit": "ms",
"color": { "mode": "palette-classic" },
"custom": {
"lineWidth": 2,
"fillOpacity": 8,
"gradientMode": "opacity"
},
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "orange", "value": 500 },
{ "color": "red", "value": 1000 }
]
}
},
"overrides": [
{
"matcher": { "id": "byName", "options": "Pire cas (1% des requêtes)" },
"properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } }]
},
{
"matcher": { "id": "byName", "options": "Lent (5% des requêtes)" },
"properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "orange" } }]
},
{
"matcher": { "id": "byName", "options": "Temps médian (requête typique)" },
"properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "#34CCCD" } }]
}
]
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "quantile_over_time(0.50, {service=\"backend\"} | json | responseTime > 0 | unwrap responseTime [$__interval])",
"legendFormat": "Temps médian (requête typique)",
"instant": false,
"range": true,
"refId": "A"
},
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "quantile_over_time(0.95, {service=\"backend\"} | json | responseTime > 0 | unwrap responseTime [$__interval])",
"legendFormat": "Lent (5% des requêtes)",
"instant": false,
"range": true,
"refId": "B"
},
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "quantile_over_time(0.99, {service=\"backend\"} | json | responseTime > 0 | unwrap responseTime [$__interval])",
"legendFormat": "Pire cas (1% des requêtes)",
"instant": false,
"range": true,
"refId": "C"
}
]
},
{
"id": 8,
"title": "Répartition par niveau de log",
"type": "piechart",
"gridPos": { "x": 16, "y": 12, "w": 8, "h": 8 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"pieType": "donut",
"tooltip": { "mode": "single" },
"legend": { "displayMode": "list", "placement": "bottom", "values": ["percent"] }
},
"fieldConfig": {
"defaults": { "unit": "short", "color": { "mode": "palette-classic" } },
"overrides": [
{ "matcher": { "id": "byName", "options": "error" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } }] },
{ "matcher": { "id": "byName", "options": "fatal" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "dark-red" } }] },
{ "matcher": { "id": "byName", "options": "warn" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "orange" } }] },
{ "matcher": { "id": "byName", "options": "info" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "#34CCCD" } }] },
{ "matcher": { "id": "byName", "options": "debug" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "blue" } }] }
]
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "sum by(level) (count_over_time({service=~\"$service\", level=~\"$level\"} [$__range]))",
"legendFormat": "{{level}}",
"instant": true,
"range": false,
"refId": "A"
}
]
},
{
"id": 9,
"title": "Codes HTTP (5m)",
"type": "bargauge",
"gridPos": { "x": 0, "y": 20, "w": 12, "h": 8 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"orientation": "horizontal",
"reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false },
"displayMode": "gradient",
"valueMode": "color",
"showUnfilled": true,
"minVizWidth": 10,
"minVizHeight": 10
},
"fieldConfig": {
"defaults": {
"unit": "short",
"color": { "mode": "palette-classic" },
"thresholds": {
"mode": "absolute",
"steps": [
{ "color": "green", "value": null },
{ "color": "orange", "value": 1 }
]
}
},
"overrides": []
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "sum by(status_code) (count_over_time({service=\"backend\"} | json | res_statusCode != \"\" | label_format status_code=\"{{res_statusCode}}\" [$__range]))",
"legendFormat": "HTTP {{status_code}}",
"instant": true,
"range": false,
"refId": "A"
}
]
},
{
"id": 10,
"title": "Top erreurs par contexte NestJS",
"type": "bargauge",
"gridPos": { "x": 12, "y": 20, "w": 12, "h": 8 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"orientation": "horizontal",
"reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false },
"displayMode": "gradient",
"showUnfilled": true
},
"fieldConfig": {
"defaults": {
"unit": "short",
"color": { "mode": "fixed", "fixedColor": "red" },
"thresholds": { "mode": "absolute", "steps": [{ "color": "red", "value": null }] }
},
"overrides": []
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "topk(10, sum by(context) (count_over_time({service=\"backend\", level=~\"error|fatal\"} | json | context != \"\" [$__range]) ))",
"legendFormat": "{{context}}",
"instant": true,
"range": false,
"refId": "A"
}
]
},
{
"id": 11,
"title": "Logs — Backend",
"type": "logs",
"gridPos": { "x": 0, "y": 28, "w": 24, "h": 12 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"dedupStrategy": "none",
"enableLogDetails": true,
"prettifyLogMessage": true,
"showCommonLabels": false,
"showLabels": false,
"showTime": true,
"sortOrder": "Descending",
"wrapLogMessage": false
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "{service=\"backend\", level=~\"$level\"}",
"legendFormat": "",
"instant": false,
"range": true,
"refId": "A",
"maxLines": 500
}
]
},
{
"id": 12,
"title": "Logs — Frontend",
"type": "logs",
"gridPos": { "x": 0, "y": 40, "w": 24, "h": 10 },
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"options": {
"dedupStrategy": "none",
"enableLogDetails": true,
"prettifyLogMessage": false,
"showCommonLabels": false,
"showLabels": false,
"showTime": true,
"sortOrder": "Descending",
"wrapLogMessage": false
},
"targets": [
{
"datasource": { "type": "loki", "uid": "${DS_LOKI}" },
"expr": "{service=\"frontend\"}",
"legendFormat": "",
"instant": false,
"range": true,
"refId": "A",
"maxLines": 200
}
]
}
]
}