Zum Inhalt springen

Observability

Konfiguration von Logging, Metriken und verteiltem Tracing für Wippy-Anwendungen.

Wippy bietet drei Observability-Säulen, die beim Start konfiguriert werden:

SäuleBackendKonfiguration
LoggingZap (JSON strukturiert)logger und logmanager
MetrikenPrometheusprometheus
TracingOpenTelemetryotel
logger:
encoding: json # json oder console

Level und Ausgabe werden über CLI-Flags (-v, -c, -s) gesteuert — nur encoding wird aus der YAML-Datei gelesen.

Der Log-Manager steuert Log-Propagierung und Event-Streaming:

logmanager:
propagate_downstream: true # An Kindkomponenten propagieren
stream_to_events: false # Logs an Event-Bus weiterleiten
min_level: -1 # -1=debug (Standard), 0=info, 1=warn, 2=error

Wenn stream_to_events aktiviert ist, werden Log-Einträge zu Events, die Prozesse über den Event-Bus abonnieren können.

Logs, die aus Lua über das Logger-Modul ausgegeben werden, enthalten automatisch:

  • pid - Aktuelle Prozess-PID
  • location - Entry-ID und aufrufende Zeile (z.B. app.api:handler:45)
prometheus:
enabled: true
address: "localhost:9090"

Metriken werden unter /metrics auf der konfigurierten Adresse bereitgestellt.

prometheus.yml
scrape_configs:
- job_name: 'wippy'
static_configs:
- targets: ['localhost:9090']
scrape_interval: 15s

Für die Lua-Metriken-API siehe Metriken-Modul.

OTEL bietet verteiltes Tracing und optionalen Metrik-Export.

otel:
enabled: true
endpoint: "localhost:4318"
protocol: http/protobuf # grpc oder http/protobuf
service_name: my-app
service_version: "1.0.0"
insecure: false # Nicht-TLS-Verbindungen erlauben
sample_rate: 1.0 # 0.0 bis 1.0
traces_enabled: true
metrics_enabled: false
propagators:
- tracecontext
- baggage

Tracing für bestimmte Komponenten aktivieren:

otel:
enabled: true
endpoint: "localhost:4318"
service_name: my-app
# HTTP-Request-Tracing
http:
enabled: true
extract_headers: true # Eingehenden Trace-Kontext lesen
inject_headers: true # Ausgehenden Trace-Kontext schreiben
# Prozess-Lebenszyklus-Tracing
process:
enabled: true
trace_lifecycle: true # Spawn/Exit-Events tracen
# Queue-Nachrichten-Tracing
queue:
enabled: true
# Funktionsaufruf-Tracing
interceptor:
enabled: true
order: 0 # Interceptor-Ausführungsreihenfolge

Tracing für Temporal-Workflows aktivieren:

otel:
enabled: true
endpoint: "localhost:4318"
service_name: my-app
temporal:
enabled: true

Wenn aktiviert, wird der Tracing-Interceptor des Temporal SDK sowohl für Client- als auch Worker-Operationen registriert.

Getracete Operationen:

  • Workflow-Starts und -Abschlüsse
  • Activity-Ausführungen
  • Kind-Workflow-Aufrufe
  • Signal- und Query-Behandlung
KomponenteSpan-NameAttribute
HTTP-Requests{METHOD} {route}http.method, http.url, http.host
FunktionsaufrufeFunktions-IDprocess.pid, frame.id
Prozess-Lebenszyklus{source}.started/terminatedprocess.pid
Queue-NachrichtenNachrichten-TopicTrace-Kontext in Headern
Temporal-WorkflowsWorkflow/Activity-Nameworkflow.id, run.id

Trace-Kontext propagiert automatisch:

  • HTTP → Funktion: W3C Trace Context Header
  • Funktion → Funktion: Frame-Kontext-Vererbung
  • Prozess → Prozess: Spawn-Kontext
  • Queue publish → consume: Nachrichten-Header

OTEL kann über Umgebungsvariablen konfiguriert werden:

VariableBeschreibung
OTEL_SDK_DISABLEDAuf true setzen um OTEL zu deaktivieren
OTEL_EXPORTER_OTLP_ENDPOINTCollector-Endpunkt
OTEL_EXPORTER_OTLP_PROTOCOLgrpc oder http/protobuf
OTEL_SERVICE_NAMEDienstname
OTEL_SERVICE_VERSIONDienstversion
OTEL_TRACES_SAMPLER_ARGSample-Rate (0.0-1.0)
OTEL_PROPAGATORSPropagator-Liste

Das system-Modul bietet interne Runtime-Statistiken:

local system = require("system")
-- Speicherstatistiken
local mem = system.memory.stats()
-- mem.alloc, mem.heap_alloc, mem.heap_objects, etc.
-- Goroutine-Anzahl
local count = system.runtime.goroutines()
-- Supervisor-Zustände
local states = system.supervisor.states()