telemetry

package module
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Feb 23, 2022 License: MPL-2.0 Imports: 18 Imported by: 0

README

Telemetry

Module to assist in setting up OpenTelemetry integration for trace exporter.

Four exporter types are supported:

  • none: no output generated
  • stdout: output data directly to screen
  • file: output data to a local file
  • sumo: use grpc exporter to send data to sumo logic

Output to stdout and file are intended for development and testing use only, e.g. for testing output could be directed to /dev/null when testing code only and not concerned with actual outputs.

Configuration

When creating a new tracer, the type of exporter is specified by the Config.Mode.

  • For the file exporter Config.File must be specified
  • For the sumo exporter Config.Endpoint must be specified

Config.Attributes allows for a set of key value pairs to be set on the trace resource

Recommended attributes to set:

  • application, eg 'CaaS Seller', 'Caas File', 'TAP'
  • service.name
  • environment
Usage:

	tc := telemetry.Config{
		Mode: mode,
		Attributes: map[string]string{
			"service.name": s.env.Get(constants.VarAppName),
			"application":  telAppName,
			"environment":  s.env.Get(constants.VarAppEnv),
		},
	}

	switch mode {
	case telemetry.Sumo:
		tc.Endpoint = s.env.Get(constants.VarTelemetryEndpoint)
	case telemetry.File:
		fileName := s.env.Get(constants.VarTelemetryFile)
		fh, err := os.Create(fileName)
		if err != nil {
			l.Warn().Err(err).Str("file", fileName).Msg("Failed creating file")
		}
		s.traceFile = fh // track here, so we can close file on exit
		tc.File = fh
	default:
	}

	s.telemeter, err = telemetry.NewTracer(tc)
	if err != nil {
		l.Error().Err(err).Msg("Failed initialising telemetry tracer")
		return err
	}


Middleware

A middleware wrapper of the otlp gorilla/mux middleware to provide a urfave/negroni compatible middleware. If using gorilla/mux middleware directly, this should not be required.

Usage:
// mux middleware:

import "go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux"

func main() {
	router := mux.NewRouter()
	router.Use(otelmux.Middleware("appName"))
	...
}

// wrapped mux middleware:

import (
	"github.com/urfave/negroni"

	"gitlab.com/msts-public/general/gomods/telemetry"
)

func main() {
	router := mux.NewRouter()
	router.HandleFunc("/", BaseHandler)

	n := negroni.New(telemetry.NewMiddleware("appName"))
	n..UseHandler(router)
	...
}

Logger Hook

A logger hook is available to assist in adding error messages to the trace when logging errors.

Usage:

Example: adding hook to middleware logger

func (c *Logger) ServeHTTP(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {

	l := c.logger.With().Logger()

	span := trace.SpanFromContext(r.Context())
	if span != nil {
		th := telemetry.TraceHook{Span: span}
		l = l.Hook(th)
	}

	r = r.WithContext(l.WithContext(r.Context()))
	next(w, r)
}
References

Documentation

Index

Constants

View Source
const (
	StdOut = "stdout"
	Sumo   = "sumo"
	File   = "file"
	None   = "none"
)

package constants

Variables

This section is empty.

Functions

func FileExporter

func FileExporter(w io.Writer) (trace.SpanExporter, error)

FileExporter returns a file exporter.

func NewTracer

func NewTracer(c Config) (*trace.TracerProvider, error)

NewTracer -

func StdOutExporter

func StdOutExporter() (trace.SpanExporter, error)

StdOutExporter -

func SumoExporter

func SumoExporter(endpoint string) (trace.SpanExporter, error)

SumoExporter -

Types

type Config

type Config struct {
	Mode       string
	Endpoint   string
	File       io.Writer
	Attributes map[string]string
}

Config -

type Middleware

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

Middleware - wrapper to support urfave/negroni style middleware

func NewMiddleware

func NewMiddleware(name string, opts ...otelmux.Option) *Middleware

NewMiddleware -

func (*Middleware) ServeHTTP

func (mw *Middleware) ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc)

ServeHTTP -

type TraceHook

type TraceHook struct {
	Span trace.Span
}

TraceHook - hook to add error message to trace Note: when used in api middleware, the otelmux module will set the status based on the response code with

empty description, overwriting the status description set here

func (TraceHook) Run

func (h TraceHook) Run(e *zerolog.Event, level zerolog.Level, msg string)

Run -

Jump to

Keyboard shortcuts

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