OTLP-Logaufnahme – Übersicht

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 resource enthält eine große Anzahl erforderlicher Attribute für Schlüssel und Werte. Diese Ressourcenattribute werden verwendet, um die überwachte Ressource im resultierenden LogEntry zu 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 scopeLogs enthält eine große Anzahl von Elementen in den logRecords-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.