Configuración de Stackdriver Trace para Go

Las aplicaciones de Go que usan el paquete de OpenCensus pueden utilizar Stackdriver Trace. Las aplicaciones de Go que se ejecutan en Google Cloud Platform, de manera local o en otro proveedor de servicios en la nube, pueden usar Trace.

OpenCensus, un conjunto de bibliotecas de métricas de seguimiento y aplicación que funcionan con varios backends, proporciona la asistencia de Go de Trace. En la página de GitHub encontrarás información actualizada sobre OpenCensus para Go, además de documentación y ejemplos adicionales.

Cómo instalar el paquete

A fin de usar el paquete de OpenCensus, puedes obtenerlo mediante la ejecución del siguiente comando:

go get -u go.opencensus.io/trace

Cómo configurar el exportador de Stackdriver Trace

Para exportar los datos recopilados, utiliza un exportador de Trace. El exportador de Trace utiliza las Credenciales predeterminadas de la aplicación para la autenticación. Puedes omitir el ID del proyecto si tu código se ejecuta en Google Cloud Platform. Debes proporcionar el ID del proyecto para el paquete de OpenCensus si tu aplicación se ejecuta fuera de GCP.

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)
}

Ejecución en Google Cloud Platform

No es necesario que proporciones credenciales de autenticación para las instancias que se ejecutan en Google Cloud Platform, siempre y cuando el nivel de acceso a la API de Stackdriver Trace esté habilitado en esa instancia. Sin embargo, recomendamos establecer el nivel de acceso más amplio posible para la instancia y, luego, usar Cloud Identity and Access Management a fin de restringir el acceso.

Entorno flexible de App Engine

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

Entorno estándar de App Engine

En el entorno estándar de App Engine, el nivel de acceso a la API de Stackdriver Trace está habilitado de forma predeterminada, y la biblioteca cliente de OpenCensus se puede usar sin proporcionar credenciales o un ID del proyecto.

Google Kubernetes Engine

En GKE, agrega el nivel de acceso de OAuth trace.append cuando crees el clúster:

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

No puedes cambiar los niveles de acceso del clúster una vez creado.

Compute Engine

Para las instancias de VM de Compute Engine, debes habilitar explícitamente el nivel de acceso a la API de Stackdriver Trace trace.append para cada instancia de VM. Cuando crees una instancia nueva con Google Cloud Platform Console, selecciona los siguientes valores en la sección Identidad y acceso a la API en el panel Crear una instancia:

  1. Selecciona Cuenta de servicio predeterminada de Compute Engine para Cuenta de servicio.
  2. Selecciona Permitir el acceso total a todas las API de Cloud para Niveles de servicio.

Para usar una cuenta que no sea la cuenta de servicio predeterminada de Compute Engine, consulta las secciones Cómo crear y habilitar cuentas de servicio para instancias y Cómo ejecutar de manera local y en otro lugar. Lo importante es que la cuenta de servicio que uses tenga la función de Agente de Cloud Trace.

Cómo ejecutar de manera local y en otro lugar

Para ejecutar Stackdriver Trace fuera de GCP, debes proporcionar tu ID del proyecto de GCP y las credenciales de la cuenta de servicio correspondiente directamente en la biblioteca cliente de OpenCensus. Si deseas obtener más información, consulta Cómo proporcionar credenciales a la aplicación.

ID del proyecto

Proporciona un ID del proyecto para OpenCensus cómo se muestra en Cómo configurar el exportador de Trace. Para configurar la variable del entorno GOOGLE_CLOUD_PROJECT, sigue estos pasos:

Linux o macOS

export GOOGLE_CLOUD_PROJECT=your-project-id

Windows

set GOOGLE_CLOUD_PROJECT=your-project-id

PowerShell:

$env:GOOGLE_CLOUD_PROJECT="your-project-id"

Credenciales

Las bibliotecas cliente de GCP usan las Credenciales predeterminadas de la aplicación (ADC) para encontrar las credenciales de tu aplicación. Proporciona las credenciales para la biblioteca cliente de OpenCensus mediante el establecimiento de 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"

Muestra de la aplicación de Stackdriver Trace 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)

	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{}))
}

Cómo ver los seguimientos

Después de la implementación, puedes ver los seguimientos en el lector de seguimiento de GCP Console.

Ir a la página del Lector de seguimiento

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.