Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
frzifus committed Mar 11, 2024
1 parent 7d78b4c commit 361e8e1
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 52 deletions.
56 changes: 29 additions & 27 deletions 04-manual-instrumentation.md
@@ -1,40 +1,32 @@
# Manual instrumentation using the OpenTelemetry SDK

# Register Tracer
This tutorial section covers the manual instrumentation of a go application with the opentelemetry-sdk.

```go
var tracer = otel.GetTracerProvider().Tracer("github.com/kubecon-eu-2024/backend")
```
As a basis for the instrumentation we use [backend4](./app/backend4/main.go). To compile the application you need [go 1.22 or newer](https://go.dev/doc/install).

# Configure OpenTelemetry-go-sdk

# init
```diff
func main() {
+ otelExporter, err := otlptracegrpc.New(context.Background())
+ if err != nil {
+ fmt.Printf("failed to create trace exporter: %s\n", err)
+ os.Exit(1)
+ }
+ tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(otelExporter))
+ otel.SetTracerProvider(tp)
...
```

```go
var otlpAddr = flag.String("otlp-grpc", "", "default otlp/gRPC address, by default disabled. Example value: localhost:4317")
flag.Parse()
if *otlpAddr != "" {
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()

grpcOptions := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()}
conn, err := grpc.DialContext(ctx, *otlpAddr, grpcOptions...)
if err != nil {
fmt.Printf("failed to create gRPC connection to collector: %s\n", err)
os.Exit(1)
}
defer conn.Close()
## Create and register a global trace provider

// Set up a trace exporter
otelExporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithGRPCConn(conn))
if err != nil {
fmt.Printf("failed to create trace exporter: %s\n", err)
os.Exit(1)
}
tp := sdktrace.NewTracerProvider(sdktrace.WithSyncer(otelExporter))
otel.SetTracerProvider(tp)
}
```diff
+var tracer = otel.GetTracerProvider().Tracer("github.com/kubecon-eu-2024/backend")
```

## Identifying critical path and operations for instrumentation

```diff
mux.HandleFunc("GET /rolldice", func(w http.ResponseWriter, r *http.Request) {
+ var span trace.Span
Expand Down Expand Up @@ -76,6 +68,16 @@ func causeDelay(ctx context.Context, rate int) {
}
```

## Configuring an OTLP exporter and setting the endpoint

```bash
ocker run --rm -it -p 127.0.0.1:4317:4317 -p 127.0.0.1:16686:16686 -e COLLECTOR_OTLP_ENABLED=true -e LOG_LEVEL=debug jaegertracing/all-in-one:latest
```

```bash
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 OTEL_SERVICE_NAME=go-backend go run app/backend4/main.go
```

---

[Next steps](./05-sampling.md)
32 changes: 7 additions & 25 deletions app/backend4/main.go
Expand Up @@ -3,7 +3,6 @@ package main
import (
"context"
"crypto/sha256"
"flag"
"fmt"
"math/rand"
"net/http"
Expand All @@ -17,8 +16,6 @@ import (
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/trace"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)

var tracer = otel.GetTracerProvider().Tracer("github.com/kubecon-eu-2024/backend")
Expand Down Expand Up @@ -46,29 +43,14 @@ func init() {
}

func main() {
var otlpAddr = flag.String("otlp-grpc", "", "default otlp/gRPC address, by default disabled. Example value: localhost:4317")
flag.Parse()
if *otlpAddr != "" {
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()

grpcOptions := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()}
conn, err := grpc.DialContext(ctx, *otlpAddr, grpcOptions...)
if err != nil {
fmt.Printf("failed to create gRPC connection to collector: %s\n", err)
os.Exit(1)
}
defer conn.Close()

// Set up a trace exporter
otelExporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithGRPCConn(conn))
if err != nil {
fmt.Printf("failed to create trace exporter: %s\n", err)
os.Exit(1)
}
tp := sdktrace.NewTracerProvider(sdktrace.WithSyncer(otelExporter))
otel.SetTracerProvider(tp)
otelExporter, err := otlptracegrpc.New(context.Background())
if err != nil {
fmt.Printf("failed to create trace exporter: %s\n", err)
os.Exit(1)
}
tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(otelExporter))
otel.SetTracerProvider(tp)

v, ok := os.LookupEnv("ERROR_RATE")
if !ok {
v = "0"
Expand Down

0 comments on commit 361e8e1

Please sign in to comment.