Configura Cloud Trace para Go

Puedes habilitar Cloud Trace para aplicaciones de Go mediante OpenCensus. OpenCensus es un conjunto de bibliotecas de instrumentación para recopilar datos de seguimiento y de métricas que funcionan con varios backends. Para obtener los detalles más recientes sobre OpenCensus para Go, además de documentación y ejemplos adicionales, consulta opencensus-go.

Instala el paquete

Recupera el paquete de seguimiento de OpenCensus:

go get -u go.opencensus.io/trace

Configura el exportador de Stackdriver

Para exportar los datos de seguimiento recopilados, usa un exportador de Stackdriver:


import (
	"log"
	"os"

	"contrib.go.opencensus.io/exporter/stackdriver"
	"go.opencensus.io/trace"
)

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

Si estás ejecutando en la infraestructura de Google Cloud, no necesitas establecer el campo ProjectID en tu ID del proyecto de Google Cloud porque la biblioteca cliente para Go recopila de forma automática estos datos de un Servidor de metadatos de Google Cloud.

Si no se ejecuta en la infraestructura de Google Cloud, debes configurar el campo ProjectID en tu ID del proyecto de Google Cloud. En el código de ejemplo, se usa una variable de entorno y la aplicación se modificó para leer esta variable.

Configura la integración con Cloud Logging

Para obtener información sobre cómo enviar datos de Cloud Trace a Cloud Logging, consulta Integra con Cloud Logging.

Configura tu plataforma

Puedes usar Cloud Trace en Google Cloud y otras plataformas.

Ejecuta en Google Cloud

Cuando tu aplicación se ejecuta en Google Cloud, no necesitas proporcionar credenciales de autenticación en formato de una cuenta de servicio a la biblioteca cliente. Sin embargo, debes asegurarte de que tu Google Cloud Platform tenga habilitado el nivel de acceso a la API de Cloud Trace.

Para las siguientes opciones de configuración, la configuración predeterminada del permiso de acceso habilita la API de Cloud Trace:

  • Entorno flexible de App Engine
  • Entorno estándar de App Engine

  • Google Kubernetes Engine (GKE)

  • Compute Engine

Si usas niveles de acceso personalizados, debes asegurarte de que el nivel de acceso a la API de Cloud Trace esté habilitado. Para los usuarios gcloud, especifica los niveles de acceso con la marca --scopes y, además, incluye el nivel de acceso trace.append de la API de Cloud Trace. Por ejemplo, para crear un clúster de GKE solo con la API de Cloud Trace habilitada, haz lo siguiente:

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

Ejecuta de forma local y en otros lugares

Si tu aplicación se ejecuta fuera de Google Cloud, debes proporcionar credenciales de autenticación con el formato de una cuenta de servicio a la biblioteca cliente. La cuenta de servicio debe contener la función de Agente de Cloud Trace. Para obtener más instrucciones, consulta Cómo crear una cuenta de servicio.

Las bibliotecas cliente de Google Cloud usan credenciales predeterminadas de la aplicación (ADC) para encontrar las credenciales de tu aplicación. Para proporcionar estas credenciales, configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS:

Linux/macOS

    export GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key

Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key

PowerShell:

    $env:GOOGLE_APPLICATION_CREDENTIALS="path-to-your-service-accounts-private-key"

Aplicación de Trace de muestra para Go


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

import (
	"log"
	"net/http"
	"os"

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

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

	// By default, traces will be sampled relatively rarely. To change the
	// sampling frequency for your entire program, call ApplyConfig. Use a
	// ProbabilitySampler to sample a subset of traces, or use AlwaysSample to
	// collect a trace on every run.
	//
	// Be careful about using trace.AlwaysSample in a production application
	// with significant traffic: a new trace will be started and exported for
	// every request.
	trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})

	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://www.google.com", 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.
		resp, err := client.Do(req)
		if err != nil {
			log.Fatal(err)
		}
		// Because we don't read the resp.Body, need to manually call Close().
		resp.Body.Close()
	})
	http.Handle("/foo", handler)

	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}
	log.Printf("Listening on port %s", port)

	// Use an ochttp.Handler in order to instrument OpenCensus for incoming
	// requests.
	httpHandler := &ochttp.Handler{
		// Use the Google Cloud propagation format.
		Propagation: &propagation.HTTPFormat{},
	}
	if err := http.ListenAndServe(":"+port, httpHandler); err != nil {
		log.Fatal(err)
	}
}

Cómo ver los seguimientos

Después de la implementación, puedes ver los seguimientos en el visor de seguimientos de Cloud Console.

Ir a la página del Lector de seguimiento

Soluciona problemas

Para obtener información sobre cómo solucionar problemas con Cloud Trace, ve a la página de solución de problemas.

Recursos