Release Notes v0.8.0¶
Release Date: March 2026
Highlights¶
- Unified Entry Point: New
omniobservepackage providing single entry point for observability with HTTP middleware - sloghandler package: New
slog.Handlerimplementation with dual output (local + remote) and automatic trace context injection - Dynatrace provider: Full Dynatrace observability support via OTLP
- SlogHandler integration: All observops providers now support
SlogHandler()for trace-correlated logging - Observability specs: New
specspackage for structured observability specifications (OpenSLO, RED metrics)
New Features¶
Unified Entry Point (Phase 4)¶
New omniobserve package provides a single entry point for all observability needs:
import (
"github.com/plexusone/omniobserve/omniobserve"
_ "github.com/plexusone/omniobserve/observops/otlp"
)
obs, _ := omniobserve.New("otlp",
omniobserve.WithServiceName("my-service"),
omniobserve.WithServiceVersion("1.0.0"),
omniobserve.WithEndpoint("localhost:4317"),
)
defer obs.Shutdown(ctx)
// HTTP middleware - auto-instruments requests
handler := obs.Middleware()(mux)
// Context utilities
logger := omniobserve.L(ctx) // Get logger with trace context
span := omniobserve.S(ctx) // Get current span
obs := omniobserve.O(ctx) // Get observability instance
// Automatic span management
err := omniobserve.Trace(ctx, "operation", func(ctx context.Context) error {
// Span automatically created and ended
return doWork(ctx)
})
Features:
- HTTP middleware: Auto-instruments requests with spans, metrics, trace ID propagation
- Context utilities:
L(),O(),S()shortcuts for logger, observability, span Trace()andTraceFunc[T](): Automatic span management with error recording- Skip paths: Health checks (
/health,/healthz, etc.) excluded by default - X-Trace-ID header: Trace ID propagation in response headers
sloghandler Package¶
A new standalone sloghandler package provides a unified slog.Handler with:
- Dual output: Send logs to both local console and remote observability backend
- Trace context injection: Automatic
trace_idandspan_idinjection from OpenTelemetry spans - Configurable levels: Different log levels for local vs remote output
- Attribute processors: Filter and transform log attributes
- Fanout handler: Multi-destination logging
import "github.com/plexusone/omniobserve/sloghandler"
handler := sloghandler.New(
sloghandler.WithLocalHandler(slog.NewJSONHandler(os.Stdout, nil)),
sloghandler.WithRemoteHandler(remoteHandler),
sloghandler.WithRemoteLevel(slog.LevelWarn),
sloghandler.WithIncludeTraceContext(true),
)
slog.SetDefault(slog.New(handler))
Dynatrace Provider¶
New Dynatrace observability provider using OTLP/HTTP:
import _ "github.com/plexusone/omniobserve/observops/dynatrace"
provider, _ := observops.Open("dynatrace",
observops.WithEndpoint("https://{env-id}.live.dynatrace.com/api/v2/otlp"),
observops.WithAPIKey("dt0c01.XXX.YYY"),
observops.WithServiceName("my-service"),
)
Features:
- Metrics, traces, and logs support
- SaaS, Managed, and ActiveGate endpoint formats
- API token authentication
- Automatic resource detection
SlogHandler on All Providers¶
All observops providers now implement SlogHandler():
// Works with otlp, datadog, newrelic, dynatrace
handler := provider.SlogHandler(
observops.WithSlogLocalHandler(slog.NewJSONHandler(os.Stdout, nil)),
observops.WithSlogRemoteLevel(slog.LevelInfo),
)
slog.SetDefault(slog.New(handler))
// Logs include trace_id and span_id automatically
slog.InfoContext(ctx, "request processed", "user_id", 123)
Observability Specs Package¶
New specs package for structured observability specifications:
- OpenSLO integration: Define SLOs/SLIs using OpenSLO standard
- RED metrics: Rate, Errors, Duration patterns for services
- Service classes: Pre-built templates for API, Worker, Database services
- JSON Schema generation: Generate schemas from Go types
import "github.com/plexusone/omniobserve/specs/openslo"
slo := openslo.NewAvailabilitySLO("api-availability", 0.999)
Added¶
omniobservepackage with unified entry point and HTTP middleware (4dac7c2)sloghandlerpackage with dual output and trace context injection (38ca9cc)observops/dynatraceprovider for Dynatrace via OTLP (f671b7f)SlogHandler()method on all observops providers (a5f157a)SlogOptionandSlogConfigtypes for handler configuration (afd573e)specspackage with OpenSLO, RED metrics, and service classes (621ad2a)cmd/genspecsCLI for JSON Schema generation (00eaf6f)- Provider documentation in
docs/providers/(c1dfba6)
Build¶
Dependencies¶
- Added
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp - Added
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp - Added
github.com/OpenSLO/go-sdkfor OpenSLO support - Added
github.com/invopop/jsonschemafor schema generation - Updated OpenTelemetry SDK to v1.42.0