Bruk ved etablering eller forbedring av observability i syfo-budstikka: Micrometer-metrikker og PrometheusMeterRegistry i Ktor, MicrometerMetrics-plugin, /internal/isalive|isready|prometheus, strukturert JSON-logging med trace_id/callId, korrelasjons-ID (Nav-Callid/x_request_id), OpenTelemetry-tracing, PromQL/LogQL, Grafana-dashboards og Prometheus-alerts i NAIS — eller når noen sier /observability-setup.
Installation
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Bruk ved etablering eller forbedring av observability i syfo-budstikka: Micrometer-metrikker og PrometheusMeterRegistry i Ktor, MicrometerMetrics-plugin, /internal/isalive|isready|prometheus, strukturert JSON-logging med trace_id/callId, korrelasjons-ID (Nav-Callid/x_request_id), OpenTelemetry-tracing, PromQL/LogQL, Grafana-dashboards og Prometheus-alerts i NAIS — eller når noen sier /observability-setup.
Observability i syfo-budstikka
Ktor 3.x på Netty, pakke no.nav.syfo, kjører i NAIS. Hold hovedreglene her korte — bruk references/ for fullstendige eksempler.
Metrikker forteller hva som skjer
Logger forklarer hvorfor det skjedde
Traces viser hvor i flyten det skjedde
Verifiser alltid eksisterende oppsett i repoet før du legger til nye målepunkter, labels eller varsler
Arbeidsflyt
Les NAIS-manifestet, src/main/resources/application.yaml, logback.xml og build.gradle.kts/gradle/libs.versions.toml for eksisterende observability-oppsett.
Finn etablerte mønstre for MicrometerMetrics, MeterRegistry-injeksjon (Koin), CallId/CallLogging, MDC-felt og health-routes.
Verifiser hvilke endepunkter NAIS faktisk scraper og prober mot: /internal/isalive, /internal/isready, /internal/prometheus (eller /internal/metrics). Stiene i koden må matche manifestet.
Start med standardmetrikker (Ktor HTTP-server + JVM) og utvid med domenemetrikker som gir operativ verdi.
Legg til dashboards og varsler først når metrikkene og label-settet er stabile.
Metrikker i Ktor (Micrometer)
Ktor har ingen Actuator. Opprett PrometheusMeterRegistry selv, installer MicrometerMetrics-pluginen, og eksponer registry-scrapet på en intern route. Hent samme registry videre via Koin der du måler domenehendelser.
MicrometerMetrics gir automatisk ktor_http_server_requests_seconds (count/sum/bucket) med tags for route, method og status.
Bruk distributionStatisticConfig med percentilesHistogram(true) hvis du trenger p95/p99 fra Prometheus.
liveness (/internal/isalive) skal være enkel og bare svare på om prosessen bør restartes. readiness (/internal/isready) skal avhenge av faktiske avhengigheter (Postgres-pool, Kafka-consumer) — men hold logikken lett.
Se references/micrometer.md for Counter/Timer/Gauge/DistributionSummary, Koin-injeksjon, domene- og Kafka-metrikker.
Navngivning for metrikker og labels
Metrikker
Bruk snake_case (Prometheus-konvensjon; Micrometer punkt-navn blir automatisk snake_case)
Bruk enhetssuffiks når det er relevant: _seconds, _bytes
Countere skal ha suffikset _total
Bruk navn som beskriver domenet, ikke camelCase eller miljøspesifikke navn
NAIS-label-konvensjoner
NAIS legger automatisk på et sett labels. Ikke dupliser disse på egne metrikker — bruk dem i queries, dashboards og varsler:
app — applikasjonsnavn fra NAIS-manifestet (syfo-budstikka)
team / namespace — eierskap og Kubernetes-namespace, brukes til alert-ruting
Foretrekk normaliserte route-verdier (/api/oppgaver/{id}), ikke ekspanderte path-parametre
Hver unik label-kombinasjon er en ny tidsserie: legg bare til labels som faktisk brukes i dashboards, varsler eller feilsøking
Korrelasjons-ID i NAV-stacken
Korrelasjons-ID lar deg følge en forespørsel på tvers av tjenester, Kafka-meldinger og logger. Repoet bruker allerede CallId/CallLogging (se kotlin-ktor-skillen) — bygg videre på det, ikke parallelt.
Headers
Nav-Callid — NAV-konvensjon; les inn og propager på alle utgående HTTP-kall og Kafka-headere
X-Request-Id / X-Correlation-ID — aksepter som fallback for eksterne integrasjoner
W3C traceparent — settes automatisk av OpenTelemetry-agenten i NAIS
Legg callId og trace_id på MDC slik at logback-encoderen automatisk får dem på alle logger i request-scope. Med OpenTelemetry-agenten kan du hente aktiv trace:
Inkluder trace_id, span_id og callId i loggene slik at Loki kan korrelere med Tempo (klikkbare trace-IDer i Grafana).
Logging og tracing
Logg strukturert JSON til stdout — NAIS-loki henter automatisk. Ikke skriv til fil.
Bruk logstash-logback-encoder med LogstashEncoder/net.logstash.logback.encoder i logback.xml; legg domenedata som strukturerte felt via StructuredArguments.kv(...), ikke via streng-interpolasjon.
Ikke bruk logging som erstatning for metrikker — metrikker svarer på frekvens, volum og varighet.
Bruk tracing for request-kjeder, Kafka-flyt og kall mot Postgres eller eksterne tjenester. Aktiver OpenTelemetry auto-instrumentation i NAIS før du legger til manuelle spans.
JSON-format for NAIS-loki
Én JSON-linje per logg på stdout. Felter Loki parser og indekserer:
Minimumsfelt: @timestamp, level, message. Legg domenedata i top-level felt (ikke nøstet under context). Automatiske Loki-labels (app, namespace, cluster, container, pod, stream) skal ikke dupliseres i payloaden. Aldri fnr, aktør-id, tokens eller andre særlige kategorier personopplysninger i loggen.
Grafana-dashboards for syfo-budstikka
Appen bør ha ett dashboard med disse panelene som baseline. Bruk app, namespace og cluster som template-variabler.