From 3a28d741e9d24504b001acd3f077567949e44989 Mon Sep 17 00:00:00 2001 From: "Zimin A.N." Date: Wed, 6 May 2026 11:10:33 +0300 Subject: [PATCH] =?UTF-8?q?feat(metrics):=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20percentiles-histogram=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20http.server.requests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spring Boot Micrometer по дефолту эмитит только _count/_sum/_max для http.server.requests — без _bucket нельзя посчитать histogram_quantile() в Prometheus, p50/p95/p99 latency дашборды получают "No data". Включён percentiles-histogram + кастомные SLO bucket boundaries от 5ms до 5s — покрывают realistic range read-api JSON endpoints. Server-side histograms точнее client-side percentiles (по которым нельзя aggregate across instances). Применить: build + push image + helm upgrade. После рестарта ordinis-app/read-api/projection-writer Grafana дашборды покажут latency графики. --- ordinis-app/src/main/resources/application.yml | 7 +++++++ .../src/main/resources/application.yml | 5 +++++ ordinis-read-api/src/main/resources/application.yml | 12 ++++++++++++ 3 files changed, 24 insertions(+) diff --git a/ordinis-app/src/main/resources/application.yml b/ordinis-app/src/main/resources/application.yml index e492271..cfca407 100644 --- a/ordinis-app/src/main/resources/application.yml +++ b/ordinis-app/src/main/resources/application.yml @@ -32,6 +32,13 @@ management: tags: application: ${spring.application.name} environment: ${ENVIRONMENT:dev} + distribution: + # Server-side histogram buckets для http.server.requests — нужны + # histogram_quantile() в Grafana p50/p95/p99 dashboards. + percentiles-histogram: + http.server.requests: true + slo: + http.server.requests: 5ms,10ms,25ms,50ms,100ms,250ms,500ms,1s,2s,5s otel: exporter: diff --git a/ordinis-projection-writer/src/main/resources/application.yml b/ordinis-projection-writer/src/main/resources/application.yml index 90f7b8d..39eac18 100644 --- a/ordinis-projection-writer/src/main/resources/application.yml +++ b/ordinis-projection-writer/src/main/resources/application.yml @@ -33,6 +33,11 @@ management: tags: application: ${spring.application.name} environment: ${ENVIRONMENT:dev} + distribution: + percentiles-histogram: + http.server.requests: true + slo: + http.server.requests: 5ms,10ms,25ms,50ms,100ms,250ms,500ms,1s,2s,5s logging: level: diff --git a/ordinis-read-api/src/main/resources/application.yml b/ordinis-read-api/src/main/resources/application.yml index 647d521..d398a90 100644 --- a/ordinis-read-api/src/main/resources/application.yml +++ b/ordinis-read-api/src/main/resources/application.yml @@ -31,6 +31,18 @@ management: tags: application: ${spring.application.name} environment: ${ENVIRONMENT:dev} + distribution: + # Включаем server-side histogram buckets для http.server.requests — + # без них histogram_quantile() в Prometheus возвращает empty + # (только _count/_sum/_max). Используется в Grafana dashboard + # ordinis-overview для p50/p95/p99 latency. + percentiles-histogram: + http.server.requests: true + # Service-level objectives bucket boundaries (на каких границах + # эмитить _bucket counters). Покрывают range от 5ms до 5s — типичный + # для read-api JSON endpoint. + slo: + http.server.requests: 5ms,10ms,25ms,50ms,100ms,250ms,500ms,1s,2s,5s otel: exporter: