Die Agent Platform kann für jede Inferenzanfrage, die Ihr Projekt verarbeitet, einen strukturierten Logeintrag schreiben. In jedem Eintrag werden Metadaten zur Anfrage aufgezeichnet: das Modell, die Region, die Tokenanzahl (einschließlich Eingabetokens, Ausgabetokens, im Cache gespeicherte Tokens, Thought-Tokens), der Burndown des bereitgestellten Durchsatzes, die End-to-End-Anfragelatenz, der Fehlercode und alle von Ihnen angehängten Header- oder Anfragelabels. Einträge werden an Cloud Logging gesendet und können mit SQL in Observability Analytics abgefragt werden. Informationen zum Aktivieren des Loggings finden Sie unter Metadatenlogs für Inferenzanfragen aktivieren.
Beim Logging von Inferenzanfragen werden nur Metadaten aufgezeichnet. Es werden keine Prompts oder Antworten aufgezeichnet. Wenn Sie Prompt- und Antwortinhalte benötigen, verwenden Sie stattdessen das Anfrage-Antwort-Logging.
Auf dieser Seite wird beschrieben, wie Sie Metadatenlogs für Inferenzanfragen aktivieren, was die einzelnen Einträge enthalten und wie Sie sie abfragen.
Anwendungsfälle
Metadatenlogs für Inferenzanfragen beantworten Fragen, die mit aggregierten Messwerten nicht beantwortet werden können:
- Sie können den Tokenverbrauch einem Team, einer Anwendung oder einem Mandanten zuordnen, indem Sie jeder Anfrage eigene Header-Labels, Anfrage-Labels oder beides hinzufügen.
- Sie können sehen, welche einzelnen Anfragen auf Ihr Kontingent für den bereitgestellten Durchsatz angerechnet und welche on demand verarbeitet wurden.
- Schlüsseln Sie Durchsatz, Latenz und Fehlerrate nach Header- oder Anfragelabels auf.
- Caching-Verhalten pro Anfrage statt insgesamt messen.
- Sie erhalten Einblick in die Nutzung auf Sekundenebene, z. B. warum ein Projekt 429-Fehler erhalten hat oder warum der bereitgestellte Durchsatz überschritten wurde. Schritte zur Behebung von 429-Fehlern finden Sie unter Fehlercode 429 beheben. Informationen zu den Sekunden, in denen sie aufgetreten sind, finden Sie unter Fehlerrate und Latenz nach Region.
Unterstützte API-Methoden für das Logging
Metadatenlogs für Inferenzanfragen werden für Folgendes unterstützt:
- Gemini-Modelle, die
generateContentoderstreamGenerateContentverwenden, einschließlich der Bildgenerierung über diese Methoden. - Claude-Modelle, die
rawPredictoderstreamRawPredictverwenden. Andere Partnermodelle werden nicht protokolliert. Informationen zu Claude-Feldnamen finden Sie unter Tokenanzahl für Claude-Modelle.
Der bereitgestellte Durchsatz und alle „Pay as you go“-Optionen werden unterstützt.
Folgendes wird nicht unterstützt:
chatCompletions.embedContent,predictundcountTokens. Modelle, die Bilder überpredictgenerieren, z. B. Imagen, werden nicht protokolliert.- Anfragen an optimierte Modelle, einschließlich Gemini-Modelle, die mit überwachter Feinabstimmung optimiert wurden.
- Abstimmungsjobs, Batchinferenz und alle anderen Vorgänge mit langer Ausführungszeit.
- Modelle, die Sie selbst in einem benutzerdefinierten Container bereitstellen.
Metadatenlogs für Inferenzanfragen aktivieren
Sie können Metadatenlogs für Inferenzanfragen für ein ganzes Projekt oder für ein bestimmtes Modell in einer bestimmten Region konfigurieren. Wenn Sie die Funktion auf Organisationsebene aktivieren müssen, wenden Sie sich bitte an Ihr Account-Management-Team. Es kann einige Minuten dauern, bis Logging-Konfigurationen wirksam werden.
Hinweis
- Prüfen Sie, ob Sie die folgenden IAM-Berechtigungen für das Projekt haben:
aiplatform.endpoints.setPublisherModelConfigundaiplatform.endpoints.fetchPublisherModelConfig, um die Einstellung zu ändern und zu lesen, sowielogging.buckets.get,logging.buckets.list,logging.buckets.updateundlogging.operations.get, um den Log-Bucket zu aktualisieren. Vordefinierte Rollen, die diese Berechtigungen enthalten, finden Sie unter Zugriffssteuerung und Zugriffssteuerung für Logging. - Entscheiden Sie, ob Sie ein Upgrade des Log-Buckets
_Defaultauf Observability Analytics durchführen möchten. Sie benötigen das Upgrade, um Einträge mit SQL abzufragen oder detaillierte Messwerte in der Google Cloud Console aufzurufen. Das Upgrade dauert einige Minuten und kann nicht rückgängig gemacht werden. Einträge, die vor dem Upgrade geschrieben wurden, können danach nicht mit SQL abgefragt werden. - Preise für Cloud Logging ansehen Einträge werden für die Aufbewahrungsdauer des Buckets gespeichert, standardmäßig 30 Tage. Es fallen Gebühren für die Aufnahme und Speicherung in Cloud Logging an. Informationen zum Schätzen Ihrer Kosten finden Sie unter Preise.
In der Console aktivieren
Wenn Sie das Logging in der Console aktivieren, wird es für jedes Modell im Projekt aktiviert, sowohl für Gemini als auch für Claude, für den bereitgestellten Durchsatz und für jede Pay-as-you-go-Option, die die Logs unterstützen. Außerdem wird der Log-Bucket _Default aktualisiert, falls noch kein Upgrade durchgeführt wurde. Damit wird der projektweite Standardwert festgelegt, der unter Konfigurationspriorität beschrieben wird. Prüfen Sie vor dem Start die Berechtigungen und das Bucket-Upgrade.
Rufen Sie in der Google Cloud Console die Seite Bereitgestellter Durchsatz auf.
Führen Sie einen der folgenden Schritte aus:
- Klicken Sie im Banner mit der Meldung Die Gemini Enterprise Agent Platform aktualisiert die Beobachtbarkeit auf Aktivieren.
- Klicken Sie in der Symbolleiste auf Messwerteinstellungen. Wählen Sie Detaillierte Messwerte aktivieren aus und klicken Sie dann auf Speichern.
Abbildung 1. Das Banner für das Beobachtbarkeits-Upgrade auf der Seite „Bereitgestellter Durchsatz“.
Abbildung 2. Der Bereich „Messwerteinstellungen“ mit der Option „Detaillierte Messwerte aktivieren“ Prüfen Sie im Dialogfeld Detaillierte Messwerte aktivieren? die Details zum Logging und zum Bucket-Upgrade und klicken Sie dann auf Aktivieren.
Das Dialogfeld wird geschlossen, sobald die Protokollierung aktiviert ist. Das Bucket-Upgrade wird im Hintergrund fortgesetzt und kann einige Minuten dauern. Während der Ausführung wird im Banner „Detaillierte Messwerte sind aktiviert und für den Log-Bucket ‚_Default‘ dieses Projekts wird ein Upgrade auf Observability Analytics durchgeführt“ angezeigt.
Wenn im Banner stattdessen angezeigt wird, dass der Bucket nicht aktualisiert wurde, klicken Sie auf Upgrade, um es noch einmal zu versuchen. Wenn der Bucket nicht aktualisiert werden kann, können anfragebezogene Logs nicht abgefragt werden. Klicken Sie auf Messwerteinstellungen und wählen Sie Detaillierte Messwerte deaktivieren aus, um die Gebühren zu beenden.
Rangfolge der Konfigurationen
Die Agent Platform löst die Einstellung für jede Anfrage in dieser Reihenfolge auf:
- Die Einstellung pro Modell und pro Region, falls eine festgelegt ist.
- Der projektweite Standardwert, wenn die Einstellung pro Modell nicht festgelegt ist.
- Wenn keines von beiden festgelegt ist, ist das Logging deaktiviert.
Die Einstellung pro Modell hat Vorrang vor der Standardeinstellung des Projekts. Sie können das Logging für das gesamte Projekt aktivieren und für ein Modell mit hohem Volumen in einer Region deaktivieren oder umgekehrt.
Mit der REST API aktivieren
Sie konfigurieren Metadatenlogs für Inferenzanfragen mit der Methode setPublisherModelConfig und setzen inferenceEventLoggingConfig.state auf ENABLED.
Wenn Sie den projektweiten Standardwert festlegen möchten, geben Sie das Projekt an:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID:setPublisherModelConfig" \
-d '{
"publisherModelConfig": {
"inferenceEventLoggingConfig": {"state": "ENABLED"}
},
"updateMask": "inferenceEventLoggingConfig"
}'
Wenn Sie ein Modell in einer Region überschreiben möchten, adressieren Sie das Publisher-Modell:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/PUBLISHER/models/MODEL:setPublisherModelConfig" \
-d '{
"publisherModelConfig": {
"inferenceEventLoggingConfig": {"state": "ENABLED"}
},
"updateMask": "inferenceEventLoggingConfig"
}'
Setzen Sie PUBLISHER für Gemini-Modelle auf google und für Claude-Modelle auf anthropic. Wenn Sie beispielsweise das Logging für Claude Sonnet 4.5 am globalen Endpunkt aktivieren möchten, verwenden Sie publishers/anthropic/models/claude-sonnet-4-5, wobei LOCATION auf global festgelegt ist. Informationen zu Claude-Modell-IDs finden Sie unter Claude-Modelle.
Die Methode gibt einen Vorgang mit langer Ausführungszeit zurück.
Logging-Konfiguration abrufen
Lesen Sie die aktuelle Konfiguration mit der Methode fetchPublisherModelConfig. Verwenden Sie das Projekt, um den projektweiten Standardwert zu lesen, oder ein Publisher-Modell, um dessen Überschreibung zu lesen.
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID:fetchPublisherModelConfig"
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/PUBLISHER/models/MODEL:fetchPublisherModelConfig"
Die Antwort enthält die Einstellungen, die für diese Ressource festgelegt sind:
{
"inferenceEventLoggingConfig": {
"state": "ENABLED"
}
}
Prüfen, ob das Logging funktioniert
- Senden Sie eine Anfrage an ein von Ihnen aktiviertes Modell.
Führen Sie im Log-Explorer die folgende Abfrage aus. Die meisten Einträge werden innerhalb von 12 Sekunden angezeigt. Es kann jedoch bis zu 5 Minuten dauern.
logName="projects/PROJECT_ID/logs/aiplatform.googleapis.com%2Finference_request"Öffnen Sie Observability Analytics und führen Sie eine beliebige Beispielabfrage aus, um zu prüfen, ob SQL funktioniert. Wenn die Abfrage meldet, dass das Dataset nicht gefunden wurde, ist das Log-Bucket-Upgrade noch nicht abgeschlossen.
Logging deaktivieren
Rufen Sie in der Google Cloud Console die Seite Bereitgestellter Durchsatz auf, klicken Sie auf Messwerteinstellungen, wählen Sie Detaillierte Messwerte deaktivieren aus und klicken Sie dann auf Speichern. Dadurch wird In der Console aktivieren rückgängig gemacht.
Gehen Sie bei der REST API so vor:
Deaktivieren Sie das Logging, indem Sie inferenceEventLoggingConfig.state für dieselbe Ressource, für die Sie es aktiviert haben, auf DISABLED setzen.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID:setPublisherModelConfig" \
-d '{
"publisherModelConfig": {
"inferenceEventLoggingConfig": {"state": "DISABLED"}
},
"updateMask": "inferenceEventLoggingConfig"
}'
Da eine modellspezifische Einstellung Vorrang vor der Standardeinstellung des Projekts hat, wird ein explizit aktiviertes Modell durch die Deaktivierung auf Projektebene nicht deaktiviert. Löschen oder deaktivieren Sie auch die modellspezifische Einstellung.
Wo Logs geschrieben werden
Einträge werden in das folgende Log geschrieben:
projects/PROJECT_NUMBER/logs/aiplatform.googleapis.com%2Finference_request
Von dort aus haben Sie die Standard-Cloud Logging-Ziele:
- Observability Analytics: Fragen Sie die Einträge mit SQL in Observability Analytics in derGoogle Cloud Console ab.
- Verknüpftes BigQuery-Dataset: Verknüpfen Sie ein Dataset, um dieselben Daten aus BigQuery zu lesen. Weitere Informationen finden Sie unter Verknüpftes BigQuery-Dataset abfragen.
- Zusammengefasste Senken: Einträge aus jedem Projekt in einem Ordner oder einer Organisation mit einer einzigen Senke erfassen. Filtern Sie nach
logName="projects/*/logs/aiplatform.googleapis.com%2Finference_request".
Informationen zum Erfassen von Einträgen aus jedem Projekt in einem Ordner oder einer Organisation finden Sie unter Übersicht über aggregierte Senken.
Einträge können kurz nach Abschluss der Anfrage abgefragt werden. Die meisten Einträge sind innerhalb von 12 Sekunden abfragbar. Es kann jedoch bis zu 5 Minuten dauern.
Schema für Logeinträge
Jeder Eintrag besteht aus zwei Teilen, die Sie separat abfragen: der überwachten Ressource und ihren Labels, die angeben, was die Anfrage verarbeitet hat, und der JSON-Nutzlast, die aufzeichnet, was die Anfrage getan hat. In den folgenden Abschnitten werden beide beschrieben.
Ressourcenlabels
Für freigegebene Publisher-Modelle ist der Typ der überwachten Ressource aiplatform.googleapis.com/PublisherModel mit den folgenden Labels.
| Label | Typ | Hinweise |
|---|---|---|
resource_container |
STRING |
Das Projekt, das die Anfrage bereitgestellt hat. |
location |
STRING |
Die Region, die die Anfrage verarbeitet hat, z. B. us-central1. Anfragen, die an den globalen Endpunkt gesendet werden, melden global. |
publisher |
STRING |
Der Modell-Publisher, z. B. google oder anthropic. |
model_user_id |
STRING |
Das Modell, z. B. gemini-2.5-pro. |
Nutzlastfelder
| Feldname | Typ | Hinweise |
|---|---|---|
method |
ENUM |
GENERATE_CONTENT, STREAM_GENERATE_CONTENT, RAW_PREDICT oder STREAM_RAW_PREDICT. |
trafficType |
ENUM |
Die Nutzungsoption, die die Anfrage verarbeitet hat. Aktuelle Werte sind PROVISIONED_THROUGHPUT, ON_DEMAND, ON_DEMAND_FLEX und ON_DEMAND_PRIORITY. Fehlt bei fehlgeschlagenen Anfragen. |
requestStartTime |
TIMESTAMP |
Der Zeitpunkt, zu dem das bereitstellende Frontend die Anfrage zugelassen hat. |
requestDuration |
STRING |
End-to-End-Bereitstellungslatenz, formatiert als Dauerstring, z. B. 3.53s. |
generateContentDetails.usageMetadata |
JSON |
Tokenanzahl für generateContent und streamGenerateContent, einschließlich Aufschlüsselung nach Modalität. Die Bildausgabe wird hier als IMAGE-Eintrag in candidatesTokensDetails angezeigt. |
rawPredictDetails.usageMetadata |
JSON |
Tokenanzahl für rawPredict und streamRawPredict, einschließlich Partnermodellen. |
provisionedThroughput |
JSON |
Vorhanden für Traffic mit bereitgestelltem Durchsatz. |
httpHeaders |
JSON |
Erfasste Anfrageheader. |
error |
JSON |
Nur vorhanden, wenn der Schweregrad ERROR ist. |
principal |
JSON |
Das Dienstkonto, von dem die Anfrage stammt, falls verfügbar. |
Das Feld LogEntry.labels enthält gen_ai.operation.name, das den semantischen Konventionen von OpenTelemetry für generative KI entspricht. Sowohl generateContent als auch streamGenerateContent melden generate_content. Sowohl rawPredict als auch streamRawPredict melden raw_predict.
Felder für bereitgestellten Durchsatz
| Feldname | Typ | Hinweise |
|---|---|---|
ptChargedInputTokenCount |
INT64 |
Eingabetokens, die auf Ihr Kontingent für Bereitgestellten Durchsatz angerechnet werden, nachdem die Burndown-Raten angewendet wurden. |
ptChargedOutputTokenCount |
INT64 |
Ausgabetokens, die auf Ihr Kontingent für bereitgestellten Durchsatz angerechnet werden, nachdem die Burndown-Raten angewendet wurden. |
accountingResource |
STRING |
Das Projekt, dessen Zusicherung für bereitgestellten Durchsatz für die Anfrage verwendet wurde. |
Spillover-Anfragen identifizieren
Eine Anfrage wird als „Überlauf“ bezeichnet, wenn sie für den bereitgestellten Durchsatz infrage kam, aber on demand verarbeitet wurde, weil Ihr Durchsatz aufgebraucht war. Ein Überlaufeintrag hat den trafficType-Wert ON_DEMAND und kein provisionedThroughput-Objekt. Eine normale „Pay as you go“-Anfrage sieht genauso aus. Verwenden Sie daher die folgenden Regeln, um sie zu unterscheiden:
- Wenn Sie
X-Vertex-AI-LLM-Request-Typemit dem Wertsharedgesendet haben, haben Sie die Anfrage absichtlich an das „Pay as you go“-Modell weitergeleitet. Es ist kein Spillover. - Wenn Sie keinen
X-Vertex-AI-LLM-Request-Type-Header oder einen anderen Wert alsdedicatedodersharedgesendet haben und der EintragON_DEMANDmeldet, wurde die Anfrage überlastet, sofern Sie für dieses Modell in dieser Region einen bereitgestellten Durchsatz haben. - Wenn Sie keinen bereitgestellten Durchsatz für das Modell haben, wird jeder
ON_DEMAND-Eintrag als normales „Pay as you go“ abgerechnet.
Informationen zu den Headerwerten finden Sie unter Bereitgestellten Durchsatz verwenden.
Eine Abfrage, die Spillover-Anfragen zählt, finden Sie unter Spillover nach Minute.
Herabgestufte Anfragen identifizieren
Eine Anfrage wird herabgestuft, wenn Sie eine „Pay as you go“-Option angefordert haben und diese über eine andere Option bereitgestellt wurde. Vergleichen Sie den von Ihnen gesendeten X-Vertex-AI-LLM-Shared-Request-Type-Header mit der trafficType, die die Anfrage verarbeitet hat:
| Gesendeter Headerwert | trafficType, wenn wie angefordert ausgeliefert |
|---|---|
priority |
ON_DEMAND_PRIORITY |
flex |
ON_DEMAND_FLEX |
Jeder andere trafficType bei einem erfolgreichen Eintrag bedeutet, dass die Anfrage herabgestuft wurde oder dass das Modell die von Ihnen angeforderte Option nicht bietet. Eine Abfrage finden Sie unter Downgrades nach Modell.
Fehlercodes
Fehlgeschlagene Anfragen werden mit dem Schweregrad ERROR geschrieben und enthalten ein error-Objekt mit einem gRPC-Statuscode und einem kanonischen Grund. Der Grund ist ein fester String. Sie enthält nie Prompt-Text, Antworttext oder Ihre Headerwerte.
| Code | Status | Typischer HTTP-Status |
|---|---|---|
8 |
Die Ressource ist erschöpft, z. B. ein Kontingentlimit. | 429 |
4 |
Die Frist ist abgelaufen, bevor der Vorgang abgeschlossen wurde. | 504 |
14 |
Der Dienst ist nicht verfügbar. | 503 |
13 |
Ein interner Fehler ist aufgetreten. | 500 |
3 |
Die Anfrage enthält ein ungültiges Argument. | 400 |
7 |
Der Aufrufer hat keine Berechtigung. | 403 |
5 |
Die angeforderte Entität wurde nicht gefunden. | 404 |
Benutzerdefinierte Header-Labels anhängen
Wenn Sie die Nutzung Ihren eigenen Dimensionen zuordnen möchten, z. B. einem Team, einer Anwendung oder einem Mandanten, senden Sie Anfrageheader mit dem Präfix x-goog-agent-platform-observability-label-:
x-goog-agent-platform-observability-label-team: payments
x-goog-agent-platform-observability-label-application: invoice-ocr
Jeder Header wird im Eintrag unter jsonPayload.httpHeaders angezeigt. Header-Labels funktionieren bei Gemini-Modellen mit generateContent und streamGenerateContent und bei Claude-Modellen mit rawPredict und streamRawPredict, bei bereitgestelltem Durchsatz und bei jeder „Pay as you go“-Option.
Beispiele für API-Aufrufe mit Header-Labels, die von ihnen erzeugten Logeinträge, unterstützte Modelle, Limits und den Vergleich von Header-Labels mit Anfrage-Labels finden Sie unter Benutzerdefinierte Metadaten-Labels. Informationen zum Abfragen finden Sie unter Nutzung nach benutzerdefiniertem Header-Label.
Logs mit dem Log-Explorer abfragen
Verwenden Sie den Log-Explorer, um einzelne Inferenzanfragen zu finden und zu prüfen. Außer der Aktivierung des Loggings ist keine Einrichtung erforderlich. Die Logs werden direkt gelesen, sodass Einträge sofort nach ihrem Eingang sichtbar sind.
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf und geben Sie im Feld des Abfrageeditors eine Abfrage in der Logging-Abfragesprache ein. Weitere Informationen zu den Bereichen und Steuerelementen finden Sie unter Oberfläche des Log-Explorers.
Beginnen Sie mit dem Lognamen, der jeden Inferenzanfrageeintrag im Projekt auswählt:
logName="projects/PROJECT_ID/logs/aiplatform.googleapis.com%2Finference_request"
Fügen Sie Begriffe hinzu, um die Ergebnisse einzugrenzen. Begriffe in separaten Zeilen werden mit AND kombiniert.
- Wenn Sie Anfragen auswählen möchten, die von einer Region bedient werden, fügen Sie
resource.labels.location="us-central1"hinzu. - Wenn Sie eine API-Methode auswählen möchten, fügen Sie
jsonPayload.method="GENERATE_CONTENT"hinzu. - Wenn Sie nur Traffic für Bereitgestellten Durchsatz auswählen möchten, fügen Sie
jsonPayload.trafficType="PROVISIONED_THROUGHPUT"hinzu. - Wenn Sie nur Kontingentfehler auswählen möchten, fügen Sie
severity=ERRORundjsonPayload.error.code=8hinzu. - Wenn Sie einen benutzerdefinierten Header-Labelwert auswählen möchten, fügen Sie
jsonPayload.httpHeaders."x-goog-agent-platform-observability-label-team".values="payments"hinzu.
Der Log-Explorer filtert und zeigt Einträge an. Sie werden nicht zusammengefasst. Wenn Sie Ihre Einträge zählen, gruppieren oder in einem Diagramm darstellen möchten, verwenden Sie Observability Analytics. Klicken Sie in der Symbolleiste Abfrageergebnisse auf Ergebnisse analysieren, um die aktuelle Abfrage zu übertragen. Diese Schaltfläche wird erst angezeigt, nachdem der Log-Bucket aktualisiert wurde.
Logs mit Observability Analytics abfragen und analysieren
Mit Observability Analytics können Sie Logs abfragen und analysieren.
Hinweis
Observability Analytics beantwortet Fragen, die der Log-Explorer nicht beantworten kann. Der Log-Explorer findet und zeigt einzelne Einträge an. Das ist genau das, was Sie brauchen, wenn Sie eine bestimmte Anfrage suchen. Observability Analytics führt SQL-Abfragen für den gesamten Satz aus, sodass Perzentile gezählt, gruppiert, verknüpft und berechnet werden können. Jede Frage in diesem Abschnitt erfordert eine Aggregation: Ausgaben pro Team, Burndown pro Projekt und p95-Latenz pro Region können nicht für jeden Eintrag einzeln beantwortet werden.
Dazu muss der Log-Bucket _Default in Ihrem Projekt auf Observability Analytics aktualisiert werden. Weitere Informationen finden Sie unter Log-Buckets konfigurieren.
Die folgenden Beispiele werden in Observability Analytics ausgeführt. Ersetzen Sie PROJECT_ID durch Ihr Projekt.
Durchsatz nach Region und Modell
SELECT
JSON_VALUE(resource.labels.location) AS region,
JSON_VALUE(resource.labels.model_user_id) AS model,
JSON_VALUE(json_payload.trafficType) AS traffic_type,
COUNT(*) AS requests,
SUM(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.promptTokenCount) AS INT64)) AS input_tokens,
SUM(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.candidatesTokenCount) AS INT64)) AS output_tokens
FROM `PROJECT_ID.global._Default._Default`
WHERE log_id = "aiplatform.googleapis.com/inference_request"
AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR)
GROUP BY region, model, traffic_type
ORDER BY requests DESC
Burndown des bereitgestellten Durchsatzes nach Projekt
SELECT
JSON_VALUE(resource.labels.location) AS region,
JSON_VALUE(json_payload.provisionedThroughput.accountingResource) AS pt_project,
COUNTIF(JSON_VALUE(json_payload.trafficType) = "PROVISIONED_THROUGHPUT") AS pt_requests,
COUNTIF(JSON_VALUE(json_payload.trafficType) = "ON_DEMAND") AS on_demand_requests,
SUM(CAST(JSON_VALUE(json_payload.provisionedThroughput.ptChargedInputTokenCount) AS INT64)) AS pt_input_tokens,
SUM(CAST(JSON_VALUE(json_payload.provisionedThroughput.ptChargedOutputTokenCount) AS INT64)) AS pt_output_tokens
FROM `PROJECT_ID.global._Default._Default`
WHERE log_id = "aiplatform.googleapis.com/inference_request"
AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR)
GROUP BY region, pt_project
ORDER BY pt_input_tokens DESC
Nutzung nach benutzerdefiniertem Header-Label
SELECT
JSON_VALUE(json_payload.httpHeaders
["x-goog-agent-platform-observability-label-team"].values[0]) AS team,
COUNT(*) AS requests,
SUM(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.totalTokenCount) AS INT64)) AS total_tokens
FROM `PROJECT_ID.global._Default._Default`
WHERE log_id = "aiplatform.googleapis.com/inference_request"
AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
GROUP BY team
ORDER BY total_tokens DESC
Verbrauchte Tokens pro Minute, Gemini und Claude im Vergleich
Diese Abfrage gibt die verbrauchten Tokens pro Minute in einer Spalte pro Publisher aus. In jeder Spalte werden Tokentypen auf dieselbe Weise gewichtet wie der Messwert publisher/online_serving/consumed_token_throughput für diesen Publisher. Jede Spalte entspricht also Cloud Monitoring. Gemini und Claude gewichten Ausgabe- und Cache-Tokens unterschiedlich. Addieren Sie die beiden Spalten also nicht. Informationen zu den Claude-Feldern finden Sie unter Tokenanzahl für Claude-Modelle.
SELECT
TIMESTAMP_TRUNC(timestamp, MINUTE) AS minute_ts,
SUM(IF(JSON_VALUE(resource.labels.publisher) = "google",
IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.promptTokenCount) AS INT64), 0)
+ IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.toolUsePromptTokenCount) AS INT64), 0)
- 0.9 * IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.cachedContentTokenCount) AS INT64), 0)
+ IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.candidatesTokenCount) AS INT64), 0)
+ IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.thoughtsTokenCount) AS INT64), 0), 0)) AS gemini_consumed_tokens,
SUM(IF(JSON_VALUE(resource.labels.publisher) = "anthropic",
IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.input_tokens) AS INT64), 0)
+ 0.1 * IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.cache_read_input_tokens) AS INT64), 0)
+ 1.25 * IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.cache_creation_input_tokens) AS INT64), 0)
+ 0.75 * IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.cache_creation.ephemeral_1h_input_tokens) AS INT64), 0)
+ 5 * IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.output_tokens) AS INT64), 0), 0)) AS claude_consumed_tokens
FROM `PROJECT_ID.global._Default._Default`
WHERE log_id = "aiplatform.googleapis.com/inference_request"
AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR)
GROUP BY minute_ts
ORDER BY minute_ts DESC
Cache-Trefferquote bei Gemini und Claude
Die Cache-Trefferquote ist die Anzahl der im Cache gespeicherten Eingabetokens geteilt durch die Gesamtzahl der Eingabetokens. Die Gemini-Eingabe enthält Tokens für die Toolnutzung, da diese vom Cache abgedeckt werden können. Claude-Eingabe ist die Eingabe ohne Cache plus Cache-Lesevorgänge plus Cache-Schreibvorgänge. Informationen dazu, wie die einzelnen Publisher Daten im Cache speichern, finden Sie unter Kontext-Caching – Übersicht und Claude-Prompt-Caching.
SELECT
JSON_VALUE(resource.labels.model_user_id) AS model,
JSON_VALUE(json_payload.trafficType) AS traffic_type,
ROUND(100 * SAFE_DIVIDE(
SUM(IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.cachedContentTokenCount) AS INT64), 0)
+ IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.cache_read_input_tokens) AS INT64), 0)),
SUM(GREATEST(
IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.promptTokenCount) AS INT64), 0)
+ IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.toolUsePromptTokenCount) AS INT64), 0),
IFNULL(CAST(JSON_VALUE(json_payload.generateContentDetails.usageMetadata.cachedContentTokenCount) AS INT64), 0))
+ IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.input_tokens) AS INT64), 0)
+ IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.cache_read_input_tokens) AS INT64), 0)
+ IFNULL(CAST(JSON_VALUE(json_payload.rawPredictDetails.usageMetadata.cache_creation_input_tokens) AS INT64), 0))), 1) AS cache_hit_rate_pct
FROM `PROJECT_ID.global._Default._Default`
WHERE log_id = "aiplatform.googleapis.com/inference_request"
AND JSON_VALUE(json_payload.trafficType) IS NOT NULL
AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
GROUP BY model, traffic_type
ORDER BY model, traffic_type
Downgrades nach Modell
Bei dieser Abfrage wird die Pay-as-you-go-Option, die für jede Anfrage angefordert wurde, mit der Option verglichen, die sie bedient hat. Informationen dazu, wie Downgrades identifiziert werden, finden Sie unter Herabgestufte Anfragen identifizieren.
WITH entries AS (
SELECT
JSON_VALUE(resource.labels.model_user_id) AS model,
severity,
JSON_VALUE(json_payload.trafficType) AS served,
(SELECT LOWER(v)
FROM UNNEST(JSON_VALUE_ARRAY(json_payload.httpHeaders["x-vertex-ai-llm-shared-request-type"].values)) AS v
WHERE LOWER(v) IN ("priority", "flex")
LIMIT 1) AS requested
FROM `PROJECT_ID.global._Default._Default`
WHERE log_id = "aiplatform.googleapis.com/inference_request"
AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
)
SELECT
model,
requested,
COUNTIF(served = CONCAT("ON_DEMAND_", UPPER(requested))) AS served_as_requested,
COUNTIF(served IS NOT NULL
AND served != CONCAT("ON_DEMAND_", UPPER(requested))) AS downgraded,
COUNTIF(severity = "ERROR") AS failed
FROM entries
WHERE requested IS NOT NULL
GROUP BY model, requested
ORDER BY downgraded DESC
Überlauf nach Minute
Diese Abfrage zählt die Überlaufanfragen pro Minute für jedes Modell, das im Zeitfenster Traffic mit bereitgestelltem Durchsatz hatte. Informationen dazu, wie Überlaufanfragen identifiziert werden, finden Sie unter Überlaufanfragen identifizieren.
WITH entries AS (
SELECT
timestamp,
JSON_VALUE(resource.labels.location) AS region,
JSON_VALUE(resource.labels.model_user_id) AS model,
JSON_VALUE(json_payload.trafficType) AS traffic_type,
EXISTS(
SELECT 1
FROM UNNEST(JSON_VALUE_ARRAY(json_payload.httpHeaders["x-vertex-ai-llm-request-type"].values)) AS v
WHERE LOWER(v) IN ("dedicated", "shared")) AS routed_by_header
FROM `PROJECT_ID.global._Default._Default`
WHERE log_id = "aiplatform.googleapis.com/inference_request"
AND severity = "INFO"
AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR)
),
pt_models AS (
SELECT DISTINCT region, model FROM entries WHERE traffic_type = "PROVISIONED_THROUGHPUT"
)
SELECT
TIMESTAMP_TRUNC(e.timestamp, MINUTE) AS minute_ts,
e.region,
e.model,
COUNTIF(e.traffic_type = "PROVISIONED_THROUGHPUT") AS pt_requests,
COUNTIF(e.traffic_type = "ON_DEMAND" AND NOT e.routed_by_header) AS spillover_requests
FROM entries AS e
JOIN pt_models USING (region, model)
GROUP BY minute_ts, e.region, e.model
HAVING spillover_requests > 0
ORDER BY minute_ts DESC
Fehlerrate und Latenz nach Region
SELECT
JSON_VALUE(resource.labels.location) AS region,
TIMESTAMP_TRUNC(timestamp, MINUTE) AS minute_ts,
COUNT(*) AS total,
COUNTIF(severity = "ERROR") AS errors,
COUNTIF(CAST(JSON_VALUE(json_payload.error.code) AS INT64) = 8) AS resource_exhausted,
APPROX_QUANTILES(
CAST(REGEXP_REPLACE(JSON_VALUE(json_payload.requestDuration), r"s$", "") AS FLOAT64),
100)[OFFSET(95)] AS p95_latency_seconds
FROM `PROJECT_ID.global._Default._Default`
WHERE log_id = "aiplatform.googleapis.com/inference_request"
AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR)
GROUP BY region, minute_ts
ORDER BY minute_ts DESC
Tokenanzahl für Claude-Modelle
Claude-Modelle melden die Nutzung unter rawPredictDetails.usageMetadata mit den Claude API-Feldnamen. Sowohl rawPredict als auch streamRawPredict schreiben dieselben Felder. Beim Streaming werden im Log die im Stream gemeldeten Nutzungsdaten zusammengeführt.
| Feld | Was gezählt wird |
|---|---|
input_tokens |
Eingabetokens, die nicht aus dem Cache gelesen oder in den Cache geschrieben wurden. |
cache_read_input_tokens |
Aus dem Prompt-Cache gelesene Eingabetokens. |
cache_creation_input_tokens |
Eingabetokens, die in den Prompt-Cache geschrieben wurden, beide TTLs kombiniert. |
cache_creation.ephemeral_5m_input_tokens |
Cache-Schreibvorgänge mit einer TTL von 5 Minuten. |
cache_creation.ephemeral_1h_input_tokens |
Cache-Schreibvorgänge mit einer TTL von 1 Stunde. |
output_tokens |
Ausgabetokens, einschließlich erweiterter Thinking-Funktion. Fügen Sie Thinking-Tokens nicht separat hinzu. |
Die Gesamteingabe für Claude ist input_tokens plus cache_read_input_tokens plus cache_creation_input_tokens. Gemini unterscheidet sich: promptTokenCount enthält bereits im Cache gespeicherte Tokens.
Claude-Einträge enthalten keine Aufschlüsselung nach Modalität. Headerlabels funktionieren für Gemini und Claude auf dieselbe Weise. Weitere Informationen finden Sie unter Benutzerdefinierte Headerlabels anhängen.
Preise
Das Logging von Metadaten für Inferenzanfragen schreibt in Cloud Logging und wird als Cloud Logging-Aufnahme und -Speicherung abgerechnet. Abfragen über Observability Analytics werden als Cloud Monitoring-Nutzung abgerechnet. Durch das Verknüpfen eines BigQuery-Datasets fallen keine BigQuery-Speichergebühren an.
Die Größe des Eintrags hängt von Ihren Anfragen ab, z. B. von der Anzahl der Headerlabels. Wenn Sie die Kosten schätzen möchten, aktivieren Sie das Logging für eine repräsentative Arbeitslast für einen Tag, messen Sie das aufgenommene Volumen mit der Logvolumenanalyse und projizieren Sie dann Ihr monatliches Volumen im Google Cloud -Preisrechner.
Nächste Schritte
- Modelle mit Messwerten überwachen
- Kosten mithilfe benutzerdefinierter Metadatenlabels überwachen
- Verwenden Sie das Anfrage-Antwort-Logging, wenn Sie Prompt- und Antwortinhalte benötigen.
- Informationen zum bereitgestellten Durchsatz
- Detaillierte Messwerte für den bereitgestellten Durchsatz in der Google Cloud Console ansehen.
- 429-Fehler beheben.
- Einträge aus jedem Projekt in einem Ordner oder einer Organisation mit aggregierten Senken erfassen.