Como relatar erros

Neste tutorial, mostramos como informar e rastrear exceções não detectadas no app Python Notebooks usando o Console do Google 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 seguintes valores:
    • Defina o valor de [PROJECT_ID] como o ID do seu projeto, visível no Console do Cloud.
    • Defina o valor de [DATA_BACKEND] com o mesmo valor usado no tutorial Como usar dados estruturados.
    • Se você estiver usando o Cloud SQL ou o MongoDB, defina os valores na seção Cloud SQL ou Mongo como os mesmos 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 intencionalmente um erro no seu código e procure a exceção na página do Error Reporting no Console do 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 do Cloud, acesse a página Error Reporting do Stackdriver.

    Acesse Python

    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.

Como entender 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.

A maneira mais fácil de evitar cobranças é excluir o projeto criado para o 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.