You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(observability): identify the process in telemetry (version, instance id, roles) #772
Area: observability — gap · found during a backlog review
Expected: with several processes exporting telemetry (split api / ingest roles, replicas), every metric series, span and log record can be traced back to the process, its roles and the build it runs, and an operator can set the service name and resource attributes the standard OpenTelemetry way.
Actual:
The OpenTelemetry resource carries only service.name (internal/observability/provider.go:137-139), built with resource.New and no resource.WithFromEnv(), so OTEL_SERVICE_NAME and OTEL_RESOURCE_ATTRIBUTES are ignored; the name is the constant "wavehouse" (internal/app/wire.go:42).
instance_id exists (internal/config/config.go:30, defaulting to <hostname>-<8 hex>) and is the coord lease holder (internal/app/wire_nats.go:132), but it is only logged once at boot (internal/app/app.go:178), with the roles, and is on no metric, span or later log record.
Version, commit and build time reach log records only on the OTLP log path (wire.go:239-243); /version serves them over HTTP (Build Info & /version Endpoint #44), but there is no build_info-style metric, so which build each process runs isn't visible from metrics.
Impact: series and spans pushed over OTLP from two replicas of the same role are indistinguishable unless the collector adds its own instance attribute, and a mixed-version rollout can't be seen from dashboards.
Area: observability — gap · found during a backlog review
Expected: with several processes exporting telemetry (split
api/ingestroles, replicas), every metric series, span and log record can be traced back to the process, its roles and the build it runs, and an operator can set the service name and resource attributes the standard OpenTelemetry way.Actual:
service.name(internal/observability/provider.go:137-139), built withresource.Newand noresource.WithFromEnv(), soOTEL_SERVICE_NAMEandOTEL_RESOURCE_ATTRIBUTESare ignored; the name is the constant"wavehouse"(internal/app/wire.go:42).instance_idexists (internal/config/config.go:30, defaulting to<hostname>-<8 hex>) and is the coord lease holder (internal/app/wire_nats.go:132), but it is only logged once at boot (internal/app/app.go:178), with the roles, and is on no metric, span or later log record.wire.go:239-243);/versionserves them over HTTP (Build Info & /version Endpoint #44), but there is nobuild_info-style metric, so which build each process runs isn't visible from metrics.Impact: series and spans pushed over OTLP from two replicas of the same role are indistinguishable unless the collector adds its own instance attribute, and a mixed-version rollout can't be seen from dashboards.
Related: #44 (closed;
/version), #94.Found during a backlog review; validated by code-read against
origin/mainatafd76695on 2026-10-08.