Streaming e monitorização em tempo real de entradas do registo

Este documento descreve como ver as suas entradas de registo em tempo real através de streaming e monitorização em direto. Os registos de streaming permitem-lhe ver entradas de registo em tempo real e estão disponíveis no Explorador de registos. A monitorização em tempo real permite-lhe ver entradas de registo em tempo real e está disponível como o comando gcloud alpha logging tail da CLI gcloud e como o método entries.tail da API Cloud Logging.

Quando vê e analisa os seus registos através do Explorador de registos, gcloud logging read ou do método da API entries.list, está a ver entradas de registo que o Cloud Logging armazenou. Quando faz stream ou monitoriza entradas do registo em direto, está a ver as entradas do registo à medida que as suas aplicações as escrevem na API Cloud Logging.

Fazer stream de registos no Explorador de registos

No Explorador de registos, pode ver os dados de registos em tempo real através da opção Transmitir registos. Quando usa Registos de streams, pode adicionar uma consulta para transmitir apenas os registos que correspondem à consulta. Para transmitir registos, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Explorador de registos:

    Aceda ao Explorador de registos

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.

  2. No campo Consulta, introduza uma consulta e, de seguida, clique em Registar stream.

    À medida que o Logging escreve os dados dos registos, apenas os registos que correspondem à consulta são apresentados no painel Resultados da consulta. Se não for fornecida uma consulta, o registo mostra as entradas de registo armazenadas recentemente. Os registos continuam a ser transmitidos até selecionar a barra de deslocamento no painel de registos. Quando a transmissão é interrompida, é apresentado um botão Reiniciar transmissão.

    Para obter informações sobre consultas, consulte o artigo Crie consultas no Explorador de registos.

Use a monitorização em tempo real na Google Cloud CLI

A monitorização em tempo real permite-lhe ver as entradas de registo em tempo real à medida que o Cloud Logging as escreve, através da CLI Google Cloud ou da API Cloud Logging.

O acompanhamento em tempo real não é suportado para contentores de registos com controlos de acesso ao nível do campo. No entanto, pode transmitir registos para esses contentores no Explorador de registos.

Para obter informações sobre o método da API para monitorização em tempo real, consulte o método entries.tail.

A instalar a app gcloud alpha logging tail

Para usar o gcloud alpha logging tail, tem de ter o Python 3 e o pacote Python grpcio instalados.

Para ver instruções sobre como instalar o Python, consulte a página do Python. Para obter instruções sobre como instalar o gestor de pacotes do Python, pip, necessário para instalar o pacote grpcio, consulte a página do instalador de pacotes do Python.

Conclua os seguintes passos para instalar o gcloud alpha logging tail:

  1. Verifique se tem a CLI do Google Cloud instalada. Para ver instruções sobre como instalar a CLI do Google Cloud, consulte o artigo Instalar a CLI do Google Cloud.

  2. Confirme que está a usar a versão 302.0.0 ou superior da CLI gcloud.

    gcloud version
    

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

  3. Instale os componentes alfa da CLI gcloud:

    gcloud components install alpha
    
  4. Para utilizadores do MacOS, Linux e Cloud Shell:

    1. Instale as bibliotecas cliente gRPC:

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

       export CLOUDSDK_PYTHON_SITEPACKAGES=1
      
  5. Use os seguintes comandos para definir o Google Cloud ID do projeto e para se autenticar:

    gcloud config set project PROJECT_ID
    gcloud auth login
    

    Para obter o ID do projeto, consulte o artigo Criar e gerir projetos.

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

    gcloud alpha logging tail
    

    O comando apresenta a seguinte mensagem:

    Initializing tail session.

    Está agora a ver as entradas de registo do seu projeto Google Cloud à medida que o Logging as escreve.

    Entradas de registo durante uma sessão de live-tail.

Para mais informações sobre a utilização da monitorização em direto, consulte o gcloud alpha logging tail guia de referência.

Colocação no buffer e ordenação

Uma vez que o registo pode receber entradas de registo fora da ordem cronológica, a monitorização em tempo real oferece uma definição de janela de buffer para que possa equilibrar a compensação entre ver as entradas de registo à medida que são escritas e vê-las por ordem ascendente. Pode definir a janela de buffer entre 0 e 60 segundos.

Tenha em atenção as seguintes caraterísticas do intervalo de tempo:

  • O período de intervalo predefinido é de dois segundos.

  • O registo atrasa a escrita das entradas de registo nos contentores de registo durante o período da janela de buffer.

  • Se uma entrada de registo for escrita fora do período de buffer, o registo devolve as entradas de registo à medida que são recebidas.

Quando configura o período de buffer, faz uma troca entre ver os registos à medida que são escritos e ver as entradas fora de ordem.

Janela de buffer Compromisso
0 segundos As entradas de registo mais recentes são devolvidas, mas com maior probabilidade de estarem desordenadas.
60 segundos Um atraso de 60 segundos antes de ver as entradas devolvidas, mas a maioria dos registos é devolvida por ordem ascendente.

Limites e quotas

A tabela seguinte lista os limites e as quotas para a monitorização em tempo real:

Limites e quotas Valor
Entradas devolvidas por minuto 60 000
Se mais de 60 000 entradas corresponderem a um filtro, o registo devolve a contagem de entradas na resposta.
Abra sessões de monitorização em tempo real por Google Cloud projeto 10

Limitações do cliente

Para um Google Cloud projeto que escreve muitas entradas rapidamente, o seu cliente pode não conseguir consumi-las tão rapidamente quanto estão a ser escritas. Neste caso, o Logging limita o número total de entradas enviadas, dando prioridade às entradas mais recentes. No final da sessão de cauda, o registo devolve o número de entradas que não foram apresentadas devido aos limites do cliente.

Use o acompanhamento em tempo real com bibliotecas de cliente

A monitorização em tempo real permite-lhe ver as entradas de registo em tempo real à medida que o Cloud Logging as escreve. Para obter informações sobre o método da API para monitorização em tempo real, consulte o método entries.tail.

O acompanhamento em tempo real não é suportado para contentores de registos com controlos de acesso ao nível do campo. No entanto, pode transmitir registos para esses contentores no Explorador de registos.

Este exemplo demonstra o acompanhamento em tempo real das entradas do registo de um determinado registador.

Go

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

Para se autenticar no Logging, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

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

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

Para se autenticar no Logging, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure 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 registo, consulte o artigo Bibliotecas de cliente de registo.

Para se autenticar no Logging, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure 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