Como configurar o Stackdriver Trace para Go

O suporte Go do Trace é fornecido pelo OpenCensus, um conjunto de bibliotecas de instrumentação de métricas de aplicação e rastreamento que trabalham com vários back-ends. Veja os detalhes mais recentes sobre o OpenCensus para Go, além de documentação e exemplos adicionais na página do GitHub.

Como instalar o pacote

Execute o seguinte comando para recuperar o pacote de trace do OpenCensus:

go get -u go.opencensus.io/trace

Como configurar o exportador do Stackdriver

Para exportar os dados coletados, use um exportador do Stackdriver. O exportador do Stackdriver usa o Application Default Credentials para autenticação. É possível omitir o código do projeto se ele for executado no Google Cloud Platform (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)
}

Como executar no GCP

Não será preciso fornecer credenciais de autenticação para instâncias em execução no Google Cloud Platform se o escopo de acesso da API Stackdriver Trace estiver ativado nessa instância. No entanto, recomendamos configurar o escopo de acesso mais amplo possível para sua instância e, em seguida, usar o Cloud Identity and Access Management para restringir o acesso.

Ambiente flexível do App Engine

No ambiente flexível do App Engine, o escopo de acesso da API Stackdriver Trace é ativado por padrão. Além disso, a biblioteca de cliente OpenCensus pode ser usada sem a necessidade de fornecer credenciais ou um código de projeto.

Ambiente padrão do App Engine

No ambiente padrão do App Engine, o escopo de acesso da API Stackdriver Trace é ativado por padrão. Além disso, e a biblioteca de cliente do OpenCensus pode ser usada sem fornecer credenciais ou um código de projeto.

Google Kubernetes Engine

Para usar o Trace no GKE, adicione o escopo de acesso do OAuth trace.append ao criar um cluster.

Para criar um cluster usando o gcloud, faça o seguinte:

  1. Atualize o gcloud para a versão mais recente (opcional):
    gcloud components update
  2. Defina o código do projeto padrão:
    gcloud config set project [PROJECT_ID]
  3. Se você estiver trabalhando com clusters zonais, defina a zona de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  4. Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  5. Execute o comando de criação:
    gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/trace.append

Para informações mais detalhadas sobre como criar um cluster, consulte Como criar um cluster.

Compute Engine

Para as instâncias do Compute Engine, é preciso ativar explicitamente o escopo de acesso trace.append da API Stackdriver Trace para cada instância de VM. Ao criar uma nova instância por meio do Console do Google Cloud Platform, selecione os seguintes valores na seção Identidade e acesso à API do painel Criar uma instância:

  1. Selecione a Conta de serviço padrão do Compute Engine como a Conta de serviço
  2. Selecione Permitir acesso completo a todas as APIs do Cloud em Escopos de acesso.

Para usar algo diferente da conta de serviço padrão do Compute Engine, consulte as seções Como criar e ativar contas de serviços para instâncias e Como executar localmente e em outro local. O importante é que a conta de serviço que você usa tenha o papel de agente do Cloud Trace.

Como executar localmente e em outro local

Para executar o Stackdriver Trace fora do GCP, é necessário fornecer seu código de projeto do GCP e credenciais da conta de serviço apropriadas diretamente para a biblioteca de cliente do OpenCensus. Sua conta de serviço precisa conter o papel de agente do Cloud Trace. Para mais instruções, consulte Como criar uma conta de serviço.

Código do projeto

Forneça um código do projeto para o OpenCensus, conforme exibido em Como configurar o exportador do Stackdriver. Para definir a variável de ambiente GOOGLE_CLOUD_PROJECT, realize as seguintes ações:

Linux ou macOS

export GOOGLE_CLOUD_PROJECT=your-project-id

Windows

set GOOGLE_CLOUD_PROJECT=your-project-id

PowerShell:

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

Credenciais

As bibliotecas de cliente do GCP usam o Application Default Credentials (ADC) para localizar as credenciais do seu aplicativo. Você fornece credenciais à biblioteca de cliente do OpenCensus ao definir a variável de ambiente 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"

Aplicativo do Trace de amostra 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.
		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)
	log.Fatal(http.ListenAndServe(":6060", &ochttp.Handler{}))
}

Como visualizar os traces

Após a implantação, você pode consultar os traces no visualizador de traces do Console do GCP.

Acesse a página do visualizador do Trace

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.