Streaming und Live-Verfolgung von Logeinträgen

In diesem Dokument wird beschrieben, wie Sie Logeinträge in Echtzeit durch Streaming von und Live-Tailing. Mit dem Streaming von Logs können Sie Logeinträge in Echtzeit aufrufen. Diese Funktion ist im Log-Explorer verfügbar. Beim Live-Tailing können Sie Logeinträge in Echtzeit ansehen. gcloud CLI Befehl gcloud alpha logging tail und als Cloud Logging API-Methode entries.tail

Wenn Sie Logs mit dem Log-Explorer ansehen und analysieren, gcloud logging read oder die API-Methode entries.list, Sie sehen Logeinträge, die Von Cloud Logging gespeichert. Beim Streamen oder Live-Tail-Log-Einträge anzeigen, Anwendungen schreiben sie in die Cloud Logging API.

Logs im Log-Explorer streamen

Im Log-Explorer können Sie Ihre Logdaten in Echtzeit mithilfe von Logs streamen aufrufen. Wenn Sie Logs streamen verwenden, können Sie eine Abfrage hinzufügen, um nur die Logs zu streamen, die der Abfrage entsprechen. So streamen Sie Protokolle:

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.

    Zum Log-Explorer

    Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Monitoring ist.

  2. Geben Sie im Textfeld Abfrage eine Abfrage ein und klicken Sie dann auf Logs streamen.

    Beim Schreiben der Logdaten durch Logging werden nur Logs angezeigt, die den Abfrageergebnisse werden angezeigt. Wenn keine Abfrage bereitgestellt wird, zeigt Logging die zuletzt erfolgten gespeicherte Logeinträge. Die Protokolle werden weiter gestreamt, bis Sie die Bildlaufleiste im Bereich „Protokolle“ auswählen. Wenn das Streaming beendet wurde, wird die Schaltfläche Streaming neu starten angezeigt.

    Weitere Informationen zu Abfragen finden Sie unter Abfragen erstellen in der Log-Explorer

Live-Tailing in der Google Cloud CLI verwenden

Beim Live-Tailing können Sie Ihre Logeinträge in Echtzeit als Cloud Logging ansehen schreibt sie entweder mit der Google Cloud CLI oder der Cloud Logging API.

Die Live-Verfolgung wird für Log-Buckets mit Zugriffssteuerungen auf Feldebene nicht unterstützt. Sie können jedoch Logs für diese Buckets im Log-Explorer streamen.

Informationen zur API-Methode für die Live-Verfolgung finden Sie unter der Methode entries.tail.

gcloud alpha logging tail installieren

Zur Verwendung von gcloud alpha logging tail müssen Python 3 und das Python-Paket grpcio installiert sein.

Eine Anleitung zum Installieren von Python finden Sie auf der Python-Seite. Eine Anleitung zum Installieren des Python-Paketmanagers pip, der zur Installation des Pakets grpcio erforderlich ist, finden Sie auf der Seite zum Python-Paketinstallationsprogramm.

Führen Sie die folgenden Schritte aus, um gcloud alpha logging tail zu installieren:

  1. Prüfen Sie, ob die Google Cloud CLI installiert ist. Eine Anleitung zum Installieren der Google Cloud CLI finden Sie unter Google Cloud CLI installieren.

  2. Prüfen Sie, ob Sie Version 302.0.0 oder höher der gcloud CLI verwenden.

    gcloud version
    

    Eine Anleitung zum Aktualisieren der gcloud CLI finden Sie unter gcloud components update

  3. Installieren Sie die Alpha-Komponenten der gcloud CLI:

    gcloud components install alpha
    
  4. Führen Sie für MacOS-, Linux- und Cloud Shell-Nutzer Folgendes aus:

    1. Installieren Sie gRPC-Clientbibliotheken:

       sudo pip3 install grpcio
      
    2. Legen Sie die Umgebungsvariable CLOUDSDK_PYTHON_SITEPACKAGES auf einen beliebigen Wert fest:

       export CLOUDSDK_PYTHON_SITEPACKAGES=1
      
  5. Verwenden Sie die folgenden Befehle, um Ihre Google Cloud-Projekt-ID festzulegen und Authentifizieren:

    gcloud config set project PROJECT_ID
    gcloud auth login
    

    Informationen zum Abrufen der Projekt-ID finden Sie unter Erstellen und Verwalten Projekten.

  6. Prüfen Sie mit dem folgenden Befehl, ob gcloud alpha logging tail installiert ist:

    gcloud alpha logging tail
    

    Der Befehl zeigt die folgende Meldung an:

    Initializing tail session.

    Sie sehen die Logeinträge für Ihr Google Cloud-Projekt jetzt als Logging schreibt.

    Logeinträge während einer Live-Sitzung zur Live-Verfolgung

Weitere Informationen zur Verwendung der Live-Verfolgung finden Sie im gcloud alpha logging tail-Referenzhandbuch.

Zwischenspeichern und sortieren

Da Logging Logeinträge in chronologischer Reihenfolge empfangen kann, bietet die Live-Verfolgung eine Zwischenspeicherfenstereinstellung, sodass Sie den richtigen Kompromiss zwischen dem Aufrufen der Logeinträge beim Schreiben und dem Anzeigen in aufsteigender Reihenfolge finden können. Sie können für das Zwischenspeicherfenster einen Wert zwischen 0 und 60 Sekunden festlegen.

Beachten Sie die folgenden Eigenschaften des Zwischenspeicherfensters:

  • Das Zwischenspeicherfenster beträgt standardmäßig zwei Sekunden.

  • Logging verzögert das Schreiben der Logeinträge in Log-Buckets für die Dauer des Zwischenspeicherfensters.

  • Wenn ein Logeintrag außerhalb des Zwischenspeicherfensters geschrieben wird, gibt Logging die Logeinträge so zurück, wie sie empfangen werden.

Beim Konfigurieren des Pufferfensters Sie können die Protokolle beim Schreiben und die Einträge in der falschen Reihenfolge anzeigen.

Zwischenspeicherfenster Kompromiss
0 Sekunden Die neuesten zurückgegebenen Logeinträge, allerdings mit einer höheren Wahrscheinlichkeit, dass sie in der falschen Reihenfolge vorliegen
60 Sekunden Eine Verzögerung von 60 Sekunden, bevor die zurückgegebenen Einträge angezeigt werden, aber die meisten Logs werden in aufsteigender Reihenfolge zurückgegeben

Limits und Kontingente

In der folgenden Tabelle sind die Limits und Kontingente für die Live-Verfolgung aufgeführt:

Limits und Kontingente Wert
Zurückgegebene Einträge pro Minute 60.000
Wenn mehr als 60.000 Einträge mit einem Filter übereinstimmen, Logging gibt die Anzahl der Einträge in der Antwort zurück.
Live-Tailing-Sitzungen pro Google Cloud-Projekt öffnen 10

Clienteinschränkungen

Bei einem Google Cloud-Projekt, das viele Einträge schnell schreibt, kann Ihr Client sie möglicherweise nicht so schnell verarbeiten, wie sie geschrieben werden. In diesem Fall begrenzt Logging die Gesamtzahl der gesendeten Einträge, wobei die neuesten Einträge priorisiert werden. Am Ende der Verfolgungsitzung gibt Logging die Anzahl der Einträge zurück, die aufgrund der Limits des Clients nicht angezeigt wurden.

Live-Verfolgung mit Clientbibliotheken verwenden

Mit der Live-Verfolgung können Sie Ihre Logeinträge in Echtzeit anzeigen, während Cloud Logging sie schreibt. Informationen zur API-Methode für die Live-Verfolgung finden Sie unter der Methode entries.tail.

Die Live-Verfolgung wird für Log-Buckets mit Zugriffssteuerungen auf Feldebene nicht unterstützt. Sie können jedoch Logs für diese Buckets im Log-Explorer streamen.

Dieses Beispiel zeigt die Live-Verfolgung von Logeinträgen eines bestimmten Loggers.

Go

Informationen zum Installieren und Verwenden der Clientbibliothek für Logging finden Sie unter Logging von Clientbibliotheken

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Logging zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import (
	"context"
	"fmt"
	"io"

	logging "cloud.google.com/go/logging/apiv2"
	"cloud.google.com/go/logging/apiv2/loggingpb"
)

// tailLogs creates a channel to stream log entries that were recently ingested for a project
func tailLogs(projectID string) error {
	// projectID := "your_project_id"

	ctx := context.Background()
	client, err := logging.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient error: %w", err)
	}
	defer client.Close()

	stream, err := client.TailLogEntries(ctx)
	if err != nil {
		return fmt.Errorf("TailLogEntries error: %w", err)
	}
	defer stream.CloseSend()

	req := &loggingpb.TailLogEntriesRequest{
		ResourceNames: []string{
			"projects/" + projectID,
		},
	}
	if err := stream.Send(req); err != nil {
		return fmt.Errorf("stream.Send error: %w", err)
	}

	// read and print two or more streamed log entries
	for counter := 0; counter < 2; {
		resp, err := stream.Recv()
		if err == io.EOF {
			break
		}
		if err != nil {
			return fmt.Errorf("stream.Recv error: %w", err)
		}
		fmt.Printf("received:\n%v\n", resp)
		if resp.Entries != nil {
			counter += len(resp.Entries)
		}
	}
	return nil
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Logging finden Sie unter Logging von Clientbibliotheken

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Logging zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import com.google.cloud.logging.LogEntry;
import com.google.cloud.logging.LogEntryServerStream;
import com.google.cloud.logging.Logging;
import com.google.cloud.logging.Logging.TailOption;
import com.google.cloud.logging.LoggingOptions;

public class TailLogEntries {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Optionally provide the logname as an argument.
    String logName = args.length > 0 ? args[0] : "";

    LoggingOptions options = LoggingOptions.getDefaultInstance();
    try (Logging logging = options.getService()) {

      // Optionally compose a filter to tail log entries only from specific log
      LogEntryServerStream stream;

      if (logName != "") {
        stream =
            logging.tailLogEntries(
                TailOption.filter(
                    "logName=projects/" + options.getProjectId() + "/logs/" + logName));
      } else {
        stream = logging.tailLogEntries();
      }
      System.out.println("start streaming..");
      for (LogEntry log : stream) {
        System.out.println(log);
        // cancel infinite streaming after receiving first entry
        stream.cancel();
      }
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Logging finden Sie unter Logging-Clientbibliotheken.

Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Logging zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

const {Logging} = require('@google-cloud/logging');
const logging = new Logging();

/**
 * TODO(developer): Replace logName with the name of your log.
 */
const log = logging.log(logName);
console.log('running tail log entries test');

const stream = log
  .tailEntries({
    filter: 'timestamp > "2021-01-01T23:00:00Z"',
  })
  .on('error', console.error)
  .on('data', resp => {
    console.log(resp.entries);
    console.log(resp.suppressionInfo);
    // If you anticipate many results, you can end a stream early to prevent
    // unnecessary processing and API requests.
    stream.end();
  })
  .on('end', () => {
    console.log('log entry stream has ended');
  });

// Note: to get all project logs, invoke logging.tailEntries