Latences P50/P95/P99 : agrégation percentiles + fold
Extraction des percentiles au format de réponse Elasticsearch (objet lat.values) puis passage au format long avec fold pour tracer une ligne par percentile — données d'exemple inline.
Cas d'usage
Suivi de SLA de latence d'une API avec les trois percentiles de référence sur un seul graphe.
Prérequis
Kibana 7.10+, Elasticsearch
Vega-Lite
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"values": [
{ "key": "2026-06-08T09:00:00", "lat": { "values": { "50.0": 118, "95.0": 342, "99.0": 610 } } },
{ "key": "2026-06-08T09:10:00", "lat": { "values": { "50.0": 121, "95.0": 351, "99.0": 644 } } },
{ "key": "2026-06-08T09:20:00", "lat": { "values": { "50.0": 134, "95.0": 380, "99.0": 720 } } },
{ "key": "2026-06-08T09:30:00", "lat": { "values": { "50.0": 162, "95.0": 455, "99.0": 905 } } },
{ "key": "2026-06-08T09:40:00", "lat": { "values": { "50.0": 148, "95.0": 410, "99.0": 802 } } },
{ "key": "2026-06-08T09:50:00", "lat": { "values": { "50.0": 127, "95.0": 360, "99.0": 668 } } },
{ "key": "2026-06-08T10:00:00", "lat": { "values": { "50.0": 119, "95.0": 345, "99.0": 612 } } },
{ "key": "2026-06-08T10:10:00", "lat": { "values": { "50.0": 116, "95.0": 338, "99.0": 590 } } }
]
},
"transform": [
{ "calculate": "datum.lat.values['50.0']", "as": "p50" },
{ "calculate": "datum.lat.values['95.0']", "as": "p95" },
{ "calculate": "datum.lat.values['99.0']", "as": "p99" },
{ "fold": ["p50", "p95", "p99"], "as": ["percentile", "ms"] }
],
"mark": { "type": "line", "interpolate": "monotone" },
"encoding": {
"x": { "field": "key", "type": "temporal", "title": null },
"y": { "field": "ms", "type": "quantitative", "title": "Latence (ms)" },
"color": { "field": "percentile", "type": "nominal", "scale": { "range": ["#4caf50", "#ff9800", "#f44336"] } }
}
}KibanapercentilesfoldSLA