Wenn Sie mit Cloud Logging in Agenten arbeiten möchten, die in der Agent Runtime bereitgestellt werden, verwenden Sie eine der folgenden Methoden:
stdoutoderstderr: Standardmäßig (ohne zusätzliche Einrichtung) werden Logs, die in stdout und stderr geschrieben werden, an die Log-IDsreasoning_engine_stdoutbzw.reasoning_engine_stderrweitergeleitet. Die Einschränkung besteht darin, dass sie Text sein müssen.- Python-Logging: Der integrierte Python-Logger kann in Cloud Logging eingebunden werden. Im Vergleich zum Schreiben in `stdout` oder `stderr` werden strukturierte Logs unterstützt und die Einrichtung ist minimal.
- Cloud Logging-Client: Nutzer können strukturierte Logs schreiben und haben die vollständige Kontrolle über den Logger (z. B. Festlegen von
logNameund Ressourcentyp).
Logs für einen Agenten schreiben
Wenn Sie Logs für einen Agenten schreiben, legen Sie Folgendes fest:
- severity: z. B. „info“, „warn“, „error“
- payload: Der Inhalt des Logs (z. B. Text oder JSON)
- additional fields: Zur Korrelation von Logs (z. B. Trace/Span, Tags, Labels)
Beispiel: So protokollieren Sie die Eingabe jeder Abfrage beim Entwickeln eines Agenten:
stdout oder 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
)
Python-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.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("GOOGLE_CLOUD_AGENT_ENGINE_ID", ""),
},
),
)
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,
)
Cloud Logging-Client
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("GOOGLE_CLOUD_AGENT_ENGINE_ID", ""),
},
),
)
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,
)
Wenn der Agent bereitgestellt und abgefragt wird, werden Log einträge generiert. Beispiel: Der folgende Code:
remote_agent = agent_engines.create(
MyAgent(),
requirements=["cloudpickle==3", "google-cloud-logging"],
)
remote_agent.query(input={"hello": "world"})
generiert einen Logeintrag ähnlich dem folgenden:
stdout oder 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"
}
Python-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-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"
}
Cloud Logging-Client
{
"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"
}
Logs für einen Agenten aufrufen
Sie können Ihre Logeinträge mit dem Log-Explorer aufrufen:
Bitten Sie Ihren Administrator, Ihnen die Rolle Logs Viewer (
roles/logging.viewer) für Ihr Projekt zuzuweisen, um die Berechtigung zum Aufrufen von Logs im Log-Explorer zu erhalten.Rufen Sie in der Google Cloud Console den Log-Explorer auf:
Wählen Sie oben auf der Seite Ihr Google Cloud Projekt aus (entsprechend
PROJECT_ID).Wählen Sie unter Ressourcentyp die Option Gemini Enterprise Agent Platform Reasoning Engine aus.
Bei Agenten, die auf dem Agent Development Kit basieren, können Sie Logs für Ihren Agenten auch in der Google Cloud Console über das Agent Runtime Dashboard aufrufen.
Laufzeitabfragen
Sie können Logs in Cloud Logging nach jedem unterstützten Vorgang eines bereitgestellten Agenten filtern. Filtern Sie dazu die Logs anhand des zugrunde liegenden REST-Endpunkts für jede Vorgangsabfrage:
POST /api/reasoning_engine: Für Abfragen an synchrone und asynchrone Methoden.POST /api/stream_reasoning_engine: Für Abfragen an Streaming- und asynchrone Streaming-Methoden.POST /api/bidi_reasoning_engine: Für Abfragen an bidirektionale Streaming Methoden.
Laufzeitabfragen werden
je nach Feld api_mode in der Liste der
unterstützten Vorgänge eines bereitgestellten Agenten an die REST-Endpunkte weitergeleitet.
Abfragen erstellen
Sie können den Log-Explorer verwenden, um Abfragen zu erstellen inkrementell. Abfragen werden in der Regel auf der Grundlage der folgenden Überlegungen erstellt:
- timeline: Nach relevanten Logeinträgen anhand der Zeit suchen
- scope: Nach relevanten Logeinträgen anhand kanonischer Attribute suchen
- resource: Von anderen Ressourcentypen in Ihrem Projekt trennen.
type: Wird im Log-Explorer als "Gemini Enterprise Agent Platform Reasoning Engine" und im Logeintrag als"aiplatform.googleapis.com/ReasoningEngine"angezeigt.labels: Für den Standort (LOCATION), das ProjektPROJECT_IDund die RessourceRESOURCE_ID.
- logName: Das Log, zu dem der Logeintrag gehört:
- Die Logeinträge zur Build-Zeit haben die Log-ID
reasoning_engine_build. - Die Logeinträge für
stdoutundstderrhaben die Log-IDreasoning_engine_stdoutbzw.reasoning_engine_stderr. - Die Logeinträge aus dem Python-Logging oder dem Cloud Logging-Client haben benutzerdefinierte Log-IDs, die auf Ihrem Code unter Logs für einen Agenten schreiben basieren.
- Die Logeinträge zur Build-Zeit haben die Log-ID
- trace und span: Für die Logs beim Tracing von Abfragen.
- severity: Für den Schweregrad des Logeintrags.
- insertId: Die eindeutige ID für einen Logeintrag.
- resource: Von anderen Ressourcentypen in Ihrem Projekt trennen.
- labels: Eine Map mit Schlüssel/Wert-Paaren, die zusätzliche Informationen zum Logeintrag enthält. Die Labels können benutzerdefiniert oder vom System definiert sein und sind nützlich, um Logs zu kategorisieren und die Suche im Log-Explorer zu erleichtern.
- payload: Der Inhalt des Logeintrags.
Das folgende Beispiel zeigt eine Abfrage
für alle INFO Logs eines bereitgestellten Agenten mit RESOURCE_ID:
resource.labels.reasoning_engine_id=RESOURCE_ID AND
severity=INFO
Sie können sie im Log-Explorer unter
https://https://console.cloud.google.com/logs/query;query=severity%3DINFO%0Aresource.labels.reasoning_engine_id%3D%22RESOURCE_ID%22;duration=DURATION?project=PROJECT_ID
aufrufen. Die Abfrage wurde entsprechend URL-codiert und die anderen Parameter sind:
DURATION: z. B.PT30Mfür die letzten 30 Minuten oderPT10Mfür die letzten 10 Minuten undPROJECT_ID: das Google Cloud Projekt.
Weitere Informationen finden Sie unter Abfragen mit der Logging-Abfragesprache erstellen und speichern.
Logs für einen Agenten abfragen
Für einen programmatischen Ansatz zum Abfragen von Logs gibt es zwei gängige Optionen:
- Structured Query Language (SQL). Log Analytics ermöglicht das Abfragen von Logansichten oder Analyseansichten.
- Logansichten haben ein festes Schema, das Logeinträgen entspricht.
- Analyseansichten haben ein Schema, das auf den Ergebnissen einer SQL-Abfrage basiert.
Python. Rufen Sie die Cloud Logging API über die Clientbibliothek für Ihre Programmiersprache auf (in diesem Fall 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))
Jeder entry entspricht einem LogEntry.
Details zu den Eingabeargumenten für logger.list_entries finden Sie in der
API-Referenz.
SQL
SELECT *
FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
SELECT *
FROM `analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`