Skip to content

Integrating with manual instrumentation

Automatic instrumentation already meets our needs in most scenarios, but manual instrumentation allows developers to have greater control over their projects.

Automatic instrumentation

Based on the example/demo, automatic instrumentation generates a trace where the HTTP service acts as the root span, with Redis and MySQL operations as child spans.

Combining with manual instrumentation

Manual instrumentation enables us to capture specific telemetry data. In example/demo/pkg/http.go we can add a manual span to the traceService() function that wraps database operations.

go
var tracer = otel.Tracer("otel-manual-instr")

func traceService(w http.ResponseWriter, r *http.Request) {
	_, span := tracer.Start(r.Context(), "db init")
	defer span.End()
    
    ...
}

And the generated trace in Jaeger is as follows.