Back to snippets
go_opentelemetry_console_tracing_quickstart_with_stdout_exporter.go
goA basic command-line application that generates a single span and exports
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}