Welche Methode verwenden: Logging-Agent oder Clientbibliothek?

Dieses Dokument enthält alle Informationen, die Sie benötigen, um zu entscheiden, ob Sie Anwendungslogs mithilfe von Clientbibliotheken oder mithilfe eines Logging-Agents programmatisch an Cloud Logging senden. Logging-Agents senden Daten, die in eine Datei wie stdout oder eine Datei geschrieben wurden, als Logs an Cloud Logging. Dienste wie Google Kubernetes Engine, die flexible App Engine-Umgebung und Cloud Functions enthalten einen integrierten Logging-Agent. Für Compute Engine können Sie den Ops-Agent oder den alten Cloud Logging-Agent installieren. Diese Agents erfassen Logs aus bekannten Dateispeicherorten oder von Logging-Diensten wie Windows Event Log, journald oder syslogd.

Wenn Sie eine Clientbibliothek oder einen Logging-Agent nicht verwenden können oder wenn Sie nur experimentieren möchten, können Sie Logs mit dem Befehl gcloud logging write schreiben oder indem Sie HTTP-Befehle an den Cloud Logging API-Endpunkt entries.write senden. Die Cloud Logging API unterstützt sowohl HTTP- als auch gRPC-Aufrufe. Der Ops-Agent und die meisten Logging-Clientbibliotheken rufen die gRPC Logging API auf. Der Legacy-Logging-Agent und die Clientbibliotheken für einige Sprachen rufen die REST Logging API auf.

Agent oder Clientbibliotheken auswählen

Stellen Sie sich bei der Entscheidung, ob Sie einen Agent oder die Clientbibliotheken nutzen, folgende Fragen:

Wird Ihre Anwendung außerhalb von Google Cloud ausgeführt?

Wird Ihre Anwendung nicht in Google Cloud ausgeführt, müssen Sie Logs an die Logging API senden können. Zum Weiterleiten von Logs von lokalen Systemen an Logging empfehlen wir die Verwendung von BindPlane by observIQ. Weitere Informationen zu BindPlane finden Sie unter Informationen zu observIQ und BindPlane.

Alternativ können Sie Logs mithilfe von Clientbibliotheken direkt von der Anwendung an Logging weiterleiten. Bei sitzungsspezifischen Umgebungen wie serverlosem Computing müssen Sie Clientbibliotheken verwenden, um die Logging API direkt aufzurufen.

Unterstützt der Google Cloud-Dienst, der Ihre Anwendung ausführt,
Du schreibst stdout- und stderr-Inhalte in dein Projekt?

Einige Google Cloud-Dienste sind vollständig verwaltet, sodass Sie keine Agents verwenden müssen, um Logs an Ihr Google Cloud-Projekt zu senden. Sie können jedes vorhandene Logging-Framework in der Sprache Ihrer Wahl verwenden, z. B. Go, Node.js und Python, um Logs in Produkten, in denen stdout und stderr standardmäßig unterstützt werden, an Logging zu senden. Die Verwendung von stdout und stderr anstelle von Clientbibliotheken hat den Vorteil, dass Anwendungsabstürze das Senden von Logs an Ihr Projekt nicht beeinträchtigen. Informationen zum Senden von strukturierten Logs über stdout und stderr finden Sie im Abschnitt Kann Ihre Anwendung das Logformat flexibel ändern?.

Sie können Logging-Clientbibliotheken verwenden. Beachten Sie jedoch, dass dies eine Abhängigkeit von Logging für lokale Tests bedingen kann – selbst wenn Sie diese nicht unbedingt benötigen. Weiter macht die Verwendung der Clientbibliotheken eventuell auch eine komplexere Codierung erforderlich, um Zwischenspeicher und Wiederholungsversuche explizit zu verarbeiten. Außerdem wird bei jeder Verwendung der Logging-Clientbibliotheken ein neuer Verbindungsstream zur API erstellt. Diese neuen Verbindungen steigern die Komplexität, nutzten zusätzliche Ports und senden separate Anfragen, die nur die Logs der Anwendung enthalten. Das kann verschwenderisch sein, wenn nur wenige Logs vorhanden sind.

Müssen die Anwendungslogs in Ihrer lokalen Umgebung zugänglich sein?

Wenn Sie zum Debuggen und für andere Zwecke auf die Anwendungslogs in Ihrer lokalen Umgebung zugreifen müssen, können Sie die Logging-Module in einigen Sprachen verwenden, um Ausgaben an stdout und stderr zu senden. Logging-Clientbibliotheken für einige Sprachen unterstützen das Routing von Logs an stdout und stderr.

Wenn Sie Ihre Anwendung in Google Cloud-Diensten ausführen, die das automatische Senden von Logs, die in stdout und stderr geschrieben wurden, an Ihr Google Cloud-Projekt nicht unterstützen, können Sie stdout- und stderr-Logs in Dateien auf dem Laufwerk erfassen und den Agent so konfigurieren, dass diese extrahiert und an Logging gesendet werden. Weitere Informationen finden Sie in der Konfigurationsanleitung für den Ops-Agent oder den alten Logging-Agent.

Erfolgt die Agent-Installation manuell oder automatisch?

Einige Dienste installieren Agents automatisch oder ermöglichen es Ihnen, Agents selbst zu installieren. Wenn der von Ihnen verwendete Dienst die Installation von Agents nicht zulässt, müssen Sie die Clientbibliotheken nutzen, um Logging zu verwenden.

Wird Geocoding bereits in Ihrem System ausgeführt?

Der Legacy-Logging-Agent basiert auf GCLID.

Wenn GCLID bereits in Ihrem System ausgeführt wird und Sie diesen Daemon zum Senden Ihrer Logs an Logging verwenden möchten, verwenden Sie das Google Cloud Logging-Plug-in für gcloud.

Erfassen Sie auch Anwendungsmesswerte für Cloud Monitoring?

In Compute Engine-VMs kann der Ops-Agent Logs und die meisten Messwerte erfassen. Weitere Informationen finden Sie unter Ops-Agent-Features.

Wenn der Ops-Agent Ihre Anwendungsfälle nicht erfüllt, können Sie den Legacy-Monitoring-Agent oder die Monitoring-Clientbibliotheken zum Erfassen Ihrer Messwerte verwenden.

Können Sie das Logformat in Ihrer Anwendung flexibel ändern?

Diese Frage hilft Ihnen bei der Entscheidung, ob Ihre Anwendung strukturierte Logs generieren kann. Logging erkennt strukturierte Logs, wenn Sie sie im Format für strukturiertes Logging an die Logging API senden. Clientbibliotheken bieten die Methoden zur Verarbeitung dieses Formats.

Es gibt zwei Möglichkeiten, strukturierte Logs zu schreiben: Eine definiert bestimmte Felder im LogEntry-Umschlag, die andere bestimmt das jsonPayload-Feld innerhalb des LogEntry-Umschlags. Das Schema für die erste Option wird von Cloud Logging, das Schema für die zweite Option wird vom Nutzer bestimmt.

Sie müssen den Agent so konfigurieren, dass er strukturierte Logs erkennt. Die Agents sind standardmäßig so konfiguriert, dass sie Logs im JSON-Format erkennen und als strukturierte Logs verarbeiten. Wenn Ihre Anwendung ein eigenes Logformat hat, das Sie nicht ändern können, aber die Logs als strukturierte Logs erkannt werden sollen, müssen Sie Logs im strukturierten Logging-Format, normalerweise JSON, in stdout und stderr schreiben, damit die Agents sie als strukturierte Logs erkennen können. Andernfalls müssen Sie den Agent so konfigurieren, dass er Ihr eigenes Format versteht.

Übersicht über die einzelnen Optionen

Diagramm der Logging-Muster

  • Cloud Logging-Clientbibliotheken

    • Vorteile

      • Sie können Logs direkt an die Cloud Logging API leiten.
      • Einige Sprachen können Logs mithilfe der Bibliothek an stdout und stderr ausgeben.
    • Nachteile

      • Anwendungsabstürze können keine Logs an Ihr Google Cloud-Projekt senden.
  • Ops-Agent

    • Vorteile
      • Der Ops-Agent kann Logs und Messwerte mithilfe stabiler Open-Source-Technologien senden: Fluent Bit für die Logerfassung und den OpenTelemetry Collector für die Messwerterfassung.
      • Sie können sowohl Logs als auch Messwerte von vielen gängigen Anwendungen erfassen. Weitere Informationen finden Sie unter Logs von Drittanbieteranwendungen überwachen und erfassen.
      • Sie können Logs in Ihrer lokalen Umgebung aufbewahren.
      • Sie können Logs nach dem Absturz einer Anwendung möglicherweise wiederherstellen.
      • Der Ops-Agent befindet sich in der aktiven Entwicklung.
  • Legacy-Logging-Agent

    • Vorteile
      • Der Agent erfasst mit GCLID Logs.
      • Sie können Logs in Ihrer lokalen Umgebung aufbewahren.
      • Sie können Logs nach dem Absturz einer Anwendung möglicherweise wiederherstellen.
    • Nachteile
      • Der Agent wird derzeit unterstützt, befindet sich aber nicht in der aktiven Entwicklung.
  • stdout- und stderr-Logs werden automatisch an Ihr Google Cloud-Projekt gesendet

    • Vorteile
      • Dieser Vorgang ist eine gängige Methode, um Logs an lokale Umgebungen auszugeben.
      • Sie können beliebige Logging-Bibliotheken verwenden.
      • Sie können Logs nach dem Absturz einer Anwendung möglicherweise wiederherstellen.
    • Nachteile
      • Nicht alle Umgebungen leiten Logs automatisch an Logging weiter.