Entradas de registro de streaming e acompanhamento ao vivo

Neste documento, descrevemos como visualizar suas entradas de registro em tempo real por streaming e acompanhamento ao vivo. Os registros de streaming permitem visualizar entradas de registro em tempo real e estão disponíveis na Análise de registros. O acompanhamento em tempo real permite visualizar entradas de registro em tempo real e está disponível como o comando da CLI gcloud gcloud alpha logging tail e como o método entries.tail da API Cloud Logging.

Ao visualizar e analisar seus registros usando a Análise de registros, gcloud logging read ou o método de API entries.list, você está visualizando entradas de registro armazenadas pelo Cloud Logging. Ao fazer streaming ou entradas de registro de cauda em tempo real, você vê as entradas de registro conforme seus aplicativos as gravam na API Cloud Logging.

Fazer streaming de registros na Análise de registros

No Explorador de registros, é possível ver os dados dos registros em tempo real usando Fazer streaming de registros. Quando você usa Fazer streaming de registros, pode adicionar uma consulta para transmitir apenas os registros que correspondem à consulta. Para transmitir registros, faça o seguinte:

  1. No painel de navegação do console do Google Cloud, selecione Logging e clique em Análise de registros:

    Acessar a Análise de registros

  2. Na caixa de texto Consulta, insira uma consulta e clique em Fazer streaming de registros.

    À medida que o Logging grava os dados de registros, apenas os registros que correspondem à consulta são mostrados no painel Resultados da consulta. Se uma consulta não for fornecida, o Logging mostrará as entradas de registro armazenadas recentemente. Os registros continuam sendo transmitidos até que você selecione a barra de rolagem no painel de registros. Quando o streaming é interrompido, um botão Reiniciar streaming é exibido.

    Para informações sobre consultas, consulte Criar consultas na Análise de registros.

Usar o acompanhamento ao vivo na Google Cloud CLI

O acompanhamento em tempo real permite visualizar as entradas de registro em tempo real enquanto o Cloud Logging as grava, usando a Google Cloud CLI ou a API Cloud Logging.

O acompanhamento em tempo real não é compatível com buckets de registro com controles de acesso no nível do campo. No entanto, é possível fazer streaming de registros desses buckets na Análise de registros.

Para informações sobre o método da API para acompanhamento ao vivo, consulte o método entries.tail.

Como instalar gcloud alpha logging tail

Para usar gcloud alpha logging tail, você precisa ter o Python 3 e o pacote grpcio do Python instalados.

Para instruções sobre como instalar o Python, consulte a página Python. Para instruções sobre como instalar o gerenciador de pacotes Python, pip, que é necessário para instalar o pacote grpcio, consulte a Página do instalador de pacotes Python.

Conclua as etapas a seguir para instalar o gcloud alpha logging tail:

  1. Verifique se você tem a Google Cloud CLI instalada. Para instruções sobre como instalar a Google Cloud CLI, consulte Como instalar a Google Cloud CLI.

  2. Verifique se você está usando a versão 302.0.0 ou mais recente da CLI gcloud.

    gcloud version
    

    Para instruções sobre como atualizar a CLI gcloud, consulte gcloud components update.

  3. Instale os componentes Alfa da CLI gcloud:

    gcloud components install alpha
    
  4. Para usuários do MacOS, Linux e Cloud Shell:

    1. Instale as bibliotecas de cliente do gRPC:

       sudo pip3 install grpcio
      
    2. Defina a variável de ambiente CLOUDSDK_PYTHON_SITEPACKAGES como qualquer valor:

       export CLOUDSDK_PYTHON_SITEPACKAGES=1
      
  5. Use os seguintes comandos para configurar o ID do projeto do Google Cloud e fazer a autenticação:

    gcloud config set project PROJECT_ID
    gcloud auth login
    

    Para conseguir o ID do projeto, consulte Como criar e gerenciar projetos.

  6. Verifique se gcloud alpha logging tail está instalado executando o seguinte comando:

    gcloud alpha logging tail
    

    O comando exibe a seguinte mensagem:

    Initializing tail session.

    Agora você está visualizando as entradas de registro do seu projeto do Google Cloud enquanto o Logging as grava.

    Entradas de registro durante uma sessão de acompanhamento ao vivo.

Para mais informações sobre como usar o acompanhamento ao vivo, consulte o guia de referência do gcloud alpha logging tail.

Armazenamento em buffer e pedidos

Como o Logging pode receber entradas de registro fora da ordem cronológica, o acompanhamento ao vivo fornece uma configuração de janela de buffer para que você possa equilibrar a compensação entre visualizar as entradas de registro conforme elas são gravadas e visualizá-las em ordem crescente. É possível definir a janela de buffer entre 0 e 60 segundos.

Observe as seguintes características da janela de buffer:

  • A janela de buffer padrão é de dois segundos.

  • O Logging atrasa a gravação de entradas de registro em buckets de registro durante a janela do buffer.

  • Se uma entrada de registro for gravada fora da janela do buffer, o Logging retornará as entradas à medida que forem recebidas.

Ao configurar a janela do buffer, há uma compensação entre a visualização dos registros à medida que eles são gravados e a visualização das entradas fora de ordem.

Janela de buffer Compensação
0 segundos As entradas de registro mais recentes são retornadas, mas é mais provável que elas estejam fora de ordem.
60 segundos Um atraso de 60 segundos antes de ver as entradas retornadas, mas a maioria dos registros é retornada em ordem crescente.

Limites e cotas

A tabela a seguir lista os limites e as cotas para o acompanhamento ao vivo:

Limites e cotas Valor
Entradas retornadas por minuto 60.000
Se mais de 60.000 entradas corresponderem a um filtro, o Logging retornará a contagem de entradas na resposta.
Sessões de acompanhamento ao vivo abertas por projeto do Google Cloud 10

Limitações do cliente

Para um projeto do Google Cloud que grava muitas entradas rapidamente, seu cliente pode não conseguir consumi-las tão rapidamente quanto elas são gravadas. Nesse caso, o Logging limita o número total de entradas enviadas, priorizando as entradas mais recentes. No final da sessão de acompanhamento, o Logging retorna o número de entradas que não foram exibidas devido aos limites do cliente.

Usar o acompanhamento ao vivo com bibliotecas de cliente

Com o acompanhamento ao vivo, é possível ver as entradas de registro em tempo real conforme o Cloud Logging as grava. Para informações sobre o método da API para acompanhamento ao vivo, consulte o método entries.tail.

O acompanhamento em tempo real não é compatível com buckets de registro com controles de acesso no nível do campo. No entanto, é possível fazer streaming de registros desses buckets na Análise de registros.

Este exemplo demonstra entradas de registro de acompanhamento ao vivo de um determinado logger.

Go

Para saber como instalar e usar a biblioteca de cliente para o Logging, consulte Bibliotecas de cliente do Logging.

Para autenticar no Logging, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

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

Para saber como instalar e usar a biblioteca de cliente para o Logging, consulte Bibliotecas de cliente do Logging.

Para autenticar no Logging, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

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

Para saber como instalar e usar a biblioteca de cliente para o Logging, consulte Bibliotecas de cliente do Logging.

Para autenticar no Logging, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

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