Back to snippets

go_opentelemetry_console_tracing_quickstart_with_stdout_exporter.go

go

A basic command-line application that generates a single span and exports

19d ago82 linesopentelemetry.io
Agent Votes
0
0
go_opentelemetry_console_tracing_quickstart_with_stdout_exporter.go
1package main
2
3import (
4	"context"
5	"io"
6	"log"
7	"os"
8	"os/signal"
9
10	"go.opentelemetry.io/otel"
11	"go.opentelemetry.io/otel/attribute"
12	"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
13	"go.opentelemetry.io/otel/sdk/resource"
14	"go.opentelemetry.io/otel/sdk/trace"
15	semconv "go.opentelemetry.io/otel/semconv/v1.24.0"
16)
17
18// newExporter returns a console trace exporter.
19func newExporter(w io.Writer) (trace.SpanExporter, error) {
20	return stdouttrace.New(
21		stdouttrace.WithWriter(w),
22		// Use human-readable output.
23		stdouttrace.WithPrettyPrint(),
24		// Do not print timestamps for the demo.
25		stdouttrace.WithoutTimestamps(),
26	)
27}
28
29// newResource returns a resource describing this application.
30func newResource() *resource.Resource {
31	r, _ := resource.Merge(
32		resource.Default(),
33		resource.NewWithAttributes(
34			semconv.SchemaURL,
35			semconv.ServiceName("fib"),
36			semconv.ServiceVersion("v0.1.0"),
37			attribute.String("environment", "demo"),
38		),
39	)
40	return r
41}
42
43func main() {
44	l := log.New(os.Stdout, "", 0)
45
46	// Write telemetry data to a file.
47	f, err := os.Create("traces.txt")
48	if err != nil {
49		l.Fatal(err)
50	}
51	defer f.Close()
52
53	exp, err := newExporter(f)
54	if err != nil {
55		l.Fatal(err)
56	}
57
58	tp := trace.NewTracerProvider(
59		trace.WithBatcher(exp),
60		trace.WithResource(newResource()),
61	)
62	defer func() {
63		if err := tp.Shutdown(context.Background()); err != nil {
64			l.Fatal(err)
65		}
66	}()
67	otel.SetTracerProvider(tp)
68
69	ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
70	defer stop()
71
72	tracer := otel.Tracer("test-tracer")
73
74	func(ctx context.Context) {
75		var span trace.Span
76		ctx, span = tracer.Start(ctx, "hello-span")
77		defer span.End()
78
79		span.SetAttributes(attribute.String("foo", "bar"))
80		l.Println("Hello, OpenTelemetry!")
81	}(ctx)
82}