部署 GKE 適用的代管 OpenTelemetry

本文說明如何設定 GKE 適用的代管 OpenTelemetry,將 OpenTelemetry Protocol (OTLP) 追蹤記錄、指標和記錄,從 GKE 上執行的應用程式傳送至 Google Cloud Observability。

如要進一步瞭解 GKE 適用的代管 OpenTelemetry 運作方式,請參閱「GKE 適用的代管 OpenTelemetry」。

您可以使用 GKE 適用的 Managed OpenTelemetry 執行下列操作:

  • 設定在 GKE 執行的工作負載,將 OpenTelemetry Protocol (OTLP) 追蹤記錄、指標和記錄傳送至代管收集器。
  • 接收 GKE 執行應用程式的 OpenTelemetry Protocol (OTLP) 追蹤記錄、指標和記錄。
  • 將資料匯出至 Google Cloud Observability。

如需收集器層級的篩選和控制功能,請使用 Google 建構的 OpenTelemetry 收集器,而非這項代管服務。

事前準備

  1. 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時不需要特定 IAM 角色,只要您獲派某個專案的角色,即可選取該專案。
    • 建立專案:如要建立專案,您必須具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      將 PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      將 PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 確認您具備完成本指南所需的權限。

  7. 確認 Google Cloud 專案已啟用計費功能。

  8. 啟用 GKE、Telemetry (OTLP)、Cloud Logging、Cloud Monitoring、Cloud Trace API (如有尚未啟用的 API):

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    gcloud services enable container.googleapis.com telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com
  9. 安裝 Google Cloud CLI。

  10. 若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  11. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  12. 建立或選取 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時不需要特定 IAM 角色,只要您獲派某個專案的角色,即可選取該專案。
    • 建立專案:如要建立專案,您必須具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      將 PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      將 PROJECT_ID 替換為 Google Cloud 專案名稱。

  13. 確認您具備完成本指南所需的權限。

  14. 確認 Google Cloud 專案已啟用計費功能。

  15. 啟用 GKE、Telemetry (OTLP)、Cloud Logging、Cloud Monitoring、Cloud Trace API (如有尚未啟用的 API):

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    gcloud services enable container.googleapis.com telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com

需求條件

如要使用 GKE 適用的 Managed OpenTelemetry,必須符合下列需求:

  • 叢集必須使用 GKE 1.34.1-gke.2178000 以上版本。如要在檢測自訂資源中,將 OTLP 匯出通訊協定設為 gRPC,必須使用 GKE 1.37.1-gke.1697000 以上版本。
  • 已啟用 gcloud CLI 576.0.0 以上版本。
  • 如果您使用 Terraform 佈建 GKE 基礎架構,則必須使用 v8.8.0 以上版本的 terraform-provider-google。

必要的角色

如要取得啟用及使用 GKE 代管 OpenTelemetry 所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

費用

如要進一步瞭解使用 Managed OpenTelemetry for GKE 的相關費用,請參閱「計費」一節。

在叢集中啟用 Managed OpenTelemetry for GKE

如要為 GKE 設定 Managed OpenTelemetry,請按照下列步驟操作:

  • 在叢集中啟用 Managed OpenTelemetry for GKE。
  • 設定要監控的應用程式,將信號傳送至代管收集器的端點。

為 GKE 啟用 Managed OpenTelemetry 後,下列物件會部署至叢集:

  • 部署在 gke-managed-otel 命名空間中的 GKE 代管 OpenTelemetry 收集器。記錄、指標和追蹤記錄的叢集內代管 OpenTelemetry 收集器端點如下:
    • HTTP 端點:http://opentelemetry-collector.gke-managed-otel.svc.cluster.local:4318
    • gRPC 端點:http://opentelemetry-collector.gke-managed-otel.svc.cluster.local:4317
  • 自訂資源定義 instrumentations.telemetry.googleapis.com,可用於設定工作負載的自動設定。

    如要進一步瞭解自訂資源,請參閱 Kubernetes 說明文件中的自訂資源。

在新叢集啟用

如要在新叢集上啟用 Managed OpenTelemetry for GKE,請按照下列步驟操作:

gcloud

如果是 Autopilot 叢集,請使用下列指令:

gcloud container clusters create-auto CLUSTER_NAME \
  --project=PROJECT_ID \
  --managed-otel-scope=COLLECTION_AND_INSTRUMENTATION_COMPONENTS \
  --location=LOCATION \
  --cluster-version=VERSION

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • PROJECT_ID: Google Cloud 專案 ID。
  • LOCATION:區域或可用區。
  • VERSION:GKE 版本。請參閱「需求條件」,瞭解可使用的最低版本。

如果是 Standard 叢集,請使用下列指令:

gcloud container clusters create CLUSTER_NAME \
  --project=PROJECT_ID \
  --managed-otel-scope=COLLECTION_AND_INSTRUMENTATION_COMPONENTS \
  --location=LOCATION \
  --cluster-version=VERSION

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • PROJECT_ID: Google Cloud 專案 ID。
  • LOCATION:區域或可用區。
  • VERSION:GKE 版本。請參閱需求條件,瞭解可使用的最低版本。

控制台

  • 如果是 Autopilot 叢集,請按照下列步驟操作:

    1. 前往 Google Cloud 控制台的「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面。

      前往「Create an Autopilot cluster」(建立 Autopilot 叢集) 頁面

    2. 在導覽窗格中,按一下「Advanced settings」(進階設定)。

    3. 在「作業」部分,選取「啟用代管 OpenTelemetry」。

    4. 點選「建立」。

  • 如果是 Standard 叢集,請按照下列步驟操作:

    1. 在 Google Cloud 控制台,前往「Create a Kubernetes cluster」(建立 Kubernetes 叢集) 頁面。

      前往「Create a Kubernetes cluster」(建立 Kubernetes 叢集)

    2. 在導覽窗格中,按一下「Advanced settings」(進階設定)。
    3. 在「代管 OpenTelemetry」列中,按一下「 編輯設定」。
    4. 選取「啟用代管 OpenTelemetry」。
    5. 按一下 [儲存]。
    6. 點選「建立」。

Terraform

如要使用 Terraform 在新叢集上啟用 Managed OpenTelemetry for GKE,請參考下列範例:

terraform {
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = ">= 8.8.0"
    }
  }
}

resource "google_container_cluster" "default" {
  name     = "gke-standard-regional-with-managed-otel"
  location = "us-west1"

  initial_node_count = 1
  release_channel {
    channel = "RAPID" # The default rapid version already has the feature available.
  }

  managed_opentelemetry_config {
    scope = "COLLECTION_AND_INSTRUMENTATION_COMPONENTS"
  }
}

如要進一步瞭解如何使用 Terraform,請參閱「Terraform 對 GKE 的支援」。

在現有叢集上啟用

如要在現有叢集上啟用 Managed OpenTelemetry for GKE,請按照下列步驟操作:

gcloud

  1. 確認叢集版本符合需求條件。如要進一步瞭解如何升級現有叢集,請參閱「Standard 叢集升級」和「Autopilot 叢集升級」。

  2. 使用下列指令,啟用 GKE 的代管 OpenTelemetry:

    gcloud container clusters update CLUSTER_NAME \
      --project=PROJECT_ID \
      --managed-otel-scope=COLLECTION_AND_INSTRUMENTATION_COMPONENTS \
      --location=LOCATION
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PROJECT_ID: Google Cloud 專案 ID。
    • LOCATION:區域或可用區。

控制台

  1. 確認叢集版本符合需求條件。如要進一步瞭解如何升級現有叢集,請參閱「Standard 叢集升級」和「Autopilot 叢集升級」。

  2. 在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面:

    前往「Kubernetes clusters」(Kubernetes 叢集)

  3. 按一下叢集名稱。

  4. 在「Features」(功能) 清單中,找到「Managed OpenTelemetry」選項。如果顯示為停用,請按一下「Edit」(編輯),然後選取「Enable managed OpenTelemetry」(啟用代管 OpenTelemetry)。

  5. 按一下 [儲存變更]。

Terraform

如要在現有叢集上啟用 GKE 適用的代管 OpenTelemetry,請將 managed_opentelemetry_config 區塊新增至現有的 google_container_cluster 資源,如下列範例所示:

terraform {
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = ">= 8.8.0"
    }
  }
}

resource "google_container_cluster" "default" {
  name     = "gke-standard-regional-with-managed-otel"
  location = "us-west1"

  initial_node_count = 1
  release_channel {
    channel = "RAPID" # The default rapid version already has the feature available.
  }

  managed_opentelemetry_config {
    scope = "COLLECTION_AND_INSTRUMENTATION_COMPONENTS"
  }
}

如要進一步瞭解如何使用 Terraform,請參閱「Terraform 對 GKE 的支援」。

設定應用程式,使用代管 OpenTelemetry 收集器

應用程式必須經過設定,才能將信號傳送至代管收集器的端點。設定應用程式後,代管 OpenTelemetry 收集器會從已啟用收集器的叢集上執行的應用程式接收信號。應用程式的信號包括追蹤記錄、指標和記錄。

如要傳送 OpenTelemetry 信號,應用程式必須已檢測,才能產生 OpenTelemetry 指標。詳情請參閱「支援的工作負載」。

您可以手動設定應用程式,將信號傳送至代管收集器端點,也可以使用自動設定。不建議對同一個工作負載同時使用這兩種方法,因為自動設定可能會覆寫手動變更。這種組合可能會使追蹤設定變更更加困難。

以下各節說明如何設定應用程式,使用自動設定將信號傳送至收集器。

設定自動設定

自動設定會使用環境變數來設定工作負載,將信號傳送至代管收集器的端點。

如要啟用自動將環境變數插入 Pod 的功能,請使用 Instrumentation 自訂資源。環境變數具有 OpenTelemetry 設定,可插入命名空間中具有相符標籤的部分 Pod,或命名空間中的所有 Pod。

接著,當應用程式部署至命名空間時,GKE 會使用設定,自動將環境變數插入執行工作負載的 Pod。

  1. 如要設定 Instrumentation 自訂資源,請按照下列步驟操作:

    1. 將下列檢測資訊清單儲存至名為 otlp-auto-config-namespace.yaml 的檔案:

      apiVersion: telemetry.googleapis.com/v1alpha1
      kind: Instrumentation
      metadata:
        namespace: NAMESPACE
        name: NAME
      spec:
        selector:
          matchLabels:
            KEY: VALUE
        autoInstrumentationConfig:
          configInjection:
            enabled: true
        otelSDKConfig:
          tracer_provider:
            sampler:
              parent_based:
                root:
                  trace_id_ratio_based:
                    ratio: "TRACE_RATIO"
          meter_provider:
            readers:
            - periodic:
                interval: METRICS_INTERVAL
      

      更改下列內容:

      • NAMESPACE:命名空間,其中包含要自動檢測的 Pod。使用 default 指定預設命名空間。
      • NAME:資訊清單檔案中的 Instrumentation 物件名稱。
      • (選用) 要指定的 Pod 標籤。如果指定空白選取器 ({}),則會指定命名空間中的所有 Pod。
        • KEY:標籤的鍵。
        • VALUE:標籤的值。
      • TRACE_RATIO:要收集的追蹤記錄資料比率。如未指定,預設值為 1.0。詳情請參閱「修改追蹤記錄取樣率」。
      • METRICS_INTERVAL:收集監控資料的時間間隔,以毫秒為單位。預設為 30000。值必須為非負數,最小值為 5,000 毫秒,最大值為 300,000 毫秒,且為 5,000 毫秒的倍數。詳情請參閱「修改指標匯出間隔」。
    2. 如要修改任何設定,請參閱下一節,瞭解如何修改設定。

    3. 執行下列指令,套用設定:

      kubectl apply -f otlp-auto-config-namespace.yaml
      
  2. 如要自動插入環境變數,您必須將應用程式部署至叢集中已套用設定的命名空間。

    • 如要將設定套用至尚未在命名空間中執行的工作負載,請使用下列指令部署工作負載:

      kubectl apply -f DEPLOYMENT_NAME -n NAMESPACE
      

      更改下列內容:

      • DEPLOYMENT_NAME:部署作業名稱。
      • NAMESPACE:命名空間。
    • 如要將設定套用至已在命名空間中執行的工作負載,請使用下列指令重新部署工作負載:

      kubectl rollout restart deployment DEPLOYMENT_NAME -n NAMESPACE
      

      更改下列內容:

      • DEPLOYMENT_NAME:部署作業名稱。
      • NAMESPACE:命名空間。

將設定套用至叢集後,GKE 會在工作負載部署至叢集時自動設定所有工作負載。工作負載會透過將環境變數插入執行工作負載的 Pod 來檢測。

如果工作負載已設定這些環境變數,且在部署代管收集器的叢集中執行,則工作負載執行時,會將 OpenTelemetry 信號傳送至代管收集器。您可以在 Google Cloud Observability 中查看這些信號。

如要進一步瞭解如何查看信號,請參閱「查看遙測資料」。如需範例,請參閱「產生遙測範例」。

修改設定

如要修改設定,請按照下列步驟操作:

  1. 修改檢測資訊清單檔案。

  2. 套用修改後的設定。

  3. 套用修改後的設定後,請在叢集的對應命名空間中重新部署或重新啟動應用程式。

如要進一步瞭解這些步驟,請按照「設定自動設定」一節中的操作說明進行。

設定 OTLP 匯出通訊協定 (HTTP 或 gRPC)

根據預設,自動設定會將工作負載設為透過 HTTP 匯出遙測資料。在 GKE 1.37.1-gke.1697000 以上版本中,您可以設定 Instrumentation 自訂資源,透過 HTTP 或 gRPC 匯出遙測資料。

一個 Instrumentation 自訂資源僅支援所有供應商的一種通訊協定。如要使用 gRPC,請將所用供應商的匯出工具設為 otlp_grpc: {},並將未使用的供應商設為 null。例如,如要停用指標,請使用 meter_provider: null。

以下範例是檢測設備資訊清單檔案,設定為透過 gRPC 匯出追蹤記錄、指標和記錄提供者的遙測資料:

apiVersion: telemetry.googleapis.com/v1alpha1
kind: Instrumentation
metadata:
  namespace: NAMESPACE
  name: NAME
spec:
  selector:
    matchLabels:
      KEY: VALUE
  autoInstrumentationConfig:
    configInjection:
      enabled: true
  otelSDKConfig:
    tracer_provider:
      sampler:
        parent_based:
          root:
            trace_id_ratio_based:
              ratio: "TRACE_RATIO"
      processors:
      - batch:
          exporter:
            otlp_grpc: {}
    meter_provider:
      readers:
      - periodic:
          interval: METRICS_INTERVAL
          exporter:
            otlp_grpc: {}
    logger_provider:
      processors:
      - batch:
          exporter:
            otlp_grpc: {}

更改下列內容:

  • NAMESPACE:命名空間,其中包含要自動檢測的 Pod。使用 default 指定預設命名空間。
  • NAME:資訊清單檔案中檢測物件的名稱。
  • (選用) 要指定的 Pod 標籤。如果指定空白選取器 ({}),則會指定命名空間中的所有 Pod。
    • KEY:標籤的鍵。
    • VALUE:標籤的值。
  • TRACE_RATIO:要收集的追蹤記錄資料比率。如未指定,預設值為 1.0。詳情請參閱「修改追蹤記錄取樣率」。
  • METRICS_INTERVAL:收集監控資料的時間間隔,以毫秒為單位。預設為 30000。值必須為非負數,最小值為 5,000 毫秒,最大值為 300,000 毫秒,且為 5,000 毫秒的倍數。詳情請參閱「修改指標匯出間隔」。

修改資料收集量或頻率

您可以修改追蹤記錄取樣率,調整收集的追蹤記錄資料量。

您可以修改指標匯出間隔,調整監控資料傳送至 Cloud Monitoring 的頻率。

您無法修改收集的記錄資料量或頻率。不過,您可以停用所有記錄、指標或追蹤資料的收集功能。詳情請參閱「選取要收集的信號類型」。

修改追蹤記錄取樣率

工作負載可能會產生大量追蹤記錄資料。請務必根據自身情況,在收集和儲存資料的成本,以及資料實用性所需的詳細程度之間取得平衡。

預設 OpenTelemetry SDK 行為為 always_on,相當於比率為 1。

以下是追蹤記錄取樣率的設定範例。在這個範例中,比率為 0.25,因此追蹤記錄資料的收集率為 25%。修改這個比率數字,即可變更取樣率。

    tracer_provider:
      sampler:
        parent_based:
          root:
            trace_id_ratio_based:
              ratio: "0.25"

修改指標匯出間隔

指標匯出間隔會決定您在 Cloud Monitoring 圖表中能看到的資料精細程度。

以下是指標匯出間隔的設定範例。在這個範例中,匯出間隔為 30,000 毫秒。

指標匯出間隔用於指定 OpenTelemetry SDK 兩次連續匯出指標之間的延遲間隔。

這個間隔的值必須為非負值,最小值為 5,000 毫秒,最大值為 300,000 毫秒,且為 5,000 毫秒的倍數。值以毫秒表示。

meter_provider:
  readers:
  - periodic:
      interval: 30000

選取要收集的信號類型

您可以停用不想收集的信號類型,控管要從工作負載收集哪些信號類型。信號類型包括追蹤記錄、指標和記錄。

如要停用信號類型,請在執行工作負載的容器中使用環境變數。如要修改環境變數,請修改檢測自訂資源,然後將工作負載重新部署至容器。

以下範例是檢測資訊清單檔案,設定為僅收集追蹤記錄資料。meter_provider 和 logger_provider 設為 null,因此系統會停用記錄和指標收集功能。

apiVersion: telemetry.googleapis.com/v1alpha1
kind: Instrumentation
metadata:
  namespace: default
  name: otlp-auto-config-disable-metrics-logs
spec:
  selector:
    matchLabels: # Update the labels to match your workloads
      app: telemetrygen-app
  autoInstrumentationConfig:
    configInjection:
      enabled: true
  otelSDKConfig:
    meter_provider: null
    logger_provider: null

收集多模態提示和回覆資料

在 GKE 叢集 1.35.2-gke.1210000 以上版本中,您可以設定 GKE 適用的 Managed OpenTelemetry,收集多模態提示和回覆資料。

這項功能適用於 LangGraph ReAct 代理,以及使用 Agent Development Kit (ADK) 框架建構的生成式 AI 代理。

使用 Managed OpenTelemetry for GKE 收集多模態提示和回覆資料時,系統會收集使用者提示和回覆的完整內容。這些提示和回覆資料會儲存在 Cloud Storage bucket。如要進一步瞭解如何管理儲存空間 bucket,包括控管存取權或刪除資料,請參閱 Cloud Storage 說明文件。

您可以使用 Model Armor 和 Sensitive Data Protection 等產品,管理提示和回覆中可能含有的機密資料。

如要設定 Managed OpenTelemetry for GKE,收集多模態提示和回覆資料,請按照下列步驟操作:

  1. 按照「收集多模態提示和回覆」一節的操作說明,設定 Google Cloud 專案和使用的 SDK。

  2. 建立或找出要用於收集多模態提示和回覆的 Cloud Storage bucket。詳情請參閱「建立 bucket」。

  3. 將 Cloud Storage bucket 的 storage.objects.create 權限授予應用程式使用的服務帳戶。

    這項權限可讓應用程式將物件寫入 Cloud Storage bucket。這些物件會儲存代理應用程式建立及接收的提示和回覆。詳情請參閱「在 bucket 上設定及管理 IAM 政策」。

  4. 在檢測自訂資源中設定 promptsResponses.uploadBasePath 欄位,例如:

    apiVersion: telemetry.googleapis.com/v1alpha1
    kind: Instrumentation
    metadata:
      namespace: default
      name: prompts-responses
    spec:
      selector: {}
      promptsResponses:
        uploadBasePath: gs://BUCKET_NAME
    

    將 BUCKET_NAME 替換為 Cloud Storage bucket 的名稱。

更新檢測自訂資源並重新啟動工作負載後,設定提示和回覆的環境變數就會插入工作負載的容器。

如要進一步瞭解可收集的媒體類型,以及如何探索多模態提示和回覆,請參閱「收集及查看多模態提示和回覆」。

停用工作負載自動設定功能

如要停用指定設定的工作負載自動檢測功能,請從叢集刪除檢測自訂資源。請使用下列指令:

kubectl delete instrumentations.telemetry.googleapis.com INSTRUMENTATION_NAME -n NAMESPACE

更改下列內容:

  • INSTRUMENTATION_NAME:Instrumentation 自訂資源的名稱。
  • NAMESPACE:命名空間,其中包含要停用自動設定的 Pod。

如要暫時停用自動插入環境變數,但保留自動檢測設定供日後使用,請將 autoInstrumentationConfig.configInjection.enabled 設為 false,並套用更新後的自訂資源。

以下是暫時停用自動插入環境變數的自訂資源範例:

apiVersion: telemetry.googleapis.com/v1alpha1
kind: Instrumentation
metadata:
  namespace: default
  name: otlp-auto-config-example
spec:
  selector:
    matchLabels: # Update the labels to match your workloads
      app: telemetrygen-app
  autoInstrumentationConfig:
    configInjection:
      enabled: false # disable environment variables config injection
  otelSDKConfig:
  ... # preserve OpenTelemetry configuration for future use

刪除自訂資源或更新自訂資源來停用自動設定插入功能後,GKE 就不會自動檢測 Instrumentation 自訂資源指定的新工作負載。

如要停止從先前由自訂資源檢測的工作負載,將 OTLP 信號匯出至代管收集器,您必須重新啟動工作負載,變更才會生效。請使用下列指令:

kubectl rollout restart deployment DEPLOYMENT_NAME -n NAMESPACE

更改下列內容:

  • DEPLOYMENT_NAME:部署作業名稱。
  • NAMESPACE:命名空間。

查看遙測資料

在已啟用 Managed OpenTelemetry for GKE 的 GKE 上,執行設定的工作負載時,OpenTelemetry 信號會傳送至 Google Cloud Observability。

如要進一步瞭解如何在 Google Cloud Observability 中查看資料,請參閱下列內容:

產生遙測範例

本節說明如何部署範例應用程式,並將該應用程式指向 Managed OpenTelemetry 收集器的 OTLP 端點。接著,您可以在 Google Cloud中查看遙測資料。

範例應用程式是小型產生器,可將追蹤記錄、記錄和指標匯出至叢集內代管的 OpenTelemetry 收集器。應用程式已硬式編碼為使用收集器的 gRPC 端點: http://opentelemetry-collector.gke-managed-otel.svc.cluster.local:4317

如果應用程式已使用 OpenTelemetry SDK 檢測,您可以將應用程式指向收集器的端點,或為應用程式設定自動檢測,從應用程式產生遙測資料。

如要部署範例應用程式,請按照下列步驟操作:

  1. 連線至已啟用代管 OpenTelemetry 的叢集。如要瞭解如何設定,請參閱「設定 kubectl 指令的預設叢集」。

  2. 執行下列指令:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/otlp-k8s-ingest/main/sample/gke-app.yaml
    

    幾分鐘後,應用程式產生的遙測資料會開始透過收集器,流向每個信號的 Google Cloud 後端。

    1. 在 Google Cloud 控制台中查看試用版應用程式的記錄、指標和追蹤記錄,確認遙測資料已擷取:

    2. 如要查看指標,請按照下列步驟操作:

      1. 前往 Google Cloud 控制台的「Metrics Explorer」頁面:

        前往「Metrics Explorer」頁面

      2. 在 Metrics Explorer 中執行下列 PromQL 查詢:

        sum(avg_over_time({"__name__"="gen","namespace"="opentelemetry-demo","job"="telemetrygen"}[1h]))
        
    3. 如要查看追蹤記錄,請按照下列步驟操作:

      1. 前往 Google Cloud 控制台的「Trace Explorer」頁面。

        前往「Trace Explorer」

      2. 依據等於「lets-go」的 Span 名稱篩選追蹤記錄 Span。

    4. 如要查看記錄,請按照下列步驟操作:

      1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

        前往「Logs Explorer」頁面

      2. 執行以下查詢:

        resource.type="k8s_pod"
        resource.labels.namespace_name="opentelemetry-demo"
        

停用 GKE 的代管 OpenTelemetry

您可以在叢集中停用 GKE 適用的 Managed OpenTelemetry。停用收集器後,代管 OpenTelemetry 收集器會從叢集移除,系統也不會收集新的遙測資料。

如要停用 Managed OpenTelemetry for GKE,請按照下列步驟操作。

gcloud

如要為叢集停用 Managed OpenTelemetry for GKE,請執行下列 gcloud 指令:

  gcloud container clusters update CLUSTER_NAME \
  --project=PROJECT_ID \
  --managed-otel-scope=NONE \
  --location=LOCATION

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • PROJECT_ID: Google Cloud 專案 ID。
  • LOCATION:區域或可用區。

控制台

  1. 在控制台中,前往叢集清單:

    前往「Kubernetes clusters」(Kubernetes 叢集)

  2. 選取要停用 Managed OpenTelemetry 的叢集。

  3. 在「Cluster details」(叢集詳細資料) 中,選取「Managed OpenTelemetry」(代管 OpenTelemetry) 旁的編輯圖示。

  4. 取消勾選核取方塊即可停用這項功能。

Terraform

如要停用 GKE 適用的代管 OpenTelemetry,請更新 google_container_cluster 資源中的 managed_opentelemetry_config 區塊,將範圍設為 NONE。

  1. 更新 Terraform 設定檔:

    resource "google_container_cluster" "default" {
      name     = "CLUSTER_NAME"
      location = "LOCATION"
      project  = "PROJECT_ID"
    
      # ... other configuration ...
    
      managed_opentelemetry_config {
        scope = "NONE"
      }
    }
    
  2. 套用 Terraform 設定:

    terraform apply
    

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • LOCATION:區域或可用區。
  • PROJECT_ID: Google Cloud 專案 ID。

停用 GKE 的代管 OpenTelemetry 時,系統不會從叢集移除您建立的 Instrumentation CustomResourceDefinition 和任何 Instrumentation 自訂資源。

如果重新啟用代管 OpenTelemetry,系統會使用 Instrumentation 自訂資源中保留的設定。

如果 Managed OpenTelemetry for GKE 已收集遙測資料,停用收集器不會影響這些資料。現有資料仍會儲存在 Google Cloud Observability,但不會收集新的遙測資料。

疑難排解

Autopilot 合作夥伴特殊權限工作負載

如果您嘗試將自動設定與 Autopilot 合作夥伴特殊權限工作負載搭配使用,可能會發現工作負載 Pod 遭到拒絕。

GKE Autopilot 合作夥伴的特殊權限工作負載不支援 OpenTelemetry 設定插入。如果使用檢測自訂資源指定這類工作負載,啟用 OpenTelemetry 環境變數插入功能,工作負載可能無法符合 Autopilot 特權工作負載許可清單,也就是說,GKE Autopilot 會拒絕插入設定的 Pod。

Google Cloud 控制台未顯示記錄、指標或追蹤記錄

資料可能因多種原因而無法顯示。原因包括缺少查看資料的權限,或設定不正確導致無法收集資料。

如要解決常見問題,請按照下列步驟操作:

  • 確認專案已啟用所有必要的 API。

  • 請確認檢測自訂資源設定正確,命名空間與工作負載執行的命名空間相符,且選取器與工作負載的標籤相符。

  • 檢查工作負載的 Pod,確認環境變數是否正確插入。

  • 查看 OpenTelemetry 收集器的容器記錄,確認收集器是否有錯誤。如要進行此操作,請執行以下指令:

    kubectl logs -n gke-managed-otel -l app=opentelemetry-collector -c opentelemetry-collector
    

無法停用遙測信號

使用檢測自訂資源停用遙測信號時,請務必套用自訂資源並重新部署工作負載。

套用自訂資源時,請在 kubectl apply 指令中使用伺服器端套用,更新檢測自訂資源。

如要進一步瞭解如何停用遙測信號,請參閱「選取要收集的信號類型」。

工作負載中未顯示 OpenTelemetry 插入的變數

變數會插入工作負載 Pod 的容器,而非工作負載。請檢查 Pod,而非 ReplicaSet 或 Deployment 等擁有者物件。

舉例來說,如要確認變數是否正確插入前一節「產生遙測資料」中預設命名空間的範例工作負載,請執行下列操作:

  1. 執行下列指令:

    kubectl get pods -n default -l app=telemetrygen-app -o yaml
    
  2. 檢查 Pod 的 spec.containers[*].env。

  3. 確認同一個命名空間中有 Instrumentation 物件,且該物件指定 Pod 為目標,並已啟用設定插入功能。如要進行此操作,請執行以下指令:

    kubectl get instrumentations.telemetry.googleapis.com -n default -o yaml
    

只有在建立 Pod 時,變數才會插入容器,因為 Kubernetes API 不允許修改現有 Pod 規格中的大部分欄位,例如環境變數。如要讓設定對建立檢測物件前建立的工作負載生效,請重新啟動工作負載。舉例來說,如有名為 telemetry-gen-app 的 Deployment,請執行下列指令:

kubectl rollout restart deployment -n default telemetry-gen-app

Cloud Trace 中的追蹤記錄資料過多

如要減少 Cloud Trace 收集的資料,您可以設定父項型取樣器,並指定追蹤 ID 比率,只對部分追蹤記錄進行取樣。

例如,將以下內容新增至 Instrumentation 物件:

spec:
  otelSDKConfig:
    tracer_provider:
      sampler:
        parent_based:
          root:
            trace_id_ratio_based:
              ratio: "0.01"

預設 OpenTelemetry SDK 行為是「always_on」追蹤,相當於比率為 1。

環境變數與設定不符

如果您更新了 Instrumentation 物件,請確認您已按照「修改設定」一節所述,重新啟動 Pod。

如果 Pod 設定有誤,請確認檢測物件是否正確指定 Pod,且沒有多個檢測物件指定同一個 Pod:

kubectl get instrumentations --all-namespaces \
-o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,SELECTOR:.spec.selector

kubectl get pod -n ${NAMESPACE:?} ${POD_NAME:?} --show-labels

請注意,空白選取器會指定命名空間中的所有 Pod。

如果多個檢測項目在建立時指定同一個 Pod,則最後更新的檢測項目會生效。

kubectl logs 指令不會傳回任何輸出內容

當記錄直接從應用程式串流至 OpenTelemetry 收集器時,記錄會略過容器執行階段的標準記錄路徑。這是使用 OpenTelemetry 記錄檔時的常見情況。根據預設,匯出工具會將記錄傳送至 otlp 端點,而非 stdout 和 stderr 串流。

在這種情況下,由於記錄不會寫入 stdout 或 stderr 串流,容器執行階段無法擷取,因此 kubectl logs 指令不會顯示該應用程式的任何輸出內容。而是會顯示在 Cloud Logging 中。

如要使用 OpenTelemetry SDK,並將記錄傳送至 stdout 串流,可以使用記錄匯出工具進行設定。詳情請參閱「記錄匯出工具 - 標準輸出內容」。

後續步驟