Como depurar uma instância

É possível ativar o modo de depuração para uma VM. No modo de depuração, as principais com os papéis "Proprietário", "Editor" e "Administrador do App Engine" no projeto têm acesso raiz à VM. Ainda que o modo de depuração esteja ativado, a distribuição automática de atualizações do sistema operacional e de patches de segurança está desativada. No entanto, a VM ainda fará parte do pool do balanceador de carga e continuará a receber solicitações externas.

Sempre que você ativar ou desativar a depuração, um evento "Ativar/Desativar a depuração da instância da VM" aparecerá no console do Google Cloud, e o evento será registrado no arquivo /var/log/syslog.log da VM.

Como ativar e desativar o modo de depuração

É possível usar a gcloudpara ativar e desativar o modo de depuração de uma instância. Para depurar uma instância, o papel precisa conter a permissão appengine.instances.enableDebug.

Para ativar e desativar o modo de depuração na gcloud, faça isto:

  1. Use o comando gcloud app instances enable-debug para depurar as VMs de uma determinada instância e versão da maneira a seguir:
    gcloud app --project PROJECT-ID instances enable-debug
    Substitua PROJECT-ID pelo seu ID do projeto e siga as solicitações para especificar a versão da instância a ser depurada.
  2. Quando terminar de depurar a instância, desative o modo de depuração desta maneira:
    gcloud app --project PROJECT-ID instances disable-debug
    Siga as instruções para especificar a versão da instância.

Ao desativar o modo de depuração, a VM é interrompida e uma nova instância do app é iniciada e executada em uma nova VM limpa.

Como se conectar à instância

Console

Para se conectar a uma instância no console, faça o seguinte:

  1. Acesse a página de instâncias do console do Google Cloud do seu projeto:

    Acessar a página "Instâncias"

  2. Clique em SSH na extremidade direita da linha que contém a instância que você quer acessar:

    Isso coloca a instância no modo de depuração e abre uma sessão SSH para ela em uma janela de terminal.

    Você também pode selecionar diferentes opções para iniciar uma sessão SSH a partir da lista suspensa.

  3. Neste momento, você estará no host da instância, que tem vários contêineres em execução. Veja a seção Noções básicas sobre contêineres comuns abaixo para mais detalhes.

  4. Na janela de terminal, liste os contêineres em execução na instância:

    sudo docker ps

  5. A saída do comando sudo docker ps lista cada contêiner por linha. Localize aquela que contém seu ID de projeto: este é o contêiner que está executando seu código. Observe o NOME do contêiner.

  6. Também é possível listar as informações de geração de registros do seu aplicativo. Para isso, basta invocar:

    sudo docker logs CONTAINER-NAME

  7. Inicie um shell no contêiner que está executando seu código:

    sudo docker exec -it CONTAINER-NAME /bin/bash

  8. Quando terminar a depuração, digite exit para sair do contêiner e, em seguida, exit novamente para sair da sessão SSH.

  9. Desative a depuração da sua instância para permitir que ela retome a operação normal.

gcloud

Para se conectar a uma instância usando o gcloud, faça o seguinte:

  1. Com a instância ativada para depuração, invoque o comando:

    gcloud beta app instances --project PROJECT-ID ssh INSTANCE-NAME --service SERVICE --version VERSION

  2. Neste momento, você estará no host da instância, que tem vários contêineres em execução. Veja a seção Noções básicas sobre contêineres comuns abaixo para mais detalhes.

  3. Na janela de terminal, liste os contêineres em execução na instância:

    sudo docker ps

  4. A saída do comando sudo docker ps lista cada contêiner por linha. Localize aquela que contém seu ID de projeto: este é o contêiner que está executando seu código. Observe o NOME do contêiner.

  5. Também é possível listar as informações de geração de registros do seu aplicativo. Para isso, basta invocar:

    sudo docker logs CONTAINER-NAME

  6. Inicie um shell no contêiner que está executando seu código:

    docker exec -it CONTAINER-NAME /bin/bash

  7. Quando terminar a depuração, digite exit para sair do contêiner e, em seguida, exit novamente para sair da sessão SSH.

  8. Desative a depuração da sua instância para permitir que ela retome a operação normal.

Noções básicas sobre contêineres comuns

Além do contêiner que está executando o código do aplicativo, a instância também pode ter os seguintes contêineres:

Contêiner e código-fonte Descrição
cloud-sql Garante conexões seguras à instância do Cloud SQL.
fluentd_logger Agente do Logging.
nginx_proxy Solicitações de proxy enviadas ao aplicativo.
opentelemetry-collector Recebe, processa e exporta dados de telemetria.
stackdriver-monitoring-agent Coleta, armazena emonitora informações do sistema.

Observe que esses contêineres secundários estão sujeitos a alterações sem aviso prévio.