Instrumentar apps PHP para o Error Reporting

A biblioteca do Error Reporting para PHP permite enviar eventos de erro diretamente dos seus aplicativos PHP para o Error Reporting, para que você possa diagnosticar e monitorar falhas de execução. A instrumentação do aplicativo com a biblioteca permite informar eventos de erro personalizados e capturar erros mesmo quando os buckets de registros usam chaves de criptografia gerenciadas pelo cliente (CMEK).

Para aplicativos executados em serviços integrados do Google Cloud , incluindo funções do Cloud Run, App Engine, Compute Engine e Google Kubernetes Engine, o Error Reporting também pode inferir eventos de erro automaticamente do Cloud Logging sem a biblioteca do Error Reporting para PHP. Para que o Error Reporting infira eventos de erro dos registros, as entradas de registro precisam seguir os requisitos de formatação de erros e ser armazenadas em um bucket de registros sem CMEK pertencente ao projeto de origem ou ao projeto de destino para onde os registros foram encaminhados.

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Error Reporting API , if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Error Reporting API , if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

Instale a biblioteca de cliente

A biblioteca do Error Reporting para PHP permite monitorar e visualizar eventos de erro informados por aplicativos PHP executados em quase 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 Gravador do Error Reporting (roles/errorreporting.writer).

Alguns serviços do Google Cloud concedem automaticamente o papel de gravador do Error Reporting (roles/errorreporting.writer) à conta de serviço apropriada. No entanto, é necessário conceder esse papel à conta de serviço apropriada para alguns serviços.

Cloud Run e Cloud Run Functions

A conta de serviço padrão usada pelo Cloud Run tem as permissões do papel de gravador do Error Reporting (roles/errorreporting.writer).

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

O Cloud Run é configurado para usar o Error Reporting automaticamente. Exceções JavaScript não processadas vão aparecer no Logging e serão processadas pelo Error Reporting sem que seja preciso usar a biblioteca desse produto para PHP.

Ambiente flexível do App Engine

O App Engine concede o papel de 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.

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 que será usada pelo contêiner recebeu o papel Gravador do Error Reporting (roles/errorreporting.writer).

    É possível usar 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. Crie o cluster e conceda a ele o escopo de acesso cloud-platform.

    Por exemplo, o comando de criação a seguir especifica o escopo de acesso cloud-platform 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 recebeu o papel Gravador do Error Reporting (roles/errorreporting.writer).

    É possível usar 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 Google Cloud console, 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 que vai receber o escopo de acesso do 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 total a todas as APIs do Cloud e salve as mudanças.

  7. Clique em Iniciar / retomar.

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 Error Reporting para PHP em um ambiente de desenvolvimento local, como executar a biblioteca na sua própria estação de trabalho, forneça à biblioteca Error Reporting para PHP as credenciais padrão do aplicativo local. Para mais informações, consulte Autenticar no Error Reporting.

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

  1. Instale a CLI do Google Cloud.

  2. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  3. Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:

    gcloud auth application-default login

    Não é necessário fazer isso se você estiver usando o Cloud Shell.

    Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.

Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

O método projects.events.report 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. Para mais informações, consulte Criar uma chave de API na documentação de autenticação do Google Cloud .

Ver grupos de erros

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.

Para mais informações, consulte Ver e filtrar grupos de 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);
    }
}