-
Release v1.0.0 Stable
released this
2026-05-29 10:10:18 -06:00 | 0 commits to main since this releasev1.0.0
code.nochebuena.dev/einherjar/telemetry
Architecture Decisions Resolved
Decision Outcome lifecycle.Component vs standalone bootstrap Standalone — telemetry must be initialized before the launcher and shut down after all components stop; Component lifecycle ordering cannot guarantee this Production exporter OTLP over gRPC — vendor-neutral; works with Grafana, Jaeger, Tempo, Datadog, Honeycomb Development mode Console exporter via logging.Logger— no collector required; integrates with structured log outputShutdown pattern Returns func(context.Context) error— caller defers it inmain(); clean shutdown flushes pending spans/metrics/logs
API
import "code.nochebuena.dev/einherjar/telemetry" // Package sentinel // Module identifies this package to observability systems. // telemetry bootstraps before the launcher and shuts down after — not a lifecycle component. // Register Module manually with any version registry if needed. var Module observability.Identifiable // Production config (OTLP over gRPC) type Config struct { ServiceName string `env:"EINHERJAR_OTEL_SERVICE_NAME,required"` ServiceVersion string `env:"EINHERJAR_OTEL_SERVICE_VERSION" envDefault:"unknown"` Environment string `env:"EINHERJAR_OTEL_ENVIRONMENT" envDefault:"development"` OTLPEndpoint string `env:"EINHERJAR_OTEL_EXPORTER_ENDPOINT,required"` OTLPInsecure bool `env:"EINHERJAR_OTEL_EXPORTER_INSECURE" envDefault:"false"` } func DefaultConfig() Config // Development config (console/structured log output) type ConsoleConfig struct { ServiceName string `env:"EINHERJAR_OTEL_SERVICE_NAME,required"` ServiceVersion string `env:"EINHERJAR_OTEL_SERVICE_VERSION" envDefault:"unknown"` Environment string `env:"EINHERJAR_OTEL_ENVIRONMENT" envDefault:"development"` } func DefaultConsoleConfig() ConsoleConfig // Bootstrap functions — call before launcher.Run(); defer the returned shutdown fn func New(ctx context.Context, cfg Config) (func(context.Context) error, error) func NewConsole(ctx context.Context, logger logging.Logger, cfg ConsoleConfig) (func(context.Context) error, error)Usage:
shutdown, err := telemetry.New(ctx, cfg) if err != nil { log.Fatal(err) } defer shutdown(ctx) lc := launcher.New(logger) lc.Append(db, cache, srv) lc.Run()
Install
go get code.nochebuena.dev/einherjar/telemetry@v1.0.0
Dependencies
Module Version Role code.nochebuena.dev/einherjar/contractsv1.0.0 logging.Loggercode.nochebuena.dev/einherjar/corev1.0.0 xerrorsgo.opentelemetry.io/otelv1.42.0 OTel API go.opentelemetry.io/otel/sdkv1.42.0 OTel SDK (tracer, meter, logger providers) go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcv1.42.0 OTLP gRPC trace exporter go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpcv1.42.0 OTLP gRPC metric exporter go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpcv0.18.0 OTLP gRPC log exporter Downloads