為 Go 設定 Stackdriver Trace

Trace 的 Go 支援功能由 OpenCensus 提供,這是一組追蹤及應用程式指標檢測程式庫,適用於多種後端。如需 Go 適用的 OpenCensus 最新詳細資料、相關說明文件和範例,請前往對應的 GitHub 頁面

安裝套件

執行下列指令,擷取 OpenCensus 追蹤套件:

go get -u go.opencensus.io/trace

設定 Stackdriver 匯出工具

如要匯出收集到的 Trace 資料,請使用 Stackdriver 匯出工具。Stackdriver 匯出工具會使用應用程式預設憑證進行驗證。如果您的程式碼在 Google Cloud Platform (GCP) 上執行,則可以省略專案 ID:

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

在 GCP 上執行

如果在 Google Cloud Platform 上運作的執行個體啟用了 Stackdriver Trace API 存取權範圍,您就不需要為該執行個體提供驗證憑證。不過,我們建議您儘可能為執行個體設定最大的存取權範圍,然後使用 Cloud Identity & Access Management 限制存取權。

App Engine 彈性環境

App Engine 彈性環境預設會啟用 Stackdriver Trace API 存取權範圍,因此您不需提供憑證或專案 ID,就可以使用 OpenCensus 用戶端程式庫。

App Engine 標準環境

App Engine 標準環境預設會啟用 Stackdriver Trace API 存取權範圍,因此您不需提供憑證或專案 ID,就可以使用 OpenCensus 用戶端程式庫。

Google Kubernetes Engine

如要將 Trace 與 GKE 搭配使用,請在建立叢集時新增 trace.append OAuth 存取權範圍。

如要使用 gcloud 建立叢集,請執行下列操作:

  1. (選用) 將 gcloud 更新到最新版本:
    gcloud components update
  2. 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  3. 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  4. 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  5. 發出 create 指令:
    gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/trace.append

如需建立叢集的詳細資訊,請參閱建立叢集一文。

Compute Engine

針對 Compute Engine VM 執行個體,您必須明確地為每個 VM 執行個體啟用 trace.append Stackdriver Trace API 存取權範圍。透過 Google Cloud Platform 主控台新建執行個體時,請在「Create an instance」(建立執行個體) 面板的「Identity and API access」(身分與 API 存取權) 部分選取下列值:

  1. 為「Service account」(服務帳戶)選取 [Compute Engine default service account] (Compute Engine 預設服務帳戶)
  2. 為「Access Scopes」(存取權範圍) 選取 [Allow full access to all Cloud APIs] (允許所有 Cloud API 的完整存取權)。

如要使用 Compute Engine 預設服務帳戶以外的帳戶,請參閱為執行個體建立及啟用服務帳戶,以及在本機和其他地方執行一節。重點是您使用的服務帳戶必須具有 Cloud Trace 代理者角色

在本機及其他地方執行

如要在 GCP 以外的地方執行 Stackdriver Trace,您必須直接向 OpenCensus 用戶端程式庫提供 GCP 專案 ID 和適當的服務帳戶憑證。您的服務帳戶必須包含 Cloud Trace 代理者角色。如需詳細操作說明,請參閱建立服務帳戶一文。

專案 ID

請按照設定 Stackdriver 匯出工具中的說明,將專案 ID 提供給 OpenCensus。如要設定 GOOGLE_CLOUD_PROJECT 環境變數,請執行下列操作:

Linux 或 macOS

export GOOGLE_CLOUD_PROJECT=your-project-id

Windows

set GOOGLE_CLOUD_PROJECT=your-project-id

PowerShell:

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

憑證

GCP 用戶端程式庫會使用應用程式預設憑證 (ADC) 來尋找應用程式的憑證。如要將憑證提供給 OpenCensus 用戶端程式庫,請設定 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"

Go 適用的 Trace 應用程式範例

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

查看追蹤記錄

完成部署之後,您可在「GCP Console Trace Viewer」(GCP 主控台追蹤記錄檢視器) 中查看追蹤記錄。

前往「Trace Viewer」(追蹤記錄檢視器) 頁面

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Stackdriver Trace
需要協助嗎?請前往我們的支援網頁