logbrewotel

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 29, 2026 License: MIT Imports: 12 Imported by: 0

README

logbrew/otel

Optional OpenTelemetry bridge for the LogBrew Go SDK.

Use this module only when your app already has OpenTelemetry Go installed and you want ended OTel spans or active OTel contexts to correlate with LogBrew events.

Install

go get github.com/LogBrewCo/sdk/go/logbrew/otel@v0.1.0

The base module stays separate:

go get github.com/LogBrewCo/sdk/go/logbrew

Span Exporter

package main

import (
  "context"

  "github.com/LogBrewCo/sdk/go/logbrew"
  logbrewotel "github.com/LogBrewCo/sdk/go/logbrew/otel"
  sdktrace "go.opentelemetry.io/otel/sdk/trace"
)

func main() {
  client, err := logbrew.NewClient(logbrew.Config{
    APIKey:     "LOGBREW_API_KEY",
    SDKName:    "checkout-api",
    SDKVersion: "0.1.0",
  })
  if err != nil {
    panic(err)
  }

  exporter, err := logbrewotel.NewSpanExporter(client, logbrewotel.SpanExporterConfig{
    EventIDPrefix: "checkout_otel",
    Metadata:      map[string]any{"service": "checkout-api"},
  })
  if err != nil {
    panic(err)
  }

  provider := sdktrace.NewTracerProvider(sdktrace.WithSpanProcessor(sdktrace.NewSimpleSpanProcessor(exporter)))
  defer provider.Shutdown(context.Background())
}

NewSpanExporter queues ended OTel spans into the app-owned LogBrew client. It records a stable operation such as http.server, the OTel span kind, instrumentation scope, allowed protocol attributes, and a bounded code location when OTel supplies one. It does not create global providers, own delivery transports, retry, or flush. Keep using client.Flush or client.Shutdown with an app-owned LogBrew transport.

Context Copy

trace, ok, err := logbrewotel.TraceContextFromContext(ctx, "b7ad6b7169203331")
if err != nil {
  panic(err)
}
if ok {
  ctx = logbrew.ContextWithLogBrewTrace(ctx, trace)
}

The bridge copies only valid OTel trace ID, span ID, and sampled flags into LogBrew child trace context. Invalid or absent OTel context returns ok=false without interrupting app work.

Privacy Boundary

The exporter keeps method, route, status, database system/operation, messaging system/operation, RPC service/method, exception type, semantic operation, span kind, instrumentation scope, span-link summaries, code function and namespace, source line, and only the source filename. It drops full source paths, full URLs, query strings, headers, cookies, payloads, SQL statements, exception messages, stacks, baggage, tracestate, and raw propagation values.

Documentation

Overview

Package logbrewotel adapts existing OpenTelemetry Go traces into LogBrew spans without making the root logbrew package own an OTel provider/exporter.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func TraceContextFromContext

func TraceContextFromContext(ctx context.Context, childSpanID string) (logbrew.TraceContext, bool, error)

TraceContextFromContext copies the active OpenTelemetry SpanContext from ctx into a LogBrew child trace context. It returns ok=false without error when no valid OTel span context is active.

func TraceContextFromSpanContext

func TraceContextFromSpanContext(spanContext oteltrace.SpanContext, childSpanID string) (logbrew.TraceContext, bool, error)

TraceContextFromSpanContext copies valid OpenTelemetry trace/span IDs and sampled flags into a LogBrew child trace context. Invalid OTel contexts are ignored, while invalid explicit child span IDs return a LogBrew validation error.

Types

type SpanExporter

type SpanExporter struct {
	// contains filtered or unexported fields
}

SpanExporter implements sdktrace.SpanExporter by queuing sanitized OpenTelemetry spans into an app-owned LogBrew client.

func NewSpanExporter

func NewSpanExporter(client *logbrew.Client, config SpanExporterConfig) (*SpanExporter, error)

NewSpanExporter returns an OpenTelemetry span exporter that converts ended OTel spans into LogBrew span events. It does not install a global provider, create transports, retry, flush, or capture raw propagation, headers, URLs, payloads, SQL statements, or exception messages.

func (*SpanExporter) ExportSpans

func (exporter *SpanExporter) ExportSpans(ctx context.Context, spans []sdktrace.ReadOnlySpan) error

ExportSpans converts ended OTel spans into LogBrew span events while honoring context cancellation. Retry and network delivery remain the caller's app-owned LogBrew Flush/Shutdown responsibility.

func (*SpanExporter) Shutdown

func (exporter *SpanExporter) Shutdown(ctx context.Context) error

Shutdown marks the exporter as closed. It does not flush the LogBrew client; callers should still use client.Flush or client.Shutdown with an app-owned transport.

type SpanExporterConfig

type SpanExporterConfig struct {
	// EventIDPrefix prefixes stable LogBrew span event IDs. Empty defaults to
	// go_otel.
	EventIDPrefix string
	// Metadata is merged into every exported span after primitive-only
	// filtering.
	Metadata map[string]any
	// Now supplies event timestamps. Empty defaults to time.Now().UTC.
	Now func() time.Time
}

SpanExporterConfig configures the optional OpenTelemetry span exporter.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL