Files
gf/example/trace/provider/http/main.go

111 lines
5.1 KiB
Go

// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
package main
import (
"context"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"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.24.0"
"github.com/gogf/gf/example/trace/provider/internal"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
serverIP, err = internal.GetLocalIP()
ctx = gctx.New()
)
if err != nil {
g.Log().Fatal(ctx, err)
}
var res *resource.Resource
if res, err = resource.New(ctx,
// WithFromEnv returns a resource option that sets the resource attributes from the environment.
resource.WithFromEnv(),
// WithProcess returns a resource option that sets the process attributes.
resource.WithProcess(),
// WithTelemetrySDK returns a resource option that sets the telemetry SDK attributes.
resource.WithTelemetrySDK(),
// WithHost returns a resource option that sets the host attributes.
resource.WithHost(),
// WithAttributes returns a resource option that sets the resource attributes.
resource.WithAttributes(
// The name of the service displayed on the traceback end。
semconv.ServiceNameKey.String(internal.HTTPServiceName),
// The IP address of the server.
semconv.HostNameKey.String(serverIP),
// The IP address of the server.
attribute.String(internal.TracerHostnameTagKey, serverIP),
),
// WithOS returns a resource option that sets the OS attributes.
resource.WithOS(),
// WithProcessPID returns a resource option that sets the process PID attribute.
resource.WithProcessPID(),
// For more parameters, please customize the selection
); err != nil {
g.Log().Fatal(ctx, err)
}
var exporter *otlptrace.Exporter
if exporter, err = otlptrace.New(ctx, otlptracehttp.NewClient(
// WithEndpoint returns an otlptracehttp.Option that sets the endpoint to which the exporter is going to send the spans.
otlptracehttp.WithEndpoint(internal.HTTPEndpoint),
// WithHeaders returns an otlptracehttp.Option that sets the headers to be sent with HTTP requests.
otlptracehttp.WithURLPath(internal.HTTPPath),
// WithInsecure returns an otlptracehttp.Option that disables secure connection to the collector.
otlptracehttp.WithInsecure(),
// WithCompression returns an otlptracehttp.Option that sets the compression level for the exporter.
otlptracehttp.WithCompression(1))); err != nil {
g.Log().Fatal(ctx, err)
}
var shutdown func(ctx context.Context)
// WithSampler sets the sampler for the trace provider.
// 1. AlwaysSample: AlwaysSample is a sampler that samples every trace.
// 2. NeverSample: NeverSample is a sampler that samples no traces.
// 3. ParentBased: ParentBased is a sampler that samples a trace based on the parent span.
// 4. TraceIDRatioBased: TraceIDRatioBased is a sampler that samples a trace based on the TraceID.
// WithResource sets the resource for the trace provider.
// WithSpanProcessor sets the span processor for the trace provider.
// 1. NewSimpleSpanProcessor: NewSimpleSpanProcessor returns a new SimpleSpanProcessor.
// 2. NewBatchSpanProcessor: NewBatchSpanProcessor returns a new BatchSpanProcessor.
// WithRawSpanLimits sets the raw span limits for the trace provider.
if shutdown, err = internal.InitTracer(
// WithSampler returns a trace option that sets the sampler for the trace provider.
// trace.WithSampler(trace.AlwaysSample()),
// trace.WithSampler(trace.NeverSample()),
// trace.WithSampler(trace.ParentBased(trace.AlwaysSample())),
// WithSampler returns a trace option that sets the sampler for the trace provider.
// 1. AlwaysSample: AlwaysSample is a sampler that samples every trace.
// 2. NeverSample: NeverSample is a sampler that samples no traces.
// 3. ParentBased: ParentBased is a sampler that samples a trace based on the parent span.
// 4. TraceIDRatioBased: TraceIDRatioBased is a sampler that samples a trace based on the TraceID.
trace.WithSampler(trace.TraceIDRatioBased(0.1)),
// WithResource returns a trace option that sets the resource for the trace provider.
trace.WithResource(res),
// WithSpanProcessor returns a trace option that sets the span processor for the trace provider.
// trace.WithSpanProcessor(trace.NewSimpleSpanProcessor(exporter)),
// trace.WithSpanProcessor(trace.NewBatchSpanProcessor(exporter)),
// 1. NewSimpleSpanProcessor: NewSimpleSpanProcessor returns a new SimpleSpanProcessor.
// 2. NewBatchSpanProcessor: NewBatchSpanProcessor returns a new BatchSpanProcessor.
trace.WithSpanProcessor(trace.NewBatchSpanProcessor(exporter)),
// WithRawSpanLimits returns a trace option that sets the raw span limits for the trace provider.
trace.WithRawSpanLimits(trace.NewSpanLimits()),
); err != nil {
g.Log().Fatal(ctx, err)
}
defer shutdown(ctx)
internal.StartRequests()
}