rjasonadams / uptrace-go

OpenTelemetry Go distribution for Uptrace

Home Page:https://uptrace.dev/get/uptrace-go.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Uptrace for Go

build workflow PkgGoDev Documentation Chat

Introduction

uptrace-go is an OpenTelemery Go distribution configured to export traces and metrics to Uptrace.

Quickstart

Install uptrace-go:

go get github.com/uptrace/uptrace-go

Run the basic example below using the DSN from the Uptrace project settings page.

package main

import (
	"context"
	"errors"
	"fmt"

	"go.opentelemetry.io/otel"
	"go.opentelemetry.io/otel/attribute"

	"github.com/uptrace/uptrace-go/uptrace"
)

func main() {
	ctx := context.Background()

	// Configure OpenTelemetry with sensible defaults.
	uptrace.ConfigureOpentelemetry(
		// copy your project DSN here or use UPTRACE_DSN env var
		// uptrace.WithDSN("https://<key>@uptrace.dev/<project_id>"),

		uptrace.WithServiceName("myservice"),
		uptrace.WithServiceVersion("1.0.0"),
	)
	// Send buffered spans and free resources.
	defer uptrace.Shutdown(ctx)

	// Create a tracer. Usually, tracer is a global variable.
	tracer := otel.Tracer("app_or_package_name")

	// Create a root span (a trace) to measure some operation.
	ctx, main := tracer.Start(ctx, "main-operation")
	// End the span when the operation we are measuring is done.
	defer main.End()

	// The passed ctx carries the parent span (main).
	// That is how OpenTelemetry manages span relations.
	_, child1 := tracer.Start(ctx, "child1-of-main")
	child1.SetAttributes(attribute.String("key1", "value1"))
	child1.RecordError(errors.New("error1"))
	child1.End()

	_, child2 := tracer.Start(ctx, "child2-of-main")
	child2.SetAttributes(attribute.Int("key2", 42), attribute.Float64("key3", 123.456))
	child2.End()

	fmt.Printf("trace: %s\n", uptrace.TraceURL(main))
}

Links

About

OpenTelemetry Go distribution for Uptrace

https://uptrace.dev/get/uptrace-go.html

License:BSD 2-Clause "Simplified" License


Languages

Language:Go 85.4%Language:HCL 9.2%Language:Shell 4.2%Language:Makefile 1.1%Language:Procfile 0.0%Language:Ruby 0.0%