mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 11:51:57 +00:00
80 lines
2.3 KiB
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")
|
|
}
|