1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-13 11:51:57 +00:00
srs/trunk/research/srs-apm-http1/main.go

80 lines
2.3 KiB
Go

package main
import (
"context"
"fmt"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/trace"
"os"
"time"
)
func initTraceProvider(ctx context.Context, endpoint, token string) (*sdktrace.TracerProvider, error) {
opts := []otlptracehttp.Option{
otlptracehttp.WithEndpoint(endpoint),
otlptracehttp.WithInsecure(),
}
exporter, err := otlptracehttp.New(ctx, opts...)
if err != nil {
return nil, err
}
r, err := resource.New(ctx, []resource.Option{
resource.WithAttributes(attribute.KeyValue{
Key: "token", Value: attribute.StringValue(token),
}),
resource.WithAttributes(attribute.KeyValue{
Key: "service.name", Value: attribute.StringValue("srs-server"),
}),
}...)
if err != nil {
return nil, err
}
tp := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithBatcher(exporter),
sdktrace.WithResource(r),
)
otel.SetTracerProvider(tp)
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
return tp, nil
}
func main() {
if os.Getenv("TOKEN") == "" {
panic("no env TOKEN, see https://console.cloud.tencent.com/apm/monitor/access")
}
// The gRPC client defaults to https://localhost:4317 and the HTTP client https://localhost:4318.
// See https://github.com/open-telemetry/opentelemetry-go/tree/main/exporters/otlp/otlptrace
endpoint := "ap-guangzhou.apm.tencentcs.com:55681"
fmt.Println(fmt.Sprintf("APM endpoint=%v, token=%vB", endpoint, len(os.Getenv("TOKEN"))))
ctx := context.Background()
if tp, err := initTraceProvider(ctx, endpoint, os.Getenv("TOKEN")); err != nil {
panic(err)
} else {
defer tp.Shutdown(ctx)
}
fmt.Println("init ok")
////////////////////////////////////////////////
// Create global tracer.
tracer := otel.Tracer("app")
ctx, span := tracer.Start(context.Background(), "main", trace.WithSpanKind(trace.SpanKindServer))
time.Sleep(100 * time.Millisecond)
defer span.End()
_, span2 := tracer.Start(ctx, "sub")
time.Sleep(70 * time.Millisecond)
span2.End()
fmt.Println("done")
}