"github.com/google/uuid"
"github.com/opentracing/opentracing-go"
"github.com/opentracing/opentracing-go/ext"
"go.opentelemetry.io/otel/attribute"
otbridge "go.opentelemetry.io/otel/bridge/opentracing"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
"go.opentelemetry.io/otel/sdk/resource"
"go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.10.0"
"google.golang.org/grpc/credentials/insecure"
func SendTrace(traceCnt int) {
endPoint := "tls-cn-beijing.volces.com"
region := "cn-shanghai"
httpHeaderProvider := InitTlsOtelTracerWithHttpHeader(endPoint, topicId, ak, sk, region)
tracer, _ := otbridge.NewTracerPair(httpHeaderProvider.Tracer("my_trace"))
for i := 0; i < traceCnt; i++ {
func sendTrace(ctx context.Context, tracer *otbridge.BridgeTracer) {
var OperationName []string
OperationName = append(OperationName, "Operation_1", "Operation_2", "Operation_3", "Operation_4", "Operation_5")
var last_span opentracing.Span
var span opentracing.Span
uid, _ := uuid.NewUUID()
index := strconv.Itoa(i)
span = spanInit(true, ctx, "test.span."+index, tracer, nil)
span = spanInit(false, ctx, "test.span"+index, tracer, last_span.Context())
ext.SpanKindRPCClient.Set(span)
ext.PeerService.Set(span, "tls-test-service")
"type", "cache timeout",
span.SetTag("uuid", uid.String())
span.SetBaggageItem("BaggageItem", "TLS test")
span.SetOperationName(OperationName[rand.Intn(4)])
span.FinishWithOptions(opentracing.FinishOptions{FinishTime: time.Now()})
fmt.Println("successful", i)
func spanInit(isRoot bool, context context.Context, span_name string, otTracer *otbridge.BridgeTracer, childOfSpanContext opentracing.SpanContext) opentracing.Span {
var span opentracing.Span
span, _ = opentracing.StartSpanFromContext(context, span_name+".root.span")
span = otTracer.StartSpan("TLS test", opentracing.ChildOf(childOfSpanContext))
func InitTlsOtelTracerWithHttpHeader(endPoint string, topicId string, ak string, sk string, region string) *trace.TracerProvider {
opts := []otlptracehttp.Option{otlptracehttp.WithEndpoint(endPoint + ":4318"),
otlptracehttp.WithHeaders(map[string]string{"x-tls-otel-tracetopic": topicId, "x-tls-otel-ak": ak, "x-tls-otel-sk": sk, "x-tls-otel-region": region})}
exporter, _ := otlptrace.New(
otlptracehttp.NewClient(opts...),
tp := trace.NewTracerProvider(
trace.WithBatcher(exporter),
trace.WithResource(resource.NewWithAttributes(
semconv.ServiceNameKey.String("your_service_name"),
func InitTlsOtelTracerWithHttpResource(endPoint string, topicId string, ak string, sk string, region string) *trace.TracerProvider {
traceTopicKey := attribute.Key("tls.otel.tracetopic")
akKey := attribute.Key("tls.otel.ak")
skKey := attribute.Key("tls.otel.sk")
regionKey := attribute.Key("tls.otel.region")
opts := []otlptracehttp.Option{otlptracehttp.WithEndpoint(endPoint + ":4318")}
exporter, _ := otlptrace.New(
otlptracehttp.NewClient(opts...),
tp := trace.NewTracerProvider(
trace.WithBatcher(exporter),
trace.WithResource(resource.NewWithAttributes(
semconv.ServiceNameKey.String("your_service_name"),
traceTopicKey.String(topicId),
regionKey.String(region),
func InitTlsOtelTracerWithGrpcHeader(endPoint string, topicId string, ak string, sk string, region string) *trace.TracerProvider {
exporter, _ := otlptrace.New(
otlptracegrpc.NewClient(otlptracegrpc.WithTLSCredentials(insecure.NewCredentials()), otlptracegrpc.WithEndpoint(endPoint+":4317"),
otlptracegrpc.WithHeaders(map[string]string{"x-tls-otel-tracetopic": topicId, "x-tls-otel-ak": ak, "x-tls-otel-sk": sk, "x-tls-otel-region": region})),
tp := trace.NewTracerProvider(
trace.WithBatcher(exporter),
trace.WithResource(resource.NewWithAttributes(
semconv.ServiceNameKey.String("your_service_name"),
func InitTlsOtelTracerWithGrpcResource(endPoint string, topicId string, ak string, sk string, region string) *trace.TracerProvider {
exporter, _ := otlptrace.New(
context.Background(), otlptracegrpc.NewClient(otlptracegrpc.WithTLSCredentials(insecure.NewCredentials()), otlptracegrpc.WithEndpoint(endPoint+":4317")),
traceTopicKey := attribute.Key("tls.otel.tracetopic")
akKey := attribute.Key("tls.otel.ak")
skKey := attribute.Key("tls.otel.sk")
regionKey := attribute.Key("tls.otel.region")
tp := trace.NewTracerProvider(
trace.WithBatcher(exporter),
trace.WithResource(resource.NewWithAttributes(
semconv.ServiceNameKey.String("your_service_name"),
traceTopicKey.String(topicId),
regionKey.String(region),