In diesem Dokument wird die Verwendung der
Telemetry (OTLP) API,
telemetry.googleapis.com, für die Aufnahme von Logs im OTLP-Format in
Cloud Logging beschrieben, wo sie als Logeinträge gespeichert werden.
Ein Beispiel finden Sie unter
Logs im OTLP-Format in die Telemetry API schreiben.
Sie können Logs auch aus Anwendungen, die SDKs verwenden, oder über einen OpenTelemetry Collector an die Telemetry API senden.
Informationen zur Telemetry API für Logs, Messwerte und Traces, siehe Referenz zur Telemetry (OTLP) API.
Protokollunterstützung
Der OTLP-Endpunkt unterstützt alle OTLP-Protokolle, einschließlich http/protobuf, http/json und grpc. Beim Exportieren aus einem OpenTelemetry Collector können Sie jedes der Protokolle verwenden. Da die meisten SDK-Exporteure jedoch keine dynamische Aktualisierung von Tokens unterstützen, empfehlen wir, beim direkten Exportieren aus SDKs nur den gRPC-OTLP-Exporter und nicht die HTTP-Exporter zu verwenden.
Abrechnung
Wenn Sie die Telemetry API zum Aufnehmen von Logs verwenden, können sich die Speicher- und Abrechnungswerte für Cloud Logging ändern. Eine Loganfrage im OTLP-Format in JSON hat die folgende allgemeine Struktur:
"resourceLogs": [
{
"resource": {
"attributes": [...]
},
"scopeLogs": [
{
"scope": { ...}
"logRecords": [...]
}
]
}
]
Jedes Element in jedem logRecords-Array wird zu einem einzelnen Cloud Logging-Logeintrag. Die größten Änderungen bei Speicher und Abrechnung für Ihr Google Cloud Projekt
treten auf, wenn beide der folgenden Bedingungen erfüllt sind:
Das Feld
resourceenthält eine große Anzahl erforderlicher Attribute für Schlüssel und Werte. Diese Ressourcenattribute werden verwendet, um die überwachte Ressource im resultierendenLogEntryzu bestimmen.Die überwachte Ressource besteht aus einem Typ der überwachten Ressource von Cloud Logging und Werten für die zugehörigen Labels. Einige Typen von überwachten Ressourcen haben nur wenige Labels, andere viele. Weitere Informationen dazu, welche Attribute für die Aufnahme von Logs im OTLP-Format erforderlich sind, finden Sie unter Zuordnung von OTLP-Attributen zu Ressourcentypen.
Das Feld
scopeLogsenthält eine große Anzahl von Elementen in denlogRecords-Arrays.
Zur Unterstützung der Aufnahme von Logs im OTLP-Format enthält die Cloud Logging
LogEntry-Struktur ein zusätzliches Feld
otel. Die Datenmodelle von OTLP und Cloud Logging stimmen nicht perfekt überein. Daher enthält das Feld otel eine Kopie der OTLP-Ressource, des Bereichs und der Entitäten aus der eingehenden OTLP-Anfrage.
Wenn Sie beispielsweise ein OTLP resourceLog wie das folgende an die
Telemetry API senden, enthält jeder resultierende Logeintrag ein resource Feld
(für die überwachte Ressource) und ein otel Feld, wie auf den anderen Tabs gezeigt:
resourceLog
{
"resourceLogs": [
{
"resource": {
"attributes": [
{
"key": "gcp.project_id",
"value": { "stringValue": "PROJECT_ID" }
},
{
"key": "gcp.resource_type",
"value": { "stringValue": "global" }
}
]
},
"scopeLogs": [
{
"scope": {
"name": "my.library",
"version": "1.0.0",
"attributes": [
{
"key": "my.scope.attribute",
"value": { "stringValue": "some scope attribute" }
}
]
},
"logRecords": [ ... ]
}
]
}
]
}
resource
{
...
"resource": {
"labels": {
"project_id": "PROJECT_ID"
},
"type": "global"
},
...
}
otel
{
...
"otel": {
"resource": {
"attributes": {
"gcp.project_id": "PROJECT_ID",
"gcp.resource_type": "global"
}
},
"scope": {
"attributes": {
"my.scope.attribute": "some scope attribute"
},
"name": "my.library",
"version": "1.0.0"
}
},
...
}
Cloud Logging kann keine anderen Ressourcen mit einem Logeintrag verknüpfen. Daher müssen alle Informationen zu OTLP-Ressourcen, -Bereichen und -Entitäten in jeden Logeintrag kopiert werden.
Durch diese Duplizierung bleiben so viele Informationen wie möglich aus der ursprünglichen Anfrage im resultierenden Logeintrag erhalten. Die Duplizierung bedeutet aber auch, dass das Feld otel Ressourceninformationen wiederholt, die auch im Feld für die überwachte Ressource (resource) des Logeintrags verwendet werden. Für das Feld resource des Logeintrags
fallen Kosten an, für die im Feld otel duplizierten Ressourceninformationen jedoch
nicht.
Wenn Sie eine große Anzahl von Logeinträgen in die OTLP-Anfrage aufnehmen, müssen die OTLP-Informationen in jeden resultierenden Logeintrag kopiert werden, sowohl in das Feld resource als auch in das Feld otel. Für den Speicher der Kopien des Felds otel fallen keine Kosten an, für den Speicher der zusätzlichen Kopien des Felds resource jedoch schon. Wenn Sie eine große Anzahl von OTLP-logRecords in eine Anfrage aufnehmen, steigt die Anzahl der kostenpflichtigen resource-Felder in Ihren Logeinträgen proportional zur Anzahl der OTLP-logRecords pro resource pro Anfrage.
Um die Menge der zusätzlich gespeicherten Informationen zu minimieren, empfehlen wir, pro Anfrage ein logRecord-Element zu senden.
Limits und Kontingente
Informationen zu Limits und Kontingenten im Zusammenhang mit der Verwendung der Telemetry API für das Logging finden Sie unter Limits und Kontingente für die Aufnahme von Logs.
Die Kontingente und Limits von Cloud Logging gelten auch bei der Verwendung von der Telemetry API für die Aufnahme von Logs.