mirror of
https://gitee.com/johng/gf
synced 2026-06-22 16:14:26 +08:00
111 lines
5.1 KiB
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()
|
|
}
|