OpenTelemetry Integration for Go Applications

Głównym podejściem do integracji z produktem OpenTelemetry jest skonfigurowanie domyślnego eksportera OTLP dla dowolnej aplikacji, która jest monitorowana przez OpenTelemetry w celu wysłania swoich danych do agenta na Instana. Opis ten jest opisany na stronie OpenTelemetry .

Serverless OpenTelemetry Exporter

Moduł github.com/instana/go-otel-exporter oferuje eksporterowiOpenTelemetry , który przekształca i wysyła OpenTelemetry w tył na serwer Instana.

Program eksporterowy Instana Go OpenTelemetry jest przeznaczony przede wszystkim do użycia w środowiskach serwerowych, takich jak AWS Lambda lub AWS Fargate. Instana już obsługuje OpenTelemetry dla SaaS i samodzielne udostępniane rozwiązania za pośrednictwem agenta hosta. Jeśli jednak aplikacje Go działają w środowisku bez serwera, w którym agent nie jest obecny, serwer OpenTelemetry jest sposobem na przejście do serwera, który nie jest serwerem.

Aby użyć eksportera, zainstaluj moduł w projekcie, utwórz nową instancję eksportera z produktem instana.New() i dodaj go do dostawcy produktu Tracer.

Eksporter oczekuje dwóch zmiennych środowiskowych Instana , które muszą być udostępnione dla aplikacji:

  • INSTANA_AGENT_KEY
  • INSTANA_ENDPOINT_URL

Przykład pełnego wykorzystania eksportera jest opisany w następujący sposób:

package main

import (
	"context"
	"time"

	instana "github.com/instana/go-otel-exporter"
	"go.opentelemetry.io/otel"
	sdktrace "go.opentelemetry.io/otel/sdk/trace"
	"go.opentelemetry.io/otel/trace"
)

// This example application demonstrates how to use the Instana OTel Exporter.
// Make sure to provide the required environment variables before run the application:
// * INSTANA_ENDPOINT_URL
// * INSTANA_AGENT_KEY
func main() {
	ch := make(chan bool)
	// Acquire an instance of the Instana OTel Exporter
	exporter := instana.New()

	// Setup and bootstrap the tracer provider
	tracerProvider := sdktrace.NewTracerProvider(
		sdktrace.WithBatcher(exporter),
	)

	otel.SetTracerProvider(tracerProvider)

	ctx := context.Background()

	// Instrument something with OTel
	tracer := otel.Tracer("my-traced-tech")
	_, span := tracer.Start(ctx, "my_span", trace.WithSpanKind(trace.SpanKindServer))

	// This simulates the time that a span takes to be completed
	time.Sleep(time.Millisecond * 400)
	span.End()

	<-ch
}

Gdy aplikacja monitorowana przez program OpenTelemetry zostanie uruchomiona, eksporter Instana przekształci OpenTelemetry w spany na Instana i prześle je do punktu końcowego zaplecza.

Wizualizacja śledzenia OpenTelemetry będzie prezentowana w interfejsie użytkownika Instana, podobnie jak zwykłe śledziony na Instanie.