grafana/pkg/tracing/tracing.go

117 lines
2.5 KiB
Go
Raw Normal View History

2017-09-11 01:42:52 -05:00
package tracing
import (
"io"
2017-09-14 12:01:22 -05:00
"strings"
2017-09-11 01:42:52 -05:00
"github.com/grafana/grafana/pkg/log"
"github.com/grafana/grafana/pkg/setting"
opentracing "github.com/opentracing/opentracing-go"
jaegercfg "github.com/uber/jaeger-client-go/config"
ini "gopkg.in/ini.v1"
)
var (
2017-09-15 02:27:47 -05:00
logger log.Logger = log.New("tracing")
2017-09-11 01:42:52 -05:00
)
type TracingSettings struct {
2017-09-15 02:27:47 -05:00
Enabled bool
Address string
CustomTags map[string]string
SamplerType string
2017-09-15 02:27:47 -05:00
SamplerParam float64
2017-09-11 01:42:52 -05:00
}
func Init(file *ini.File) (io.Closer, error) {
settings := parseSettings(file)
return internalInit(settings)
}
func parseSettings(file *ini.File) *TracingSettings {
settings := &TracingSettings{}
var section, err = setting.Raw.GetSection("tracing.jaeger")
2017-09-11 01:42:52 -05:00
if err != nil {
return settings
}
settings.Address = section.Key("address").MustString("")
if settings.Address != "" {
settings.Enabled = true
}
2017-09-15 02:27:47 -05:00
settings.CustomTags = splitTagSettings(section.Key("always_included_tag").MustString(""))
settings.SamplerType = section.Key("sampler_type").MustString("")
2017-09-15 02:27:47 -05:00
settings.SamplerParam = section.Key("sampler_param").MustFloat64(1)
2017-09-14 12:01:22 -05:00
2017-09-11 01:42:52 -05:00
return settings
}
func internalInit(settings *TracingSettings) (io.Closer, error) {
if !settings.Enabled {
return &nullCloser{}, nil
2017-09-11 01:42:52 -05:00
}
cfg := jaegercfg.Configuration{
Disabled: !settings.Enabled,
Sampler: &jaegercfg.SamplerConfig{
Type: settings.SamplerType,
2017-09-15 02:27:47 -05:00
Param: settings.SamplerParam,
2017-09-11 01:42:52 -05:00
},
Reporter: &jaegercfg.ReporterConfig{
LogSpans: false,
LocalAgentHostPort: settings.Address,
},
}
2017-09-15 02:58:50 -05:00
jLogger := &jaegerLogWrapper{logger: log.New("jaeger")}
2017-09-11 01:42:52 -05:00
2017-09-14 12:01:22 -05:00
options := []jaegercfg.Option{}
options = append(options, jaegercfg.Logger(jLogger))
2017-09-15 02:27:47 -05:00
for tag, value := range settings.CustomTags {
2017-09-14 12:01:22 -05:00
options = append(options, jaegercfg.Tag(tag, value))
}
tracer, closer, err := cfg.New("grafana", options...)
2017-09-11 01:42:52 -05:00
if err != nil {
return nil, err
}
opentracing.InitGlobalTracer(tracer)
2017-09-27 09:38:00 -05:00
logger.Info("Initializing Jaeger tracer", "address", settings.Address)
2017-09-11 01:42:52 -05:00
return closer, nil
}
2017-09-14 12:01:22 -05:00
func splitTagSettings(input string) map[string]string {
res := map[string]string{}
tags := strings.Split(input, ",")
for _, v := range tags {
kv := strings.Split(v, ":")
if len(kv) > 1 {
res[kv[0]] = kv[1]
}
}
return res
}
2017-09-15 02:58:50 -05:00
type jaegerLogWrapper struct {
logger log.Logger
}
func (jlw *jaegerLogWrapper) Error(msg string) {
jlw.logger.Error(msg)
}
func (jlw *jaegerLogWrapper) Infof(msg string, args ...interface{}) {
jlw.logger.Info(msg, args)
}
type nullCloser struct{}
func (*nullCloser) Close() error { return nil }