tracing.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package tracing
  2. import (
  3. "io"
  4. "io/ioutil"
  5. "github.com/grafana/grafana/pkg/log"
  6. "github.com/grafana/grafana/pkg/setting"
  7. opentracing "github.com/opentracing/opentracing-go"
  8. jaeger "github.com/uber/jaeger-client-go"
  9. jaegercfg "github.com/uber/jaeger-client-go/config"
  10. jaegerlog "github.com/uber/jaeger-client-go/log"
  11. ini "gopkg.in/ini.v1"
  12. )
  13. var (
  14. logger log.Logger = log.New("tracing")
  15. )
  16. type TracingSettings struct {
  17. Enabled bool
  18. Address string
  19. }
  20. func Init(file *ini.File) (io.Closer, error) {
  21. settings := parseSettings(file)
  22. return internalInit(settings)
  23. }
  24. func parseSettings(file *ini.File) *TracingSettings {
  25. settings := &TracingSettings{}
  26. var section, err = setting.Cfg.GetSection("tracing.jaeger")
  27. if err != nil {
  28. return settings
  29. }
  30. settings.Address = section.Key("address").MustString("")
  31. if settings.Address != "" {
  32. settings.Enabled = true
  33. }
  34. return settings
  35. }
  36. func internalInit(settings *TracingSettings) (io.Closer, error) {
  37. if !settings.Enabled {
  38. return ioutil.NopCloser(nil), nil
  39. }
  40. cfg := jaegercfg.Configuration{
  41. Disabled: !settings.Enabled,
  42. Sampler: &jaegercfg.SamplerConfig{
  43. Type: jaeger.SamplerTypeConst,
  44. Param: 1,
  45. },
  46. Reporter: &jaegercfg.ReporterConfig{
  47. LogSpans: false,
  48. LocalAgentHostPort: settings.Address,
  49. },
  50. }
  51. jLogger := jaegerlog.StdLogger
  52. tracer, closer, err := cfg.New(
  53. "grafana",
  54. jaegercfg.Logger(jLogger),
  55. )
  56. if err != nil {
  57. return nil, err
  58. }
  59. logger.Info("Initialized jaeger tracer", "address", settings.Address)
  60. opentracing.InitGlobalTracer(tracer)
  61. return closer, nil
  62. }