Como relatar erros

Neste tutorial, você aprende a relatar e rastrear exceções não detectadas no app Bookshelf em Python 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 valores a seguir:
    • Defina o valor de [PROJECT_ID] como o ID do projeto, que fica visível no Cloud Console.
    • 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. No Console do Cloud, acesse a página Versões do App Engine.

    Acessar "Versões"

  2. Marque a caixa de seleção da versão não padrão do app que você quer excluir.
  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 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 o 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.

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.

Limpeza

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. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.