Untuk menggunakan Cloud Logging di agen saat di-deploy, gunakan salah satu metode berikut:
- stdout / stderr: secara default (tanpa penyiapan tambahan), log yang ditulis ke stdout dan stderr akan dirutekan ke ID log
reasoning_engine_stdout
danreasoning_engine_stderr
. Batasannya adalah teks harus berupa teks. - Logging Python: logger Python bawaan dapat diintegrasikan dengan Cloud Logging. Dibandingkan dengan menulis ke stdout atau stderr, hal ini mendukung log terstruktur dan memerlukan penyiapan minimal.
- Klien Cloud Logging: pengguna dapat menulis log terstruktur, dan memiliki kontrol penuh atas logger (misalnya, menetapkan
logName
dan jenis resource).
Menulis log untuk agen
Saat menulis log untuk agen, tentukan:
- severity: Misalnya, info, warn, error
- payload: konten log (misalnya, teks atau JSON)
- kolom tambahan: untuk melakukan korelasi di seluruh log (misalnya, rekaman aktivitas/span, tag, label)
Misalnya, untuk mencatat input setiap kueri saat mengembangkan agen:
stdout atau stderr
from typing import Dict
class MyAgent:
def set_up(self):
# No set up required. The logs from stdout and stderr are routed to
# `reasoning_engine_stdout` and `reasoning_engine_stderr` respectively.
pass
def query(self, input: Dict):
import sys
print(
f"input: {input}",
file=sys.stdout, # or sys.stderr
)
Logging Python
from typing import Dict
class MyAgent:
def set_up(self):
import os
import google.cloud.logging
self.logging_client = google.cloud.logging.Client(project="PROJECT_ID")
self.logging_client.setup_logging(
name="LOG_ID", # the ID of the logName in Cloud Logging.
resource=google.cloud.logging.Resource(
type="aiplatform.googleapis.com/ReasoningEngine",
labels={
"location": "LOCATION",
"resource_container": "PROJECT_ID",
"reasoning_engine_id": os.environ.get("K_SERVICE", "").split("-")[-1],
},
),
)
def query(self, input: Dict):
import logging
import json
logging_extras = {
"labels": {"foo": "bar"},
"trace": "TRACE_ID",
}
logging.info( # or .warning(), .error()
json.dumps(input),
extra=logging_extras,
)
Klien Cloud Logging
from typing import Dict
class MyAgent:
def set_up(self):
import os
import google.cloud.logging
self.logging_client = google.cloud.logging.Client(project="PROJECT_ID")
self.logger = self.logging_client.logger(
name="LOG_ID", # the ID of the logName in Cloud Logging.
resource=google.cloud.logging.Resource(
type="aiplatform.googleapis.com/ReasoningEngine",
labels={
"location": "LOCATION",
"resource_container": "PROJECT_ID",
"reasoning_engine_id": os.environ.get("K_SERVICE", "").split("-")[-1],
},
),
)
def query(self, input: Dict):
logging_extras = {
"labels": {"foo": "bar"},
"trace": "TRACE_ID",
}
self.logger.log_struct(
input,
severity="INFO", # or "DEBUG", "WARNING", "ERROR", "CRITICAL"
**logging_extras,
)
Saat di-deploy dan di-kueri, agen akan menghasilkan entri log. Misalnya, kode
remote_agent = agent_engines.create(
MyAgent(),
requirements=["cloudpickle==3", "google-cloud-logging"],
)
remote_agent.query(input={"hello": "world"})
akan menghasilkan entri log yang mirip dengan berikut ini:
stdout atau stderr
{
"insertId": "67a3bb3b000cc2df444361ab",
"textPayload": "input: {'hello': 'world'}",
"resource": {
"type": "aiplatform.googleapis.com/ReasoningEngine",
"labels": {
"location": "LOCATION",
"resource_container": "PROJECT_ID",
"reasoning_engine_id": "RESOURCE_ID"
}
},
"timestamp": "2025-02-05T19:25:47.836319Z",
"logName": "projects/PROJECT_ID/logs/aiplatform.googleapis.com%2Freasoning_engine_stdout", # or `*_stderr`
"receiveTimestamp": "2025-02-05T19:25:47.842550772Z"
}
Logging Python
{
"insertId": "1ek9a2jfqh777z",
"jsonPayload": {"hello": "world"},
"resource": {
"type": "aiplatform.googleapis.com/ReasoningEngine",
"labels": {
"location": "LOCATION",
"resource_container": "PROJECT_ID",
"reasoning_engine_id": "RESOURCE_ID",
}
},
"timestamp": "2025-02-05T20:30:19.348067Z",
"severity": "INFO",
"labels": {
"foo": "bar",
"python_logger": "root",
},
"logName": "projects/PROJECT_ID/logs/LOG_ID",
"trace": "TRACE_ID",
"receiveTimestamp": "2025-01-30T21:38:50.776813191Z"
}
Klien Cloud Logging
{
"insertId": "1ek9a2jfqh777z",
"jsonPayload": {"hello": "world"},
"resource": {
"type": "aiplatform.googleapis.com/ReasoningEngine",
"labels": {
"location": "LOCATION",
"resource_container": "PROJECT_ID",
"reasoning_engine_id": "RESOURCE_ID",
}
},
"timestamp": "2025-01-30T21:38:50.776813191Z",
"severity": "INFO",
"labels": {"foo": "bar"},
"logName": "projects/PROJECT_ID/logs/LOG_ID",
"trace": "TRACE_ID",
"receiveTimestamp": "2025-01-30T21:38:50.776813191Z"
}
Melihat log untuk agen
Anda dapat melihat entri log menggunakan Logs Explorer:
Buka Logs Explorer di konsol Google Cloud:
Pilih Google Cloud project Anda (sesuai dengan
PROJECT_ID
) di bagian atas halaman.Di Resource Type, pilih Vertex AI Reasoning Engine.
Membuat kueri
Anda dapat menggunakan Logs Explorer untuk membuat kueri secara bertahap. Kueri biasanya dibuat berdasarkan pertimbangan berikut:
- linimasa: untuk menelusuri entri log yang relevan berdasarkan waktu
- scope: untuk menelusuri entri log yang relevan berdasarkan atribut kanonis
- resource: pisahkan dari jenis resource lain dalam project Anda.
type
: muncul sebagai "Vertex AI Reasoning Engine" di Logs Explorer dan"aiplatform.googleapis.com/ReasoningEngine"
di entri log.labels
: untuk lokasi (LOCATION
), projectPROJECT_ID
, dan resourceRESOURCE_ID
.
- logName: Log tempat entri log berada:
- Entri log pada waktu build memiliki ID log
reasoning_engine_build
. - Entri log untuk
stdout
danstderr
masing-masing memiliki ID logreasoning_engine_stdout
danreasoning_engine_stderr
. - Entri log dari logging python atau klien Cloud Logging akan memiliki ID log kustom berdasarkan kode Anda di Menulis log untuk agen.
- Entri log pada waktu build memiliki ID log
- trace dan span: untuk log saat melacak kueri.
- severity: untuk tingkat keparahan entri log.
- insertId: ID unik untuk entri log.
- resource: pisahkan dari jenis resource lain dalam project Anda.
- labels: Peta pasangan kunci nilai yang memberikan informasi tambahan tentang entri log. Label dapat ditentukan pengguna atau ditentukan sistem, dan berguna untuk mengategorikan log serta mempermudah penelusurannya di Logs Explorer.
- payload: konten entri log.
Berikut adalah contoh kueri
untuk semua log INFO
dari agen yang di-deploy dengan RESOURCE_ID
:
resource.labels.reasoning_engine_id=RESOURCE_ID AND
severity=INFO
Anda dapat melihatnya di Logs Explorer di
https://console.cloud.google.com/logs/query;query=severity%3DINFO%0Aresource.labels.reasoning_engine_id%3D%22RESOURCE_ID%22;duration=DURATION?project=PROJECT_ID
dengan kueri telah dienkode URL dengan benar dan parameter lainnya sebagai berikut:
DURATION
: misalnyaPT30M
selama 30 menit terakhir (atauPT10M
selama 10 menit terakhir), danPROJECT_ID
: Google Cloud project.
Untuk mengetahui detailnya, buka Membuat dan menyimpan kueri menggunakan bahasa kueri Logging.
Membuat kueri log untuk agen
Untuk pendekatan terprogram guna membuat kueri log, ada dua opsi umum:
- Structured Query Language (SQL). Log Analytics memungkinkan Anda membuat kueri tampilan log atau tampilan analisis.
- Tampilan log memiliki skema tetap yang sesuai dengan entri log.
- Tampilan analisis memiliki skema yang didasarkan pada hasil kueri SQL.
Python. Panggil Cloud Logging API melalui library klien untuk bahasa pemrograman Anda (dalam hal ini Python).
Python
from google.cloud import logging
logging_client = logging.Client(project="PROJECT_ID")
logger = logging_client.logger("LOG_ID") # E.g. "logging_client"
print("Listing entries for logger {}:".format(logger.name))
for entry in logger.list_entries(
filter_="resource.labels.reasoning_engine_id=RESOURCE_ID" # Optional
):
timestamp = entry.timestamp.isoformat()
print("* {}: {}".format(timestamp, entry.payload))
Setiap entry
akan sesuai dengan LogEntry
.
Untuk mengetahui detail tentang argumen input ke logger.list_entries
, buka
referensi API.
SQL
SELECT *
FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
SELECT *
FROM `analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`