github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/tracing/jaeger.go (about)

     1  package tracing
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"go.opentelemetry.io/otel/exporters/trace/jaeger"
     7  	export "go.opentelemetry.io/otel/sdk/export/trace"
     8  )
     9  
    10  // Jaeger service to export traces to
    11  type Jaeger struct {
    12  	Endpoint string            `long:"jaeger-endpoint" description:"jaeger http-based thrift collector"`
    13  	Tags     map[string]string `long:"jaeger-tags"     description:"tags to add to the components"`
    14  	Service  string            `long:"jaeger-service"  description:"jaeger process service name" default:"web"`
    15  }
    16  
    17  // IsConfigured identifies if an endpoint has been set
    18  func (j Jaeger) IsConfigured() bool {
    19  	return j.Endpoint != ""
    20  }
    21  
    22  // Exporter returns a SpanExporter to sync spans to Jaeger
    23  func (j Jaeger) Exporter() (export.SpanSyncer, error) {
    24  	exporter, err := jaeger.NewRawExporter(
    25  		jaeger.WithCollectorEndpoint(j.Endpoint),
    26  		jaeger.WithProcess(jaeger.Process{
    27  			ServiceName: j.Service,
    28  			Tags:        keyValueSlice(j.Tags),
    29  		}),
    30  	)
    31  	if err != nil {
    32  		err = fmt.Errorf("failed to create jaeger exporter: %w", err)
    33  		return nil, err
    34  	}
    35  
    36  	return exporter, nil
    37  }