Instrumentar apps PHP para o Error Reporting

É possível enviar relatórios de erros para o Error Reporting a partir de aplicativos PHP usando a biblioteca do Error Reporting para PHP. Use a biblioteca do Error Reporting para PHP para criar grupos de erros nos seguintes casos:

  • Um bucket de registros que contém suas entradas de registro tem chaves de criptografia gerenciadas pelo cliente (CMEK).
  • O bucket de registro atende a uma das seguintes condições:
    • O bucket de registros é armazenado no mesmo projeto em que as entradas se originou.
    • As entradas de registro foram roteadas para um projeto e esse projeto armazenou essas entradas em um bucket de registros próprio.
  • Você quer informar eventos de erro personalizados.

O Error Reporting é integrado a alguns serviços do Google Cloud, como Cloud Functions, App Engine, Compute Engine e Google Kubernetes Engine. Essa ferramenta exibe os erros registrados no Cloud Logging por aplicativos em execução nesses serviços. Para mais informações, acesse Executar no Google Cloud nesta página.

Também é possível enviar dados de erros para o Error Reporting usando o Logging. Para mais informações sobre os requisitos de formatação de dados, leia Como formatar mensagens de erro no Logging (em inglês).

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Enable the Error Reporting API .

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Enable the Error Reporting API .

    Enable the API

Instale a biblioteca de cliente

A biblioteca do Error Reporting para PHP permite monitorar e visualizar os erros relatados pelo aplicativos PHP em execução em praticamente qualquer lugar.

Para mais informações sobre a instalação, leia a documentação da biblioteca do Error Reporting para PHP (em inglês). Além disso, use o rastreador de problemas (em inglês) para informá-los.

Configurar a biblioteca de cliente

É possível personalizar o comportamento da biblioteca do Error Reporting para PHP. Consulte a configuração da biblioteca para ver uma lista das opções possíveis.

Executar apps no Google Cloud

Para criar grupos de erros usando projects.events.report, sua conta de serviço precisa do papel de gravador do Error Reporting (roles/errorreporting.writer).

Alguns serviços do Google Cloud concedem automaticamente o papel de gravação de relatórios de erros (roles/errorreporting.writer) à conta de serviço adequada. No entanto, você precisa conceder esse papel ao serviço apropriado para alguns serviços.

Ambiente flexível do App Engine

O App Engine concede a Papel Gravador do Error Reporting (roles/errorreporting.writer) para a conta de serviço padrão.

A biblioteca do Error Reporting para PHP pode ser usada sem a necessidade de fornecer credenciais explicitamente.

Para ativar o Error Reporting no ambiente flexível do App Engine, siga estas etapas:

  1. Instale as bibliotecas necessárias com o comando a seguir:

    $ composer require google/cloud-error-reporting
  2. Adicione a seguinte linha à seção runtime_config em app.yaml:

enable_stackdriver_integration: true

Em seguida, a biblioteca coleta automaticamente todos os erros e exceções não identificadas no Error Reporting. Se você estiver usando uma biblioteca da Web que instala os próprios gerenciadores de exceção, consulte a seção Integrações de framework para mais informações.

Google Kubernetes Engine

Para usar o Error Reporting com o Google Kubernetes Engine, faça o seguinte:

  1. Verifique se a conta de serviço a ser usada pelo contêiner recebeu o papel de gravador do Error Reporting (roles/errorreporting.writer).

    Use a conta de serviço padrão do Compute Engine ou uma conta de serviço personalizada.

    Para informações sobre como conceder papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

  2. Crie o cluster e conceda a ele o escopo de acesso cloud-platform.

    Por exemplo, o comando "create" abaixo especifica a propriedade cloud-platform. escopo de acesso e uma conta de serviço:

    gcloud container clusters create CLUSTER_NAME --service-account  SERVICE_ACCT_NAME --scopes=cloud-platform
    

Compute Engine

Para usar o Error Reporting com instâncias de VM do Compute Engine, faça o seguinte:

  1. Verifique se a conta de serviço a ser usada pela instância de VM foi concedeu o Papel Gravador do Error Reporting (roles/errorreporting.writer).

    Use a conta de serviço padrão do Compute Engine ou uma conta de serviço personalizada.

    Para saber mais sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

  2. No Console do Google Cloud, acesse a página Instâncias de VM.

    Acessar Instâncias de VM

    Se você usar a barra de pesquisa para encontrar a página, selecione o resultado com o subtítulo Compute Engine.

  3. Selecione a instância de VM em que você quer receber os escopo de acesso cloud-platform.

  4. Clique em Parar e em Editar.

  5. Na seção Identidade e acesso à API, selecione uma conta de serviço que tenha o papel de Gravador do Error Reporting (roles/errorreporting.writer).

  6. Na seção Escopos de acesso, selecione Permitir acesso completo a todas as APIs do Cloud e salve as alterações.

  7. Clique em Iniciar / retomar.

Cloud Functions

O Cloud Functions concede o papel Gravador do Error Reporting (roles/errorreporting.writer) à sua conta de serviço padrão automaticamente.

A biblioteca do Error Reporting para PHP pode ser usada sem a necessidade de fornecer credenciais explicitamente.

As funções do Cloud Run estão configuradas para usar o Error Reporting automaticamente. Não tratado As exceções do JavaScript aparecem no Logging e são processadas pelo o Error Reporting sem usar o Biblioteca do Error Reporting para PHP.

Exemplo

1. Instale as bibliotecas de nuvem com o seguinte comando:

$ composer require google/cloud-error-reporting
2: Adicione a seguinte linha ao php.ini, em que WORKSPACE é o caminho absoluto para o diretório raiz do espaço de trabalho:
auto_prepend_file='/WORKSPACE/vendor/google/cloud-error-reporting/src/prepend.php'

Esse arquivo de prefixo instala um gerenciador de exceções e um gerenciador de erros que enviam erros automaticamente ao Error Reporting.

Se você estiver usando o ambiente flexível do App Engine, consulte Ambiente flexível do App Engine nesta página.

Executar apps em um ambiente de desenvolvimento local

Para usar a biblioteca do Error Reporting para PHP em um ambiente de desenvolvimento local, como a execução da biblioteca na sua própria estação de trabalho, você precisa fornecer biblioteca do Error Reporting para PHP com as credenciais padrão do aplicativo local. Para mais informações, consulte Autenticar no Error Reporting.

Para usar os exemplos PHP desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

Confira mais informações em Set up authentication for a local development environment.

O projects.events.report método também aceita chaves de API. Se você quiser usar chaves de API na autenticação, não será necessário configurar um arquivo local do Application Default Credentials. Confira mais informações em Crie uma chave de API na documentação de autenticação do Google Cloud

Como visualizar relatórios de erros

No console do 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.

Para mais informações, consulte Como visualizar erros.

Integrações de biblioteca

Algumas bibliotecas da Web substituem o gerenciador de exceções. Veja a seguir exemplos para ativar o Error Reporting com o Symfony e o Laravel. Para outras estruturas, você pode usar Google\Cloud\ErrorReporting\Bootstrap::exceptionHandler como o manipulador de exceção.

Laravel

Editar a função report no arquivo app/Exceptions/Handler.php da seguinte maneira:

public function report(Exception $exception)
{
    if (isset($_SERVER['GAE_SERVICE'])) {
        // Ensure Stackdriver is initialized and handle the exception
        Bootstrap::init();
        Bootstrap::exceptionHandler($exception);
    } else {
        parent::report($exception);
    }
}

Também é preciso adicionar uma instrução use de uma linha no início do arquivo:

use Google\Cloud\ErrorReporting\Bootstrap;

Symfony

Crie um novo arquivo src/AppBundle/EventSubscriber/ExceptionSubscriber.php com o seguinte conteúdo:

// src/AppBundle/EventSubscriber/ExceptionSubscriber.php
namespace AppBundle\EventSubscriber;

use Google\Cloud\ErrorReporting\Bootstrap;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class ExceptionSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        // return the subscribed events, their methods and priorities
        return [KernelEvents::EXCEPTION => [
            ['logException', 0]
        ]];
    }

    public function logException(ExceptionEvent $event)
    {
        $exception = $event->getThrowable();
        Bootstrap::exceptionHandler($exception);
    }
}