go-srvc / mods / tracemod

github.com/go-srvc/mods/tracemod

pkg.go.dev source
go get github.com/go-srvc/mods/tracemod@v1.15.0

README

tracemod

tracemod exports spans to the otel endpoint and flushes buffers before the application exits. Once installed, any otel tracer in the process feeds into the same exporter.

package main

import (
	"fmt"
	"net/http"
	"os"

	"github.com/go-srvc/mods/httpmod"
	"github.com/go-srvc/mods/sigmod"
	"github.com/go-srvc/mods/tracemod"
	"github.com/go-srvc/srvc"
	"go.opentelemetry.io/otel"
)

func main() {
	srvc.RunAndExit(
		tracemod.New(),
		sigmod.New(os.Interrupt),
		httpmod.New(
			httpmod.WithAddr(":8080"),
			httpmod.WithHandler(http.HandlerFunc(hello)),
		),
	)
}

func hello(w http.ResponseWriter, r *http.Request) {
	_, span := otel.Tracer("hello").Start(r.Context(), "greet")
	defer span.End()
	fmt.Fprint(w, "hello, world")
}

Overview

Package tracemod provides OpenTelemetry trace provider as a module.

Constants

const (
	ErrMissingProvider = errStr("trace provider not set")
	ErrFlushFailed     = errStr("failed to flush remaining spans")
)
const ID = "tracemod"

Types

type Opt

type Opt func(*Provider) error

func WithEnv

func WithEnv() Opt

WithEnv uses OTEL_EXPORTER_OTLP_TRACES_PROTOCOL and OTEL_EXPORTER_OTLP_PROTOCOL environment variable to set exporter. Accepted values are:

  • http/protobuf
  • grpc
  • stdout

If no value is provided, stdout is used.

func WithGRPC

func WithGRPC() Opt

WithGRPC creates trace provider with batch span processor using grpc exporter from OTEL_* env configs. Env variables: https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc

func WithHTTP

func WithHTTP() Opt

WithHTTP creates trace provider with batch span processor using http exporter from OTEL_* env configs. Env variables: https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp

func WithPropagator

func WithPropagator(prop propagation.TextMapPropagator) Opt

WithPropagator allows setting custom text map propagator.

func WithProvider

func WithProvider(exp *trace.TracerProvider) Opt

WithProvider sets the underlying trace provider for module.

func WithProviderFn

func WithProviderFn(fn func() (*trace.TracerProvider, error)) Opt

WithProviderFn sets the underlying trace provider for module using given function.

func WithStdout

func WithStdout(opt ...stdouttrace.Option) Opt

WithStdout creates trace provider with stdout exporter.

type Provider

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

func New

func New(opts ...Opt) *Provider

New creates tracer provider module with sane defaults. Default options are: WithEnv.

func (*Provider) ID

func (p *Provider) ID() string

func (*Provider) Init

func (p *Provider) Init() error

func (*Provider) Run

func (p *Provider) Run() error

func (*Provider) Stop

func (p *Provider) Stop() error

Examples

ExampleNew

package main

import (
	"github.com/go-srvc/mods/tracemod"
	"github.com/go-srvc/srvc"
)

func main() {
	srvc.RunAndExit(
		tracemod.New(),
	)
}