Como relatar erros

Neste tutorial, você aprende a relatar e rastrear exceções não detectadas no tutorial Como começar a usar o Python usando o console doGoogle Cloud .

O Error Reporting fornece um painel centralizado que mostra contagens de cada erro exclusivo, rastreamentos de pilha e um histórico de ocorrências. Também é possível configurar um alerta para quando ocorrerem erros.

Esta página faz parte de um tutorial com várias páginas. Para começar do início e ver as instruções de configuração, consulte o artigo Aplicativo Bookshelf em Python.

Definir configurações

Esta seção usa código no diretório 5-logging. Edite os arquivos e execute os comandos nesse diretório.

  1. Abra o arquivo config.py para edição e substitua os valores a seguir:
    • Defina o valor de [PROJECT_ID] como o ID do projeto, que fica visível no console Google Cloud .
    • Defina o valor de [DATA_BACKEND] como o mesmo valor usado na etapa Como usar dados estruturados deste tutorial.
    • Se você estiver usando o Cloud SQL ou o MongoDB, defina os valores na seção Cloud SQL ou Mongo como os mesmos valores usados na etapa Como usar dados estruturados.
    • Defina o valor de [CLOUD_STORAGE_BUCKET] como o nome do bucket do Cloud Storage.
    • Na seção OAuth2 configuration, defina os valores de [GOOGLE_OAUTH2_CLIENT_ID] e [GOOGLE_OAUTH2_CLIENT_SECRET] como o ID do cliente do aplicativo e a chave secreta que você criou anteriormente.

  2. Salve e feche o arquivo config.py.

Se estiver usando o Cloud SQL:

  1. Abra o arquivo app.yaml para edição.
  2. Defina o valor de cloudsql-instance como o mesmo valor usado em [CLOUDSQL_CONNECTION_NAME] no arquivo config.py. Use o formato project:region:cloudsql-instance. Remova todo o comentário dessa linha.
  3. Salve e feche o arquivo app.yaml.

Instalar dependências

Para criar um ambiente virtual e instalar dependências, use os comandos a seguir:

Linux/macOS

virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt

Windows

virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt

Execução do app na máquina local

  1. Inicie um servidor da Web local:

    python main.py
    
  2. No navegador, digite o seguinte endereço:

    http://localhost:8080
    

Pressione Control+C para sair do worker e depois do servidor da Web local.

Como implantar o app no ambiente flexível do App Engine

  1. Implante o app de amostra:

    gcloud app deploy
    
  2. No navegador, digite o seguinte URL:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    Substitua:

Se você atualizar o app, implante a versão atualizada inserindo o mesmo comando usado para implantá-lo. A implantação cria uma nova versão do app e a define como padrão. As versões anteriores do app são mantidas, assim como as instâncias de máquina virtual (VM, na sigla em inglês) associadas. Todas essas versões de app e instâncias de VM são recursos faturáveis. Para reduzir custos, exclua as versões não padrão do seu app.

Para excluir uma versão do app:

  1. In the Google Cloud console, go to the Versions page for App Engine.

    Go to Versions

  2. Select the checkbox for the non-default app version that you want to delete.
  3. Para excluir a versão do app, clique em Excluir.

Para mais informações sobre como limpar recursos faturáveis, consulte a seção Como fazer limpeza na etapa final deste tutorial.

Simular um erro

Para ver o Error Reporting em ação, insira um erro intencionalmente no código e procure a exceção na página do Error Reporting do console Google Cloud .

  1. Em bookshelf/crud.py, adicione uma operação que acesse uma variável indefinida e gere um ReferenceError na visualização do índice.

    @crud.route("/")
    def list():
       x[3]
  2. Implante o aplicativo.

    gcloud app deploy
  3. Acesse a página de índice.

    gcloud app browse

    Veja a mensagem An internal error occurred.

  4. No console Google Cloud , acesse a página Error Reporting:

    Acessar o Error Reporting

    Também é possível encontrar essa página usando a barra de pesquisa.

    O erro será listado.

    Visualizar erros

  5. Clique no erro para ver informações sobre quando ele foi visto pela última vez, o número de vezes que ele ocorreu, um histograma de ocorrências e o rastreamento de pilha.

Noções básicas sobre o código

Para relatar exceções não identificadas, o código primeiro usa o decorador errorhandler do Flask. Depois, relata a exceção para o Error Reporting usando as bibliotecas de cliente do Cloud para Python.

@app.errorhandler(500)
def server_error(e):
    client = error_reporting.Client(app.config['PROJECT_ID'])
    client.report_exception(
        http_context=error_reporting.build_flask_context(request))
    return """
    An internal error occurred.
    """, 500

O cliente adiciona as informações de rastreamento automaticamente e usa uma função auxiliar para extrair os detalhes relevantes da solicitação do Flask, que preenche o Error Reporting com os rastreamentos de pilha e contextos HTTP relevantes para qualquer exceção InternalServerError HTTP 500 não detectada no app.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

O jeito mais fácil de evitar o faturamentos é excluindo o projeto criado para este tutorial.

Para excluir o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.