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 à 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 da lista suspensa.

  3. Neste momento, você estará no host da instância, que tem vários contêineres em execução. Consulte 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 a gcloud, siga estas etapas:

  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 inglês) em execução. Consulte 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 seu aplicativo, sua instância também pode ter os seguintes contêineres:

Contêiner e código-fonte Org. de código aberto Descrição
fluentd_logger fluentd.org/ Agente do Logging.
memcache_proxy código aberto do proxy do memcache Fornece funcionalidade de memcache para o aplicativo.
nginx_proxy nginx.org Solicitações de proxy enviadas ao aplicativo.