Stackdriver Trace instellen voor Go

Stackdriver Trace kan worden gebruikt door Go-apps die het OpenCensus-pakket voor Go gebruiken.

De Go-ondersteuning van Stackdriver Trace wordt geleverd door OpenCensus, een set instrumentatiebibliotheken voor tracering en app-statistieken die werken met meerdere backends. De nieuwste informatie over OpenCensus voor Go, samen met aanvullende documentatie en voorbeelden, is te vinden op de GitHub-pagina.

Het pakket installeren

Wanneer u het OpenCensus-pakket wilt gebruiken, haalt u het op door de volgende opdracht uit te voeren:

go get -u go.opencensus.io

De Stackdriver Trace-exporter configureren

Gebruik de Stackdriver Trace-exporter om de verzamelde gegevens te exporteren. Exporter gebruikt de Application Default Credentials voor verificatie. U kunt de project-ID weglaten als uw code wordt uitgevoerd op Google Cloud Platform.

import (
  "contrib.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)

Uitgevoerd op Google Cloud Platform

De OpenCensus-clientbibliotheek zou moeten werken zonder handmatige invoer van verificatiegegevens voor VM-instanties die op Google Cloud Platform worden uitgevoerd, mits het toegangsbereik van de Stackdriver Trace API voor de instantie is ingeschakeld.

App Engine

In de flexibele Google App Engine-omgeving is het toegangsbereik van de Stackdriver Trace API standaard ingeschakeld, en de OpenCensus-clientbibliotheek kan worden gebruikt zonder gegevens of een project-ID te verstrekken.

Kubernetes Engine

Voeg op Google Kubernetes Engine het OAuth-bereik trace.append toe bij het maken van het cluster:

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

Compute Engine

Voor instanties van Google Compute Engine moet u het Stackdriver Trace API-toegangsbereik trace.append expliciet inschakelen voor elke instantie. Wanneer u via de Google Cloud Platform Console een nieuwe instantie maakt, kunt u dit doen onder Identiteit en API-toegang: gebruik het standaardaccount van Compute Engine en selecteer 'Volledige toegang tot alle Cloud API's toestaan' onder Toegangsbereik.

Als u iets anders dan het standaardserviceaccount van Compute Engine wilt gebruiken, raadpleegt u de documentatie voor het maken en inschakelen van serviceaccounts voor instanties en het gedeelte Elders uitvoeren hieronder. Het belangrijkste is dat het serviceaccount dat u gebruikt de rol Cloud Trace Agent heeft.

Voorbeeld van Stackdriver Trace-app voor Go

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

import (
	"log"
	"net/http"

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

De traceringen bekijken

Na de implementatie kunt u de traceringen in de Trace Viewer van de GCP-console bekijken.

Ga naar de pagina Trace Viewer.