Streaming und Live-Verfolgung von Logeinträgen

In diesem Dokument wird beschrieben, wie Sie Ihre Logeinträge durch Streaming und Live-Tailing in Echtzeit aufrufen. Durch Streaming von Logs können Sie Logeinträge in Echtzeit ansehen. Diese Funktion ist im Log-Explorer verfügbar. Mit Live-Tailing können Sie Logeinträge in Echtzeit ansehen. Es ist über den Befehl gcloud alpha logging tail der gcloud-Befehlszeile und die Cloud Logging API-Methode entries.tail verfügbar.

Wenn Sie Ihre Logs mit dem Log-Explorer, gcloud logging read oder der API-Methode entries.list aufrufen und analysieren, werden die von Cloud Logging gespeicherten Logeinträge angezeigt. Beim Streamen oder Live-Tail-Logeinträgen sehen Sie die Logeinträge, während sie von Ihren Anwendungen in die Cloud Logging API geschrieben werden.

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 Logs:

  1. Wählen Sie im Navigationsbereich der Google Cloud Console Logging und anschließend Log-Explorer aus:

    Zum Log-Explorer

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

    Während Logging die Logdaten schreibt, werden im Bereich Abfrageergebnisse nur Logs angezeigt, die mit der Abfrage übereinstimmen. Wenn keine Abfrage angegeben ist, zeigt Logging die kürzlich gespeicherten Logeinträge an. Das Streaming der Logs wird fortgesetzt, bis Sie im Logbereich die Bildlaufleiste auswählen. Nach Ende des Streamings wird die Schaltfläche Streaming neu starten angezeigt.

    Informationen zu Abfragen finden Sie unter Abfragen im Log-Explorer erstellen.

Live-Tailing in der Google Cloud CLI verwenden

Mit Live-Tailing können Sie Ihre Logeinträge in Echtzeit ansehen, während Cloud Logging sie schreibt. Verwenden Sie dazu entweder die Google Cloud CLI oder die Cloud Logging API.

Live-Tailing wird für Log-Buckets mit Zugriffssteuerungen auf Feldebene nicht unterstützt. Sie können jedoch im Log-Explorer Logs für diese Buckets 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 die 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 sich zu authentifizieren:

    gcloud config set project PROJECT_ID
    gcloud auth login
    

    Informationen zum Abrufen der Projekt-ID finden Sie unter Projekte erstellen und verwalten.

  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 jetzt die Logeinträge für Ihr Google Cloud-Projekt, während sie von Logging geschrieben werden.

    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 von Logeinträgen in Log-Buckets für die Dauer des Pufferfensters.

  • 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 müssen Sie einen Kompromiss zwischen dem Anzeigen von Logs beim Schreiben und der Anzeige der Einträge in falscher Reihenfolge eingehen.

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 einem Filter entsprechen, gibt Logging 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 diese möglicherweise nicht so schnell verarbeiten, wie sie gerade 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-Tailing 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.

Live-Tailing wird für Log-Buckets mit Zugriffssteuerungen auf Feldebene nicht unterstützt. Sie können jedoch im Log-Explorer Logs für diese Buckets 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-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"
	loggingpb "google.golang.org/genproto/googleapis/logging/v2"
)

// 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-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