Label each provider shutdown failure with its signal name (trace/metric/log). Errors remain joined via errors.Join; individual causes still unwrappable. Go directive bumped from 1.25 to 1.26. API committed as stable.
3.4 KiB
3.4 KiB
Changelog
All notable changes to this module will be documented in this file.
The format is based on Keep a Changelog, and this module adheres to Semantic Versioning.
1.0.0 - 2026-05-12
Changed
- Go directive bumped from 1.25 to 1.26
- Shutdown function now wraps each provider error with a
providerErrtype that prefixes the signal name ("telemetry: trace provider shutdown: …","telemetry: metric provider shutdown: …","telemetry: log provider shutdown: …"). The combined error is still joined witherrors.Join; individual causes remain unwrappable viaerrors.As. Previously, the three errors were joined without labels.
Stabilization
- API committed as stable.
Config,New, and the shutdown function signature (func(context.Context) error) are unchanged from v0.9.0.
0.9.0 - 2026-03-18
Added
Configstruct — holds OTel bootstrap configuration with env-tag support:ServiceName(OTEL_SERVICE_NAME, required),ServiceVersion(OTEL_SERVICE_VERSION, defaultunknown),Environment(OTEL_ENVIRONMENT, defaultdevelopment),OTLPEndpoint(OTEL_EXPORTER_OTLP_ENDPOINT, required),OTLPInsecure(OTEL_EXPORTER_OTLP_INSECURE, defaultfalse)New(ctx context.Context, cfg Config) (func(context.Context) error, error)— bootstraps the full OpenTelemetry SDK by creating three OTLP gRPC exporters and their corresponding SDK providers:TracerProvider(traces → Grafana Alloy → Tempo),MeterProvider(metrics → Grafana Alloy → Mimir), andLoggerProvider(logs → Grafana Alloy → Loki); sets all three OTel globals (otel.SetTracerProvider,otel.SetMeterProvider,global.SetLoggerProvider) and installs W3C TraceContext and Baggage as the global text map propagator; returns(shutdown, nil)on success or(nil, error)on failure with sequential rollback of any already-created providers- Shutdown function
func(context.Context) error— returned byNew; flushes and shuts down all three providers usingerrors.Join, allowing deferred call inmainor wiring into a launcherBeforeStophook - OTel resource construction — every signal is tagged with
service.name,service.version, anddeployment.environmentattributes, merged with the OTel SDK default resource (SDK version, process info, etc.) usingresource.Merge - Sequential error rollback — if the metric exporter fails after the trace exporter is created, the trace provider is shut down before returning the error; if the log exporter fails, both the trace and metric providers are shut down; the process never runs with a partial telemetry state
Design Notes
- This module is Tier 1 (no micro-lib dependencies) and must never be imported by framework libraries; those libraries use only the OTel API, which defaults to no-ops until
Newis called and sets the global providers - All three signals share a single OTLP gRPC endpoint, matching the standard Grafana LGTM stack topology where Grafana Alloy receives all signals and fans them out to Tempo, Mimir, and Loki
- The module intentionally does not implement
launcher.Component; the returned shutdown function is deferred directly inmain, keeping the dependency graph free oflauncherand the interface as simple as a single function call