在 Cloud Run 上部署、管理及觀察 ADK 代理程式

1. 簡介

本教學課程將引導您在 Google Cloud Run 上,部署、管理及監控使用 Agent Development Kit (ADK) 建構的強大代理程式。ADK 可協助您建立代理程式,處理複雜的多代理工作流程。運用全代管無伺服器平台 Cloud Run,您可以將代理程式部署為可擴充的容器化應用程式,不必擔心基礎架構。這個強大的組合可讓您專注於代理程式的核心邏輯,同時享有 Google Cloud 強大且可擴充的環境。

在本教學課程中,我們將探討 ADK 與 Cloud Run 的無縫整合。您將瞭解如何部署代理程式,然後深入探討在類似於正式環境的設定中管理應用程式的實務層面。我們會說明如何管理流量,安全地推出新版代理程式,讓您在全面發布前,先對部分使用者測試新功能。

此外,您還會實際操作,監控代理程式的成效。我們會進行負載測試,模擬實際情境,觀察 Cloud Run 的自動調整資源配置功能運作情形。為深入瞭解代理程式的行為和效能,我們將啟用 Cloud Trace 追蹤功能。這項功能會提供要求在代理程式中傳輸的端對端詳細檢視畫面,方便您找出並解決任何效能瓶頸。完成本教學課程後,您將全面瞭解如何在 Cloud Run 上有效部署、管理及監控 ADK 輔助的代理程式。

在本程式碼研究室中,您將逐步完成下列步驟:

  1. 在 CloudSQL 上建立 PostgreSQL 資料庫,用於 ADK Agent 資料庫工作階段服務
  2. 設定基本 ADK 代理程式
  3. 設定 ADK 執行器使用的資料庫工作階段服務
  4. 將代理程式初步部署至 Cloud Run
  5. 進行負載測試並檢查 Cloud Run 自動調度資源
  6. 部署新的代理程式修訂版本,並逐步增加新修訂版本的流量
  7. 設定雲端追蹤功能,並檢查代理程式執行追蹤記錄

架構總覽

5e38fc5607fb4543.jpeg

必要條件

  • 熟悉 Python
  • 瞭解使用 HTTP 服務的基本全端架構

課程內容

  • ADK 結構和本機公用程式
  • 使用資料庫工作階段服務設定 ADK 代理程式
  • 在 CloudSQL 中設定 PostgreSQL,供資料庫工作階段服務使用
  • 使用 Dockerfile 將應用程式部署至 Cloud Run,並設定初始環境變數
  • 透過負載測試設定及測試 Cloud Run 自動調度資源功能
  • 使用 Cloud Run 逐步發布的策略
  • 設定 ADK 代理程式追蹤記錄,將資料傳送至 Cloud Trace

軟硬體需求

  • Chrome 網路瀏覽器
  • Gmail 帳戶
  • 已啟用計費功能的 Cloud 專案

本程式碼研究室適用於所有程度的開發人員 (包括初學者),並在範例應用程式中使用 Python。不過,您不需要具備 Python 知識,也能瞭解本文介紹的概念。

2. 事前準備

在 Cloud 控制台中選取有效專案

本程式碼研究室假設您已擁有啟用計費功能的 Google Cloud 專案。如果尚未取得,請按照下列操作說明開始使用。

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能

c714d4741fc97644.png

準備 Cloud SQL 資料庫

稍後 ADK 代理程式會用到資料庫,我們將在 Cloud SQL 中建立 PostgreSQL 資料庫。首先,請前往 Cloud 控制台頂端區段的搜尋列,然後輸入「cloud sql」。然後按一下「Cloud SQL」產品

1005cb65520eb3fc.png

接著,我們需要建立新的資料庫執行個體,按一下「建立執行個體」,然後選擇「PostgreSQL」

7f2ad19bc246895d.png

ead4a98e7a8d8a39.png

如果您從新專案開始,可能也需要啟用 Compute Engine API,只要在出現提示時點按「啟用 API」即可

724cf67681535679.png

接著選擇資料庫規格,選取「Enterprise」版本,並使用「Sandbox」版本預設設定

24aa9defed93a3ef.png

接著,請在此設定執行個體名稱和使用者 postgres 的預設密碼。您可以設定任何想要的憑證,但為了本教學課程,我們將在此使用「adk-deployment」做為執行個體名稱和密碼

573719a4582f541c.png

在本教學課程中,我們將使用 us-central1 和單一區域,然後點選「建立執行個體」按鈕,完成資料庫建立程序並讓系統完成所有必要設定。

773e2ea11d97369d.png

等待這項作業完成的期間,我們可以繼續下一個部分

在 Cloud Shell 終端機中設定 Cloud 專案

  1. 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境。按一下 Google Cloud 控制台上方的「啟用 Cloud Shell」。

1829c3759227c19b.png

  1. 連線至 Cloud Shell 後,請使用下列指令檢查您是否已通過驗證,且專案已設為您的專案 ID:
gcloud auth list
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案。
gcloud config list project
  1. 如果未設定專案,請使用下列指令來設定:
gcloud config set project <YOUR_PROJECT_ID>

或者,您也可以在控制台中查看 PROJECT_ID id

4032c45803813f30.jpeg

按一下該專案,右側就會顯示所有專案和專案 ID

8dc17eb4271de6b5.jpeg

  1. 透過下列指令啟用必要的 API。這可能需要幾分鐘的時間,請耐心等候。
gcloud services enable aiplatform.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       sqladmin.googleapis.com

成功執行指令後,您應該會看到類似下方的訊息:

Operation "operations/..." finished successfully.

除了使用 gcloud 指令,您也可以透過主控台搜尋各項產品,或使用這個連結

如果遺漏任何 API,您隨時可以在導入過程中啟用。

如要瞭解 gcloud 指令和用法,請參閱說明文件

前往 Cloud Shell 編輯器並設定應用程式工作目錄

現在,我們可以設定程式碼編輯器,進行一些程式設計工作。我們會使用 Cloud Shell 編輯器執行這項操作

  1. 按一下「Open Editor」(開啟編輯器) 按鈕,開啟 Cloud Shell 編輯器,即可在此編寫程式碼 b16d56e4979ec951.png
  2. 請確認 Cloud Shell 編輯器的左下角 (狀態列) 已設定 Cloud Code 專案,如下圖所示,且已設為啟用計費功能的有效 Google Cloud 專案。如果出現提示訊息,請點選「授權」。如果已按照先前的指令操作,按鈕可能會直接指向已啟用的專案,而不是登入按鈕

f5003b9c38b43262.png

  1. 接著,請從 Github 複製本程式碼研究室的範本工作目錄,執行下列指令。系統會在 deploy_and_manage_adk 目錄中建立工作目錄
git clone https://github.com/alphinside/deploy-and-manage-adk-service.git deploy_and_manage_adk
  1. 完成後,前往 Cloud Shell 編輯器頂端,依序點選「File」->「Open Folder」,找到「username」目錄,然後找到「deploy_and_manage_adk」目錄,並點選「OK」按鈕。這會將所選目錄設為主要工作目錄。在本範例中,使用者名稱為 alvinprayuda,因此目錄路徑如下所示

2c53696f81d805cc.png

a51615f22ba1690f.png

現在,Cloud Shell 編輯器應如下所示

228d4c1844790573.png

接著,我們可以設定 Python 環境

環境設定

準備 Python 虛擬環境

下一步是準備開發環境。目前使用中的終端機工作目錄應位於 deploy_and_manage_adk 工作目錄內。在本程式碼研究室中,我們將使用 Python 3.12,並使用 uv Python 專案管理工具,簡化建立及管理 Python 版本和虛擬環境的需求。

  1. 如果尚未開啟終端機,請依序點選「Terminal」(終端機) ->「New Terminal」(新增終端機),或使用 Ctrl + Shift + C 鍵,在瀏覽器底部開啟終端機視窗

f8457daf0bed059e.jpeg

  1. 下載 uv,然後使用下列指令安裝 Python 3.12
curl -LsSf https://astral.sh/uv/0.6.16/install.sh | sh && \
source $HOME/.local/bin/env && \
uv python install 3.12
  1. 現在使用 uv 初始化虛擬環境,執行下列指令:
uv sync --frozen

這會建立 .venv 目錄並安裝依附元件。快速瀏覽 pyproject.toml,即可查看依附元件資訊,如下所示

dependencies = [
    "google-adk==1.3.0",
    "locust==2.37.10",
    "pg8000==1.31.2",
    "python-dotenv==1.1.0",
]
  1. 如要測試虛擬環境,請建立新檔案 main.py 並複製下列程式碼
def main():
   print("Hello from deploy_and_manage_adk!")

if __name__ == "__main__":
   main()
  1. 然後執行下列指令
uv run main.py

您會看到如下所示的輸出內容

Using CPython 3.12
Creating virtual environment at: .venv
Hello from deploy_and_manage_adk!

這表示 Python 專案設定正確。

設定設定檔

現在我們需要為這個專案設定設定檔。

.env.example 檔案重新命名為 .env,系統就會顯示下列值。將 GOOGLE_CLOUD_PROJECT 值更新為專案 ID

# Google Cloud and Vertex AI configuration
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=global
GOOGLE_GENAI_USE_VERTEXAI=True

# Database connection for session service
# SESSION_SERVICE_URI=postgresql+pg8000://<username>:<password>@/<database>?unix_sock=/cloudsql/<instance_connection_name>/.s.PGSQL.5432

在本程式碼研究室中,我們將使用 GOOGLE_CLOUD_LOCATIONGOOGLE_GENAI_USE_VERTEXAI. 的預先設定值。目前,我們會將 SESSION_SERVICE_URI 註解掉。

現在我們可以前往下一個步驟,檢查代理程式邏輯並部署

3. 使用 ADK 和 Gemini 2.5 建構天氣代理程式

ADK 目錄結構簡介

首先,我們來瞭解 ADK 的功能,以及如何建構代理程式。如要查看 ADK 完整說明文件,請前往這個網址。ADK 在執行 CLI 指令時提供許多公用程式。部分範例如下:

  • 設定代理程式目錄結構
  • 透過 CLI 輸入/輸出快速試用互動功能
  • 快速設定本機開發 UI 網頁介面

現在,讓我們檢查 weather_agent 目錄中的代理程式結構

weather_agent/
├── __init__.py
├── agent.py

如果您檢查 init.pyagent.py,會看到這段程式碼

# __init__.py

from weather_agent.agent import root_agent

__all__ = ["root_agent"]
# agent.py

import os
from pathlib import Path

import google.auth
from dotenv import load_dotenv
from google.adk.agents import Agent
from google.cloud import logging as google_cloud_logging

# Load environment variables from .env file in root directory
root_dir = Path(__file__).parent.parent
dotenv_path = root_dir / ".env"
load_dotenv(dotenv_path=dotenv_path)

# Use default project from credentials if not in .env
_, project_id = google.auth.default()
os.environ.setdefault("GOOGLE_CLOUD_PROJECT", project_id)
os.environ.setdefault("GOOGLE_CLOUD_LOCATION", "global")
os.environ.setdefault("GOOGLE_GENAI_USE_VERTEXAI", "True")

logging_client = google_cloud_logging.Client()
logger = logging_client.logger("weather-agent")


def get_weather(city: str) -> dict:
    """Retrieves the current weather report for a specified city.

    Args:
        city (str): The name of the city (e.g., "New York", "London", "Tokyo").

    Returns:
        dict: A dictionary containing the weather information.
              Includes a 'status' key ('success' or 'error').
              If 'success', includes a 'report' key with weather details.
              If 'error', includes an 'error_message' key.
    """
    logger.log_text(
        f"--- Tool: get_weather called for city: {city} ---", severity="INFO"
    )  # Log tool execution
    city_normalized = city.lower().replace(" ", "")  # Basic normalization

    # Mock weather data
    mock_weather_db = {
        "newyork": {
            "status": "success",
            "report": "The weather in New York is sunny with a temperature of 25°C.",
        },
        "london": {
            "status": "success",
            "report": "It's cloudy in London with a temperature of 15°C.",
        },
        "tokyo": {
            "status": "success",
            "report": "Tokyo is experiencing light rain and a temperature of 18°C.",
        },
    }

    if city_normalized in mock_weather_db:
        return mock_weather_db[city_normalized]
    else:
        return {
            "status": "error",
            "error_message": f"Sorry, I don't have weather information for '{city}'.",
        }


root_agent = Agent(
    name="weather_agent",
    model="gemini-2.5-flash",
    instruction="You are a helpful AI assistant designed to provide accurate and useful information.",
    tools=[get_weather],
)

ADK 程式碼解說

這個指令碼包含代理程式啟動程序,我們會初始化下列項目:

  • 將模型設為用於 gemini-2.5-flash
  • 提供工具 get_weather,支援天氣代理程式等代理程式功能

執行網頁版 UI

現在,我們可以與代理程式互動,並在本機檢查其行為。ADK 可讓我們透過開發網頁 UI 互動,並檢查互動期間發生的情況。執行下列指令,啟動本機開發 UI 伺服器

uv run adk web --port 8080

這會產生類似下列範例的輸出內容,表示我們已可存取網頁介面

INFO:     Started server process [xxxx]
INFO:     Waiting for application startup.

+-----------------------------------------------------------------------------+
| ADK Web Server started                                                      |
|                                                                             |
| For local testing, access at http://localhost:8080.                         |
+-----------------------------------------------------------------------------+

INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)

如要檢查,請點選 Cloud Shell 編輯器頂端的「Web Preview」(網頁預覽) 按鈕,然後選取「Preview on port 8080」(透過以下通訊埠預覽:8080)

e7c9f56c2463164.png

你會看到下列網頁,在左上方的下拉式按鈕中選取可用的代理程式 ( 在本例中應為 weather_agent),然後與機器人互動。在代理程式執行階段,左側視窗會顯示許多記錄詳細資料

d95b1e057315fee2.png

現在試著與其互動。在左側列中,我們可以檢查每個輸入內容的追蹤記錄,瞭解代理程式在形成最終答案前,執行每個動作所需的時間。

39c0a06ace937683.png

這是 ADK 內建的可觀測性功能之一,目前我們是在本機檢查。稍後我們將瞭解如何將這項功能整合至 Cloud Trace,集中追蹤所有要求

4. 後端伺服器指令碼

為了讓代理程式可做為服務存取,我們會將代理程式包裝在 FastAPI 應用程式中。我們可以在這裡設定必要服務來支援代理程式,例如準備 SessionMemoryArtifact 服務以供生產用途。以下是將使用的 server.py 程式碼

import os

from dotenv import load_dotenv
from fastapi import FastAPI
from google.adk.cli.fast_api import get_fast_api_app
from pydantic import BaseModel
from typing import Literal
from google.cloud import logging as google_cloud_logging
from tracing import CloudTraceLoggingSpanExporter
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider, export


# Load environment variables from .env file
load_dotenv()

logging_client = google_cloud_logging.Client()
logger = logging_client.logger(__name__)

AGENT_DIR = os.path.dirname(os.path.abspath(__file__))

# Get session service URI from environment variables
session_uri = os.getenv("SESSION_SERVICE_URI", None)

# Prepare arguments for get_fast_api_app
app_args = {"agents_dir": AGENT_DIR, "web": True}

# Only include session_service_uri if it's provided
if session_uri:
    app_args["session_service_uri"] = session_uri
else:
    logger.log_text(
        "SESSION_SERVICE_URI not provided. Using in-memory session service instead. "
        "All sessions will be lost when the server restarts.",
        severity="WARNING",
    )

provider = TracerProvider()
processor = export.BatchSpanProcessor(CloudTraceLoggingSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

# Create FastAPI app with appropriate arguments
app: FastAPI = get_fast_api_app(**app_args)

app.title = "weather-agent"
app.description = "API for interacting with the Agent weather-agent"


class Feedback(BaseModel):
    """Represents feedback for a conversation."""

    score: int | float
    text: str | None = ""
    invocation_id: str
    log_type: Literal["feedback"] = "feedback"
    service_name: Literal["weather-agent"] = "weather-agent"
    user_id: str = ""


@app.post("/feedback")
def collect_feedback(feedback: Feedback) -> dict[str, str]:
    """Collect and log feedback.

    Args:
        feedback: The feedback data to log

    Returns:
        Success message
    """
    logger.log_struct(feedback.model_dump(), severity="INFO")
    return {"status": "success"}


# Main execution
if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8080)

伺服器程式碼說明

這些是 server.py 指令碼中定義的項目:

  1. 使用 get_fast_api_app 方法將代理程式轉換為 FastAPI 應用程式。這樣一來,我們就會沿用用於網頁開發 UI 的相同路徑定義。
  2. 將關鍵字引數新增至 get_fast_api_app 方法,設定必要的 Session、Memory 或 Artifact 服務。在本教學課程中,如果我們設定 SESSION_SERVICE_URI 環境變數,工作階段服務就會使用該變數,否則會使用記憶體內工作階段
  3. 我們可以新增自訂路徑,支援其他後端業務邏輯。在指令碼中,我們新增了意見回饋功能路徑範例
  4. 啟用雲端追蹤功能,將追蹤記錄傳送至 Google Cloud Trace

5. 部署至 Cloud Run

現在,請將這個代理程式服務部署至 Cloud Run。在本示範中,這項服務會公開,供他人存取。不過請注意,這並非最佳做法,因為不安全

5e38fc5607fb4543.jpeg

在本程式碼研究室中,我們將使用 Dockerfile 將代理程式部署至 Cloud Run。以下是將使用的 Dockerfile 內容

FROM python:3.12-slim

RUN pip install --no-cache-dir uv==0.7.13

WORKDIR /app

COPY . .

RUN uv sync --frozen

EXPOSE 8080

CMD ["uv", "run", "uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8080"]

此時,我們已備妥將應用程式部署至 Cloud Run 的所有必要檔案,現在就來部署吧。前往 Cloud Shell 終端機,確認目前專案已設為有效專案。如果不是,請使用 gcloud configure 指令設定專案 ID:

gcloud config set project [PROJECT_ID]

接著,請執行下列指令,將其部署至 Cloud Run。

gcloud run deploy weather-agent \
                  --source . \
                  --port 8080 \
                  --project {YOUR_PROJECT_ID} \
                  --allow-unauthenticated \
                  --add-cloudsql-instances {YOUR_DB_CONNECTION_NAME} \
                  --update-env-vars SESSION_SERVICE_URI="postgresql+pg8000://postgres:{YOUR_DEFAULT_USER_PASS}@postgres/?unix_sock=/cloudsql/{YOUR_DB_CONNECTION_NAME}/.s.PGSQL.5432",GOOGLE_CLOUD_PROJECT={YOUR_PROJECT_ID} \
                  --region us-central1

如要取得 {YOUR_DB_CONNECTION_NAME} 值,請再次前往 Cloud SQL,然後點選您建立的執行個體。在執行個體頁面中,向下捲動至「連線至這個執行個體」部分,即可複製連線名稱,以取代 {YOUR_DB_CONNECTION_NAME} 值。例如,請參閱下圖

5d7d6c6f17e559c1.png

如果系統提示您確認要為 Docker 存放區建立 Artifact Registry,請回答 Y。請注意,我們允許未經驗證的存取要求,因為這是示範應用程式。建議您為企業和正式版應用程式使用適當的驗證機制。

部署完成後,您應該會收到類似下方的連結:

https://weather-agent-*******.us-central1.run.app

請繼續在無痕視窗或行動裝置上使用應用程式。這項功能應該已經上線。

6. 使用負載測試檢查 Cloud Run 自動調度資源功能

現在,我們要檢查 Cloud Run 的自動調度資源功能。在這個情境中,我們將部署新修訂版本,同時為每個執行個體啟用並行數上限。執行下列指令

gcloud run deploy weather-agent \
                  --source . \
                  --port 8080 \
                  --project {YOUR_PROJECT_ID} \
                  --allow-unauthenticated \
                  --region us-central1 \
                  --concurrency 10

接著,讓我們檢查 load_test.py 檔案。我們將使用這個指令碼,透過 locust 架構執行負載測試。這個指令碼會執行下列動作:

  1. 隨機產生的 user_id 和 session_id
  2. 為 user_id 建立 session_id
  3. 使用建立的 user_id 和 session_id 存取「/run_sse」端點

如果您錯過部署的服務網址,我們需要知道該網址。前往 Cloud Run 控制台,然後按一下 weather-agent 服務。

f5cc953cc422de6d.png

然後找出 weather-agent 服務並點選

ddd0df8544aa2bfb.png

服務網址會顯示在「區域」資訊旁邊。例如:

41b1276616379ee8.png

然後執行下列指令來進行負載測試

uv run locust -f load_test.py \
              -H {YOUR_SERVICE_URL} \
              -u 60 \
              -r 5 \
              -t 120 \
              --headless

執行這項操作後,您會看到類似下方的指標。( In this example all reqs success )

Type     Name                                  # reqs      # fails |    Avg     Min     Max    Med |   req/s  failures/s
--------|------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
POST     /run_sse end                             813     0(0.00%) |   5817    2217   26421   5000 |    6.79        0.00
POST     /run_sse message                         813     0(0.00%) |   2678    1107   17195   2200 |    6.79        0.00
--------|------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
         Aggregated                              1626     0(0.00%) |   4247    1107   26421   3500 |   13.59        0.00  

接著,讓我們看看 Cloud Run 發生了什麼事,再次前往已部署的服務,然後查看資訊主頁。這會顯示 Cloud Run 如何自動調度執行個體,以處理傳入要求。由於我們將每個執行個體的並行數上限設為 10,因此 Cloud Run 執行個體會嘗試自動調整容器數量,以滿足這項條件。

1ad41143eb9d95df.png

7. 逐步發布新修訂版本

現在,我們來看看以下情境。我們想將代理程式的提示更新為以下內容:

# agent.py

...

root_agent = Agent(
    name="weather_agent",
    model="gemini-2.5-flash-preview-05-20",
    instruction="You are a helpful AI assistant designed to provide accurate and useful information. You only answer inquiries about the weather. Refuse all other user query",
    tools=[get_weather],
)

接著,您想發布新修訂版本,但不希望所有要求流量都直接導向新版本。我們可以透過 Cloud Run 逐步發布。首先,我們需要部署新修訂版本,但要使用 –no-traffic 標記。儲存先前的代理程式指令碼,然後執行下列指令

gcloud run deploy weather-agent \
                  --source . \
                  --port 8080 \
                  --project {YOUR_PROJECT_ID} \
                  --allow-unauthenticated \
                  --region us-central1 \
                  --no-traffic

完成後,您會收到類似先前部署程序的記錄,但服務的流量數不同。系統會顯示 0% 的流量。

接著前往 Cloud Run 產品頁面,找出已部署的執行個體。在搜尋列中輸入「cloud run」,然後點選 Cloud Run 產品

f5cc953cc422de6d.png

然後找出 weather-agent 服務並點選

ddd0df8544aa2bfb.png

前往「修訂版本」分頁,即可查看已部署的修訂版本清單

8519c5a59bc7efa6.png

您會看到新部署的修訂版本提供 0% 的服務,您可以點選 Kebab 按鈕 (⋮),然後選擇「管理流量」

d4d224e20813c303.png

在彈出的新視窗中,您可以編輯要將多少流量導向哪個修訂版本。

6df497c3d5847f14.png

等待一段時間後,系統會根據百分比設定,按比例分配流量。這樣一來,如果新版本發生問題,我們就能輕鬆還原至先前的修訂版本

8. ADK 追蹤

使用 ADK 建構的代理程式已支援追蹤功能,可將開放式遙測技術嵌入其中。我們有 Cloud Trace 可擷取這些追蹤記錄並以視覺化方式呈現。讓我們檢查 server.py,瞭解如何在先前部署的服務中啟用這項功能

# server.py

from tracing import CloudTraceLoggingSpanExporter
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider, export

...

provider = TracerProvider()
processor = export.BatchSpanProcessor(CloudTraceLoggingSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

...

在這裡,我們會初始化追蹤器和匯出工具。您可以在 tracing.py 中檢查匯出工具的詳細資料。由於可匯出至 Cloud Trace 的追蹤資料量有限,因此我們在此建立自訂匯出工具。我們使用 https://googlecloudplatform.github.io/agent-starter-pack/guide/observability.html 的實作項目,提供這項追蹤功能。

嘗試存取服務網頁開發人員 UI,並與服務專員對話。然後前往 Cloud 控制台搜尋列,輸入「trace explorer」,並選擇「Trace Explorer」產品

4353c0f8982361ab.png

在追蹤記錄探索器頁面中,您會看到與代理程式追蹤記錄的對話已提交。您可以從「範圍名稱」部分查看,並篩除與代理程式相關的範圍 ( 名稱為 agent_run [weather_agent] )

c4336d117a3d2f6a.png

如果已篩選跨度,您也可以直接檢查每項追蹤記錄。系統會顯示代理人執行各項動作的詳細時間長度。舉例來說,請參考下方的圖片

76a56dff77979037.png

1a3ce0a803d6061a.png

在每個部分,您都可以檢查屬性中的詳細資料,如下所示

2c87b6d67b0164a8.png

這樣一來,我們就能清楚掌握代理程式與使用者每次互動的資訊,有助於排解問題。歡迎嘗試各種工具或工作流程!

9. 挑戰

嘗試多代理或代理工作流程,瞭解這些流程在負載下的效能,以及追蹤記錄的樣貌

10. 清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本程式碼研究室所用資源的費用,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「管理資源」頁面。
  2. 在專案清單中選取要刪除的專案,然後點按「刪除」。
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。
  4. 或者,您也可以前往控制台的「Cloud Run」,選取剛部署的服務並刪除。