Developer Guide

Tracing helper library The library creates a configured tracer instance.

Tracelibgo Repo

git clone "https://gerrit.o-ran-sc.org/r/ric-plt/tracelibgo"

Usage

Create a tracer instance and set it as a global tracer:

import (
       "github.com/opentracing/opentracing-go"
       "gerrit.o-ran-sc.org/ric-plt/tracelibgo/pkg/tracelibgo"
       ...
)

tracer, closer := tracelibgo.CreateTracer("my-service-name")
defer closer.Close()
opentracing.SetGlobalTracer(tracer)

Serialize span context to a byte array that can be sent to another component via some messaging. For example, using the RMR library. The serialization uses JSON format.

carrier := make(map[string]string)
opentracing.GlobalTracer().Inject(
                span.Context(),
                opentracing.TextMap,
                opentracing.TextMapCarrier(carrier))
b, err := json.Marshal(carrier) // b is a []byte and contains serilized span context

Extract a span context from byte array and create a new child span from it.The serialized span context is got, for example, from the RMR library.

var carrier map[string]string
err = json.Unmarshal(data, &carrier) // data is []byte containing serialized span context
if err != nil {
        ...
}
context, err := opentracing.GlobalTracer().Extract(opentracing.TextMap, opentracing.TextMapCarrier(carrier))
if err != nil {
        ...
}
span := opentracing.GlobalTracer().StartSpan("go test span", opentracing.ChildOf(context))

Configuration

The trace library currently supports only [Jaeger](https://www.jaegertracing.io/) [golang client](https://github.com/jaegertracing/jaeger-client-go) tracer implementation. The configuration is done using environment variables:

environment variable

values

default

TRACING_ENABLED

1, true, 0, false

false

TRACING_JAEGER_SAMPLER_TYPE

const, propabilistic, ratelimiting

const

TRACING_JAEGER_SAMPLER_PARAM

float

0.001

TRACING_JAEGER_AGENT_ADDR

IP addr[:port]

127.0.0.1:6831

TRACING_JAEGER_LOG_LEVEL

all, error, none

none

Meaning of the configuration variables is described in Jaeger web pages. By default a no-op tracer is created.

Unit testing

GO111MODULE=on go mod download
go test ./pkg/tracelibgo