Logpoints de depuração

Depois de implantar ou iniciar seu app, é possível abrir o Stackdriver Debugger no Console do Google Cloud Platform. Com o Stackdriver Debugger, você pode inserir a geração de registros em serviços em execução sem precisar reiniciar e sem interferir no funcionamento do serviço. Isso pode ser útil para depurar problemas de produção sem a necessidade de adicionar log statements e fazer uma nova implantação.

Acesse a página Depuração do Console do GCP para usar o Google Stackdriver Debugger.

Antes de começar

O Stackdriver Debugger pode ser usado com ou sem acesso ao código-fonte do seu app. Se seu código-fonte não estiver disponível, consulte a seção abaixo Como adicionar um logpoint de depuração para ver as instruções sobre como inserir manualmente o nome do arquivo e o número da linha.

Se seu código-fonte estiver armazenado no Google Cloud Repositories, ele é automaticamente exibido na visualização de depuração.

Para acessar o código-fonte armazenado em outro local, como localmente ou em um repositório Git, por exemplo, será necessário selecionar o local do código-fonte.

Logpoints

Com os logpoints, você pode inserir a geração de registros em serviços em execução sem precisar reiniciar e sem interferir no funcionamento do serviço. Toda vez que uma instância executa o código no local do logpoint, o Stackdriver Debugger registra uma mensagem. A saída é enviada ao registro específico do ambiente de destino. No App Engine, por exemplo, a saída é enviada para o registro da solicitação no Stackdriver Logging.

Os logpoints permanecem ativos por 24 horas após serem criados ou até que sejam excluídos ou que o serviço seja reimplantado.

Como adicionar um logpoint de depuração

Console

Para adicionar um logpoint a partir do Console do Cloud, siga estas etapas:

  1. Verifique se a guia Logpoint está selecionada no painel à direita.
  2. No painel à esquerda, selecione o arquivo que contém o código-fonte em que você quer adicionar um logpoint. O conteúdo do arquivo será exibido no painel central.
  3. Clique no número da linha no local para adicionar um logpoint.
  4. Preencha a mensagem entre o campo logpoint("") e clique no botão "Adicionar". Você pode colocar uma expressão entre chaves, como {newScore.score}, para registrar o valor dela.

Como adicionar o logpoint in-line


Se nenhum código-fonte estiver disponível, será possível inserir manualmente "filename:line" e outros detalhes no painel Logpoint: Como adicionar um logpoint manualmente

gcloud

Para adicionar um logpoint pela linha de comando, faça o seguinte:

gcloud debug logpoints create LOCATION MESSAGE

Onde:

  • LOCATION é o nome do arquivo e a linha em que foi definido o logpoint. O formato é FILE:LINE, em que FILE pode ser o nome do arquivo precedido ou não de componentes de caminho suficientes para diferenciá-lo de outros arquivos com o mesmo nome. Forneça um nome de arquivo exclusivo no destino de depuração.
  • MESSAGE é a mensagem que você quer registrar.

O exemplo a seguir registra o valor de score no nível de registro info, que é o nível de registro padrão para logpoints:

gcloud debug logpoints create HighScoreService.java:105 \
  "User {name} scored {newScore.score}"

Quando a linha 105 do HighScoreService.java executes é executada, a mensagem é registrada com os valores de variáveis name e newScore.score inseridos na sequência de saída.

Formato da mensagem do logpoint

A mensagem de um logpoint determina o que é registrado na saída. As expressões permitem que você avalie e registre valores de interesse. As expressões entre chaves na mensagem, como {myObj.myFunc()} ou {a + b}, serão substituídas pelo valor dessa expressão na saída. A mensagem User {name} scored {newScore.score} no exemplo acima registrará uma saída parecida com User user1 scored 99.

É possível usar os seguintes recursos de idioma para as expressões:

Java

A maioria das expressões do Java é compatível, incluindo as seguintes:
  • variáveis locais: a == 8
  • operações numéricas e booleanas: x + y < 20
  • campos estáticos e de instância: this.counter == 20, this.myObj.isShutdown, myStatic ou com.mycompany.MyClass.staticMember.
  • comparações de sequência com operador de igualdade: myString == "abc"
  • chamadas de funções. Apenas as funções somente leitura podem ser usadas. Por exemplo: StringBuilder.indexOf() é compatível, mas StringBuilder.append() não é
  • cast de tipo, com tipos totalmente qualificados: ((com.myprod.ClassImpl) myInterface).internalField

O seguinte recurso de linguagem não é compatível:

  • Conversão unboxing de tipos numéricos, como Integer. Em vez disso, use myInteger.value.

Python

A maioria das expressões do Python é compatível:
  • leitura de variáveis locais e globais
  • leitura de matrizes, listas, conjuntos, dicionários e objetos
  • execução de métodos simples

Os seguintes recursos de linguagem não são compatíveis:

  • execução de funções que alocam novos objetos ou usam executores complexos
  • criação de novos objetos dentro da expressão

Go

A maioria das sintaxes de expressão do Go é compatível, incluindo:
  • leitura de variáveis locais e globais
  • leitura de matrizes, conjuntos, mapas e structs

Os seguintes recursos de linguagem não são compatíveis:

  • leitura a partir de valores da interface
  • inserir conversões e literais compostos
  • chamadas de funções diferentes de len

Condição de logpoint

Uma condição de logpoint é uma expressão simples na linguagem do aplicativo que precisa ser avaliada como verdadeira para que o logpoint seja registrado. As condições do logpoint são avaliadas cada vez que a linha é executada, por qualquer instância, até que o logpoint expire ou seja excluído.

A condição é uma expressão booleana completa que pode incluir operadores lógicos:

travelAccessory == “Towel”
ultimateAnswer <= 42
travelAccessory == “Towel” && ultimateAnswer <= 42

Os mesmos recursos de linguagem compatíveis com as expressões estão disponíveis para as condições.

Console

Digite a condição dentro da instrução "if":

Definir uma condição in-line

Se nenhum código-fonte estiver disponível, você pode especificar a condição no painel Logpoint.

gcloud

As condições são expressas por meio do uso da sinalização --condition de logpoints create:

gcloud debug logpoints create HighScoreService.java:105 
--condition="newScore.score > 40"
--log-level="warning"
"Suspiciously high score ({newScore.score}) from user {name}"

No exemplo acima, o logpoint verifica o valor de newScore.score quando a linha 105 do aplicativo é executada. Se o valor for maior que 40, um aviso é adicionado ao registro:

Como visualizar a saída

A saída do logpoint é enviada ao registro específico do ambiente de destino.

App Engine

Os logpoints definidos nos aplicativos do App Engine enviam a saída para o registro de solicitação no Stackdriver Logging.

É possível visualizar os registros no painel "Registros" ou no Visualizador de registros dedicado.

Logpoint no painel de registros

Compute Engine

Os logpoints definidos nos apps do Compute Engine enviam a saída para o mesmo local dos log statements comuns. Por exemplo, em Python, o módulo de registro padrão envia a saída para stdout, mas pode ser configurado para gravar em um arquivo específico.

É possível configurar o agente de geração de registros para encaminhar esses registros para o Stackdriver Logging. A partir daí, é possível ver os registros no Leitor de registros.

Como excluir logpoints

Os logpoints ficam inativos, param de registrar mensagens após 24 horas e são excluídos automaticamente após 30 dias. É possível excluir manualmente os logpoints, que interromperão a geração de registros e os removerão do histórico para que não sejam usados para referência futura. No entanto, a exclusão de um logpoint não excluirá as mensagens de registro geradas anteriormente.

Console

Para excluir um logpoint manualmente, use o menu flutuante no painel Histórico de logpoint.

Como excluir um logpoint

gcloud

Para excluir um logpoint manualmente, especifique o código do logpoint ou use expressões regulares na local do código:

gcloud debug logpoints delete HighScoreService.java:105

Debug target not specified. Using default target: default-1
This command will delete the following logpoints:

LOCATION                   CONDITION            LOG_LEVEL  LOG_MESSAGE_FORMAT                                             ID
HighScoreService.java:105                       INFO       User {name} scored {newScore.score}.                           53aaa3bd8d2d7-b76f-feb5d
HighScoreService.java:105  newScore.score > 40  WARNING    Suspiciously high score ({newScore.score}) from user {name}  53aaa3bsdffd7-b56f-fasfg

Do you want to continue (Y/n)?  Y
Deleted 2 logpoints.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Stackdriver Debugger