Documentation
¶
Overview ¶
Package otel provides OpenTelemetry tracing, metrics, and logging initialization and utilities.
Index ¶
- Constants
- type DBDriverConfig
- type FrontendSpan
- type Provider
- func (p *Provider) Config() *config.OTelConfig
- func (p *Provider) DatabaseDriver(originalDriver string) string
- func (p *Provider) DatabaseTracingEnabled() bool
- func (p *Provider) IsEnabled() bool
- func (p *Provider) Logger(name string, opts ...otellog.LoggerOption) otellog.Logger
- func (p *Provider) LoggerProvider() otellog.LoggerProvider
- func (p *Provider) Meter(name string, opts ...metric.MeterOption) metric.Meter
- func (p *Provider) MeterProvider() metric.MeterProvider
- func (p *Provider) NewDBDriver(cfg DBDriverConfig) (*entsql.Driver, error)
- func (p *Provider) OpenDatabase(driverName, dataSourceName string) (*sql.DB, error)
- func (p *Provider) OpenEntDriver(driverName, dataSourceName string) (*entsql.Driver, error)
- func (p *Provider) ProxyHandler() http.HandlerFunc
- func (p *Provider) Shutdown(ctx context.Context) error
- func (p *Provider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer
- func (p *Provider) TracerProvider() trace.TracerProvider
- func (p *Provider) WrapEntDriver(drv *entsql.Driver, _ string) *entsql.Driver
- type SpanEvent
- type SpanStatus
- type TelemetryPayload
- type ZerologOTelHook
Constants ¶
const MaxTelemetryPayloadSize = 1024 * 1024 // 1MB
MaxTelemetryPayloadSize is the maximum size of telemetry payloads accepted by the proxy. This prevents denial-of-service attacks through excessively large payloads.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DBDriverConfig ¶
DBDriverConfig holds configuration for creating a traced database driver.
type FrontendSpan ¶
type FrontendSpan struct {
TraceID string `json:"traceId"`
SpanID string `json:"spanId"`
ParentSpanID string `json:"parentSpanId,omitempty"`
Name string `json:"name"`
Kind string `json:"kind,omitempty"`
StartTime int64 `json:"startTime"` // Unix milliseconds
EndTime int64 `json:"endTime"` // Unix milliseconds
Attributes map[string]interface{} `json:"attributes,omitempty"`
Status *SpanStatus `json:"status,omitempty"`
Events []SpanEvent `json:"events,omitempty"`
}
FrontendSpan represents a span sent from the frontend.
type Provider ¶
type Provider struct {
// contains filtered or unexported fields
}
Provider wraps the OpenTelemetry providers with additional functionality.
func NewProvider ¶
func NewProvider(ctx context.Context, cfg *config.OTelConfig, buildVersion string) (*Provider, error)
NewProvider creates a new OpenTelemetry provider based on the configuration. If OTel is disabled, returns a no-op provider that can still be used safely.
func (*Provider) Config ¶
func (p *Provider) Config() *config.OTelConfig
Config returns the OpenTelemetry configuration.
func (*Provider) DatabaseDriver ¶
DatabaseDriver returns the driver name to use for database connections. If tracing is enabled, this returns the instrumented driver name.
func (*Provider) DatabaseTracingEnabled ¶
DatabaseTracingEnabled returns true if database tracing is enabled.
func (*Provider) LoggerProvider ¶
func (p *Provider) LoggerProvider() otellog.LoggerProvider
LoggerProvider returns the underlying OpenTelemetry LoggerProvider.
func (*Provider) MeterProvider ¶
func (p *Provider) MeterProvider() metric.MeterProvider
MeterProvider returns the underlying OpenTelemetry MeterProvider.
func (*Provider) NewDBDriver ¶
func (p *Provider) NewDBDriver(cfg DBDriverConfig) (*entsql.Driver, error)
NewDBDriver creates a new database driver with optional tracing.
func (*Provider) OpenDatabase ¶
OpenDatabase opens a database connection with optional OpenTelemetry instrumentation. This wraps the standard sql.Open with tracing if enabled.
func (*Provider) OpenEntDriver ¶
OpenEntDriver opens an Ent SQL driver with optional OpenTelemetry instrumentation.
func (*Provider) ProxyHandler ¶
func (p *Provider) ProxyHandler() http.HandlerFunc
ProxyHandler handles telemetry data from the frontend. This forwards frontend telemetry data to the configured OTLP endpoint, allowing for distributed tracing across the full stack.
func (*Provider) TracerProvider ¶
func (p *Provider) TracerProvider() trace.TracerProvider
TracerProvider returns the underlying OpenTelemetry TracerProvider.
type SpanEvent ¶
type SpanEvent struct {
Name string `json:"name"`
Time int64 `json:"time"` // Unix milliseconds
Attributes map[string]interface{} `json:"attributes,omitempty"`
}
SpanEvent represents an event within a span.
type SpanStatus ¶
type SpanStatus struct {
Code string `json:"code"` // "ok", "error", "unset"
Message string `json:"message,omitempty"`
}
SpanStatus represents the status of a span.
type TelemetryPayload ¶
type TelemetryPayload struct {
ResourceAttributes map[string]interface{} `json:"resourceAttributes,omitempty"`
Spans []FrontendSpan `json:"spans"`
}
TelemetryPayload represents the payload sent from the frontend.
type ZerologOTelHook ¶
type ZerologOTelHook struct {
// contains filtered or unexported fields
}
ZerologOTelHook forwards zerolog events to OpenTelemetry logs.
func NewZerologOTelHook ¶
func NewZerologOTelHook(lp otellog.LoggerProvider, name string) *ZerologOTelHook
NewZerologOTelHook creates a new hook using the provided LoggerProvider and logger name.