Cómo configurar Stackdriver Error Reporting para PHP

Cómo habilitar la biblioteca

Puedes enviar informes de errores a Stackdriver Error Reporting desde aplicaciones de PHP con la biblioteca de Stackdriver Error Reporting para PHP.

Stackdriver Error Reporting se integra en algunos productos, como App Engine. Stackdriver Error Reporting muestra los errores que las aplicaciones que se ejecutan en esos productos registran en Stackdriver Logging. Consulta Cómo ejecutar en Google Cloud Platform para obtener más información.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En GCP Console, en la página de selección de proyecto, selecciona o crea un proyecto de GCP.

    Ir a la página de selección de proyecto

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita lasStackdriver Error Reporting APIAPInecesarias.

    Habilita lasAPI

Cómo instalar la biblioteca cliente

La biblioteca de Stackdriver Error Reporting para PHP te permite supervisar y ver errores informados por las aplicaciones PHP que se ejecutan prácticamente en cualquier sitio

Para obtener más información sobre la instalación, consulta la documentación sobre la biblioteca de Stackdriver Error Reporting para PHP. También puedes informar problemas con el seguimiento de problemas.

Cómo configurar la biblioteca cliente

Puedes personalizar el comportamiento de la biblioteca de Stackdriver Error Reporting para PHP. Consulta [the library's configuration][client-config]{: class="external" } si deseas obtener una lista de posibles opciones de configuración.

Cómo informar errores

1. Instala las bibliotecas de nube con el siguiente comando:

$ composer require google/cloud-logging google/cloud-error-reporting
1. Agrega la siguiente línea a tu php.ini:
auto_prepend_file='/project-dir/vendor/google/cloud-error-reporting/src/prepend.php'
1. Configura la variable de entorno GOOGLE_CLOUD_PROJECT en tu nombre de proyecto.

Este archivo antepuesto instalará un controlador de excepciones y un controlador de errores que envía errores a Stackdriver Error Reporting de forma automática.

Cómo ejecutar en Google Cloud Platform

El uso de la biblioteca de Stackdriver Error Reporting para PHP requiere la función de escritor de Error Reporting de Cloud IAM. La mayoría de las plataformas de procesamiento de Google Cloud Platform ofrecen esta función de forma predeterminada.

Entorno flexible de App Engine

Google App Engine otorga la función de escritor de Error Reporting de forma predeterminada.

La biblioteca de Stackdriver Error Reporting para PHP puede usarse sin necesidad de proporcionar credenciales de forma explícita.

Para habilitar Stackdriver Error Reporting en el entorno flexible de App Engine, sigue los siguientes pasos:

  1. Instala las bibliotecas necesarias con el siguiente comando:

    $ composer require google/cloud-logging google/cloud-error-reporting

  2. Agrega la siguiente línea a la sección runtime_config en app.yaml:

enable_stackdriver_integration: true

Luego, la biblioteca recopila automáticamente todos los errores y las excepciones no detectadas en Stackdriver Error Reporting. Si utilizas un marco de trabajo web que instala sus propios controladores de excepciones, consulta la sección de integraciones de marcos de trabajo para obtener más información.

Kubernetes Engine

En Google Kubernetes Engine debes agregar el nivel de acceso cloud-platform cuando creas el clúster, como se muestra en el siguiente comando de ejemplo:

gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/cloud-platform

Compute Engine

Cuando uses las instancias de VM de Google Compute Engine, agrega el nivel de acceso cloud-platform a cada instancia. Cuando crees una instancia nueva con Google Cloud Platform Console, puedes hacerlo en la sección Identidad y acceso a la API del panel Crear instancia. Usa la cuenta de servicio predeterminada de Compute Engine, o bien otra cuenta de servicio de tu elección, y selecciona Permitir acceso completo a todas las API de Cloud en la sección Identidad y acceso a la API. Independientemente de la cuenta de servicio que selecciones, asegúrate de que se otorgue la función de escritor de Error Reporting en la sección IAM y administrador de GCP Console.

Cómo ejecutar de manera local y en otro lugar

Si deseas usar la biblioteca de Stackdriver Error Reporting para PHP fuera de Google Cloud Platform, debes proporcionar el ID del proyecto de GCP y las credenciales de la cuenta de servicio correspondientes directamente a la biblioteca de Stackdriver Error Reporting para PHP. Esto se aplica a la ejecución de la biblioteca en tu estación de trabajo, en las computadoras de tus centros de datos o en las instancias de VM de otro proveedor de servicios en la nube. Para obtener más información, consulta Cómo obtener y proporcionar las credenciales de la cuenta de servicio de forma manual.

Cómo visualizar informes de errores

Después de la implementación, podrás ver los informes de errores en el panel Error Reporting en GCP Console.

Ir al panel de Error Reporting

Para obtener más información, consulta Cómo visualizar errores.

Integraciones de marcos de trabajo

Algunos marcos de trabajo web anulan el controlador de excepciones. Los siguientes son ejemplos para habilitar Error Reporting con Laravel y Symfony. Para otros marcos de trabajo, puedes usar Google\Cloud\ErrorReporting\Bootstrap::exceptionHandler como controlador de excepciones.

Laravel

Edita la función report en el campo app/Exceptions/Handler.php de la siguiente manera:

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);
    }
}

También debes agregar una declaración use de una línea al comienzo del archivo:

use Google\Cloud\ErrorReporting\Bootstrap;

Symfony

Crea un archivo nuevo src/AppBundle/EventSubscriber/ExceptionSubscriber.php con el siguiente contenido:

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

use Google\Cloud\ErrorReporting\Bootstrap;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
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(GetResponseForExceptionEvent $event)
    {
        $exception = $event->getException();
        Bootstrap::exceptionHandler($exception);
    }
}