OTLP-Logaufnahme – Übersicht

In diesem Dokument wird die Verwendung der Telemetry (OTLP) API, telemetry.googleapis.com, zum Erfassen von OTLP-formatierten Logs in Cloud Logging beschrieben, wo sie als Logeinträge gespeichert werden. Ein Beispiel finden Sie unter OTLP-formatierte Logs 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 finden Sie in der Telemetry (OTLP) API-Referenz.

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 ein beliebiges Protokoll verwenden. Da die meisten SDK-Exporteure jedoch kein dynamisches Aktualisieren von Tokens unterstützen, empfehlen wir, beim direkten Export 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 OTLP-formatierte Protokollanfrage 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 an Speicher und Abrechnung für Ihr Google Cloud -Projekt treten auf, wenn beide der folgenden Bedingungen erfüllt sind:

  • Das Feld resource enthält eine große Anzahl erforderlicher Attribute für Schlüssel und Werte. Diese Ressourcenattribute werden verwendet, um die überwachte Ressource in der resultierenden LogEntry zu bestimmen.

    Die überwachte Ressource besteht aus einem Typ der überwachten Cloud Logging-Ressource 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 OTLP-formatierten Logs erforderlich sind, finden Sie unter OTLP-Attribute zur Zuordnung von Ressourcentypen.

  • Das Feld scopeLogs enthält eine große Anzahl von Elementen in den logRecords-Arrays.

Zur Unterstützung der Aufnahme von OTLP-formatierten Logs enthält die Cloud Logging-Struktur LogEntry ein zusätzliches Feld: otel. Die Datenmodelle für OTLP und Cloud Logging stimmen nicht vollständig überein. Daher enthält das Feld otel eine Kopie der OTLP-Ressource, des OTLP-Bereichs und der OTLP-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 Feld resource (für die überwachte Ressource) und ein Feld otel, 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 im Feld otel Ressourceninformationen wiederholt werden, die auch im Feld „monitored-resource“ (resource) des Logeintrags verwendet werden. Sowohl das Feld resource des Logeintrags als auch die im Feld otel duplizierten Ressourceninformationen sind kostenpflichtig.

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 die Felder resource als auch otel. Wenn Sie eine große Anzahl von OTLP-logRecords in eine Anfrage einfügen, erhöht sich die Anzahl der abrechenbaren 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 nur ein logRecord-Element zu senden.

Limits und Kontingente

Informationen zu Limits und Kontingenten für die Protokollierung mit der Telemetry API finden Sie unter Limits und Kontingente für die Aufnahme von Logs.

Die Kontingente und Limits für Cloud Logging gelten auch, wenn Sie die Telemetry API für die Aufnahme von Logs verwenden.