Configurar Stackdriver Trace para aplicaciones Go

Las aplicaciones Go pueden usar Stackdriver Trace con el paquete OpenCensus para Go.

Instalar el paquete

Si quieres usar el paquete OpenCensus, consíguelo al ejecutar el siguiente comando:

go get -u go.opencensus.io

Configurar el exportador de Stackdriver Trace

Si quieres exportar los datos recopilados, usa un exportador de Stackdriver Trace. El exportador usa las credenciales de aplicación predeterminadas para la autenticación. Puedes omitir la ID del proyecto si el código se está ejecutando en Google Cloud Platform.

import (
  "go.opencensus.io/exporter/stackdriver"
  "go.opencensus.io/trace"
)

exporter, err := stackdriver.NewExporter(stackdriver.Options{
  ProjectID: "google-cloud-project-id",
})
if err != nil {
  log.Fatal(err)
}
trace.RegisterExporter(exporter)

Ejecutar en Google Cloud Platform

La biblioteca cliente OpenCensus debería funcionar sin la necesidad de proporcionar manualmente credenciales de autenticación para las instancias de VM que se ejecutan en Google Cloud Platform, siempre y cuando el alcance de acceso de la API de Stackdriver Trace esté habilitado en esa instancia.

App Engine

En el entorno flexible de Google App Engine, el alcance de acceso de la API de Stackdriver Trace está habilitado de forma predeterminada, y la biblioteca cliente OpenCensus se puede usar sin necesidad de proporcionar credenciales o una ID del proyecto.

Kubernetes Engine

En Google Kubernetes Engine, agrega el alcance de acceso de OAuth trace.append al crear el clúster:

gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/trace.append

Compute Engine

Para las instancias de Google Compute Engine, se debe habilitar explícitamente el alcance de acceso de la API de Stackdriver Trace trace.append para cada instancia. Al crear una nueva instancia a través de la consola de Google Cloud Platform, puedes hacerlo en Acceso a la API e identidad. Usa la cuenta de servicio predeterminada de Compute Engine y selecciona "Permitir acceso completo a todas las API de Cloud" en los alcances de Acceso.

Para usar algo que no sea la cuenta de servicio predeterminada de Compute Engine, consulta los documentos para Crear y habilitar cuentas de servicio para instancias y la sección Ejecutar en otro lugar a continuación. Lo importante es que la cuenta de servicio que usas tenga la función de Agente de Cloud Trace.

Aplicación Stackdriver Trace de muestra para Go

// Sample trace_quickstart creates traces incoming and outgoing requests.
package main

import (
	"log"
	"net/http"

	"go.opencensus.io/exporter/stackdriver"
	"go.opencensus.io/exporter/stackdriver/propagation"
	"go.opencensus.io/plugin/ochttp"
	"go.opencensus.io/trace"
)

func main() {
	// Create an register a OpenCensus
	// Stackdriver Trace exporter.
	exporter, err := stackdriver.NewExporter(stackdriver.Options{
		ProjectID: "YOUR_PROJECT_ID",
	})
	if err != nil {
		log.Fatal(err)
	}
	trace.RegisterExporter(exporter)

	client := &http.Client{
		Transport: &ochttp.Transport{
			// Use Google Cloud propagation format.
			Propagation: &propagation.HTTPFormat{},
		},
	}

	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		req, _ := http.NewRequest("GET", "https://metadata/users", nil)

		// The trace ID from the incoming request will be
		// propagated to the outgoing request.
		req = req.WithContext(r.Context())

		// The outgoing request will be traced with r's trace ID.
		if _, err := client.Do(req); err != nil {
			log.Fatal(err)
		}
	})
	http.Handle("/foo", handler)
	log.Fatal(http.ListenAndServe(":6060", &ochttp.Handler{}))
}

Ver las trazas

Después de la implementación, se puede ver las trazas en el Visor de trazas de la consola de GCP.

Ir a la página del Visor de trazas