Avvio del flusso e tailing in tempo reale delle voci di log

Questo documento descrive come visualizzare le voci di log in tempo reale tramite lo streaming e il live tailing. I log di streaming consentono di visualizzare le voci di log in tempo reale e sono disponibili in Esplora log. Il monitoraggio in tempo reale consente di visualizzare le voci di log in tempo reale ed è disponibile come comando gcloud CLI gcloud alpha logging tail e come metodo dell'API Cloud Logging entries.tail.

Quando visualizzi e analizzi i log utilizzando Esplora log, gcloud logging read o il metodo API entries.list, visualizzi le voci di log archiviate da Cloud Logging. Quando trasmetti in streaming o visualizzi le voci di log in tempo reale, le visualizzi man mano che le tue applicazioni le scrivono nell'API Cloud Logging.

Visualizzare i log in streaming in Esplora log

In Esplora log, puoi visualizzare i dati dei log in tempo reale utilizzando Avvia flusso di log. Quando utilizzi Stream log, puoi aggiungere una query per trasmettere in streaming solo i log che corrispondono alla query. Per trasmettere in streaming i log:

  1. Nella Google Cloud console, vai alla pagina Esplora log:

    Vai a Esplora log

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.

  2. Nel campo Query, inserisci una query e poi fai clic su Stream di log.

    Mentre Logging scrive i dati dei log, solo i log che corrispondono alla query vengono visualizzati nel riquadro Risultati delle query. Se non viene fornita una query, Logging mostra le voci di log archiviate di recente. I log continuano a essere trasmessi in streaming finché non selezioni la barra di scorrimento nel riquadro dei log. Quando lo streaming si interrompe, viene visualizzato un pulsante Riavvia streaming.

    Per informazioni sulle query, vedi Creare query in Esplora log.

Utilizzare il monitoraggio in tempo reale in Google Cloud CLI

Il tailing in tempo reale ti consente di visualizzare le voci di log in tempo reale man mano che Cloud Logging le scrive, utilizzando Google Cloud CLI o l'API Cloud Logging.

Il monitoraggio in tempo reale non è supportato per i bucket di log con controlli dell'accesso a livello di campo, ma puoi trasmettere in streaming i log per questi bucket in Esplora log.

Per informazioni sul metodo API per il tailing in tempo reale, consulta il metodo entries.tail.

Installazione di gcloud alpha logging tail in corso…

Per utilizzare gcloud alpha logging tail, devi avere Python 3 e il pacchetto Python grpcio installato.

Per istruzioni su come installare Python, visita la pagina di Python. Per istruzioni su come installare il gestore dei pacchetti Python, pip, necessario per installare il pacchetto grpcio, consulta la pagina del programma di installazione dei pacchetti Python.

Completa i seguenti passaggi per installare gcloud alpha logging tail:

  1. Verifica di aver installato Google Cloud CLI. Per istruzioni su come installare Google Cloud CLI, consulta Installazione di Google Cloud CLI.

  2. Verifica di utilizzare la versione 302.0.0 o successive di gcloud CLI.

    gcloud version
    

    Per istruzioni sull'aggiornamento di gcloud CLI, vedi gcloud components update.

  3. Installa i componenti alpha della gcloud CLI:

    gcloud components install alpha
    
  4. Per gli utenti di macOS, Linux e Cloud Shell:

    1. Installa le librerie client gRPC:

       sudo pip3 install grpcio
      
    2. Imposta la variabile di ambiente CLOUDSDK_PYTHON_SITEPACKAGES su un valore qualsiasi:

       export CLOUDSDK_PYTHON_SITEPACKAGES=1
      
  5. Utilizza i seguenti comandi per impostare l'ID progetto Google Cloud e per autenticarti:

    gcloud config set project PROJECT_ID
    gcloud auth login
    

    Per ottenere l'ID progetto, vedi Creazione e gestione dei progetti.

  6. Verifica che gcloud alpha logging tail sia installato eseguendo il seguente comando:

    gcloud alpha logging tail
    

    Il comando mostra il seguente messaggio:

    Initializing tail session.

    Ora stai visualizzando le voci di log per il tuo progetto Google Cloud man mano che Logging le scrive.

    Voci di log durante una sessione di logging in tempo reale.

Per ulteriori informazioni sull'utilizzo del live tailing, consulta la guida di riferimento di gcloud alpha logging tail.

Buffering e ordinamento

Poiché Logging può ricevere voci di log in ordine non cronologico, il monitoraggio in tempo reale fornisce un'impostazione della finestra del buffer per bilanciare il compromesso tra la visualizzazione delle voci di log durante la scrittura e la visualizzazione in ordine crescente. Puoi impostare la finestra del buffer tra 0 e 60 secondi.

Tieni presente le seguenti caratteristiche della finestra buffer:

  • La finestra del buffer predefinita è di due secondi.

  • Logging ritarda la scrittura delle voci di log nei bucket di log per la durata della finestra del buffer.

  • Se una voce di log viene scritta al di fuori della finestra del buffer, la registrazione restituisce le voci di log così come vengono ricevute.

Quando configuri la finestra del buffer, devi trovare un compromesso tra la visualizzazione dei log man mano che vengono scritti e la visualizzazione delle voci in ordine sparso.

Finestra di buffer Compromesso
0 secondi Vengono restituite le voci di log più recenti, ma con una maggiore probabilità che non siano in ordine.
60 secondi Un ritardo di 60 secondi prima di visualizzare le voci restituite, ma la maggior parte dei log viene restituita in ordine crescente.

Limiti e quote

La tabella seguente elenca i limiti e le quote per il monitoraggio in tempo reale:

Limiti e quote Valore
Voci restituite al minuto 60.000
Se più di 60.000 voci corrispondono a un filtro, la registrazione restituisce il conteggio delle voci nella risposta.
Sessioni aperte di logging in tempo reale per Google Cloud progetto 10

Limitazioni del client

Per un progetto che scrive rapidamente molte voci, il client potrebbe non essere in grado di utilizzarle alla stessa velocità con cui vengono scritte. Google Cloud In questo caso, la registrazione limita il numero totale di voci inviate, dando la priorità alle voci più recenti. Al termine della sessione finale, la registrazione restituisce il numero di voci non visualizzate a causa dei limiti del client.

Utilizzare il monitoraggio in tempo reale con le librerie client

Il monitoraggio in tempo reale consente di visualizzare le voci di log in tempo reale man mano che Cloud Logging le scrive. Per informazioni sul metodo API per il tailing in tempo reale, consulta il metodo entries.tail.

Il monitoraggio in tempo reale non è supportato per i bucket di log con controlli dell'accesso a livello di campo, ma puoi trasmettere in streaming i log per questi bucket in Esplora log.

Questo esempio mostra le voci di log di un determinato logger in tempo reale.

Go

Per scoprire come installare e utilizzare la libreria client per Logging, consulta la sezione Librerie client di Logging.

Per eseguire l'autenticazione in Logging, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Logging, consulta la sezione Librerie client di Logging.

Per eseguire l'autenticazione in Logging, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Logging, consulta la sezione Librerie client di Logging.

Per eseguire l'autenticazione in Logging, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

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