opentelemetry/trace/main.go (45 lines of code) (raw):

// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // The trace command is an example of setting up OpenTelemetry to export traces to Google // Cloud Trace. package main // [START opentelemetry_trace_import] import ( "context" "errors" "log" "os" texporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace" "go.opentelemetry.io/contrib/detectors/gcp" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.24.0" ) // [END opentelemetry_trace_import] // [START opentelemetry_trace_main_function] func main() { // Create exporter. ctx := context.Background() projectID := os.Getenv("GOOGLE_CLOUD_PROJECT") exporter, err := texporter.New(texporter.WithProjectID(projectID)) if err != nil { log.Fatalf("texporter.New: %v", err) } // Identify your application using resource detection res, err := resource.New(ctx, // Use the GCP resource detector to detect information about the GCP platform resource.WithDetectors(gcp.NewDetector()), // Keep the default detectors resource.WithTelemetrySDK(), // Add your own custom attributes to identify your application resource.WithAttributes( semconv.ServiceNameKey.String("my-application"), ), ) if errors.Is(err, resource.ErrPartialResource) || errors.Is(err, resource.ErrSchemaURLConflict) { log.Println(err) } else if err != nil { log.Fatalf("resource.New: %v", err) } // Create trace provider with the exporter. // // By default it uses AlwaysSample() which samples all traces. // In a production environment or high QPS setup please use // probabilistic sampling. // Example: // tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.TraceIDRatioBased(0.0001)), ...) tp := sdktrace.NewTracerProvider( sdktrace.WithBatcher(exporter), sdktrace.WithResource(res), ) defer tp.Shutdown(ctx) // flushes any pending spans, and closes connections. otel.SetTracerProvider(tp) // [START opentelemetry_trace_custom_span] // Create custom span. tracer := otel.GetTracerProvider().Tracer("example.com/trace") err = func(ctx context.Context) error { ctx, span := tracer.Start(ctx, "foo") defer span.End() // Do some work. return nil }(ctx) // [END opentelemetry_trace_custom_span] } // [END opentelemetry_trace_main_function]