Instrumenter des applications PHP pour Error Reporting

Vous pouvez envoyer des rapports d'erreurs à Error Reporting depuis des applications PHP à l'aide de la bibliothèque Error Reporting pour PHP. Utilisez la bibliothèque Error Reporting pour PHP pour créer des groupes d'erreurs dans les cas suivants:

  • Un bucket de journaux contenant vos entrées de journal contient des clés de chiffrement gérées par le client(CMEK).
  • Le bucket de journaux remplit l'une des conditions suivantes :
    • Le bucket de journaux est stocké dans le même projet que les entrées de journal.
    • Les entrées de journal ont été acheminées vers un projet, puis ce projet les a stockées dans un bucket de journaux dont il est propriétaire.
  • Vous souhaitez signaler des événements d'erreur personnalisés.

Error Reporting est intégré à certains services Google Cloud, tels que Cloud Functions, App Engine, Compute Engine et Google Kubernetes Engine. Error Reporting vous permet d'afficher les erreurs qui sont consignées dans Cloud Logging par les applications exécutées sur ces services. Pour en savoir plus, consultez la section Exécuter sur Google Cloud de cette page.

Vous pouvez également envoyer des données d'erreur à Error Reporting à l'aide de Logging. Pour en savoir plus sur les exigences en matière de mise en forme des données, consultez la page Formater les messages d'erreur dans Logging.

Avant de commencer

  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. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Error Reporting API .

    Enable the API

Installer la bibliothèque cliente

La bibliothèque Error Reporting pour PHP vous permet de surveiller et d'afficher les erreurs signalées par les applications PHP exécutées depuis presque n'importe quel emplacement.

Pour en savoir plus sur l'installation, consultez la documentation sur la bibliothèque Error Reporting pour PHP. Vous pouvez également signaler d'éventuels problèmes à l'aide de l'outil de suivi des problèmes.

Configurer la bibliothèque cliente

Vous pouvez personnaliser le comportement de la bibliothèque Error Reporting pour PHP. Consultez la configuration de la bibliothèque pour afficher la liste des options de configuration possibles.

Exécuter des applications sur Google Cloud

Pour créer des groupes d'erreurs à l'aide de projects.events.report, votre compte de service doit disposer du rôle Rédacteur Error Reporting (roles/errorreporting.writer).

Certains services Google Cloud attribuent automatiquement le rôle "Rédacteur de rapports d'erreurs" (roles/errorreporting.writer) au compte de service approprié. Toutefois, vous devez attribuer ce rôle au compte de service approprié pour certains services.

Cloud Run et fonctions Cloud Run

Le compte de service par défaut utilisé par Cloud Run dispose des autorisations du rôle Rédacteur Error Reporting (roles/errorreporting.writer).

La bibliothèque Error Reporting pour PHP peut être utilisée sans avoir à fournir explicitement des identifiants.

Cloud Run est configuré pour utiliser Error Reporting automatiquement. Les exceptions JavaScript non gérées apparaîtront dans Logging et seront traitées par Error Reporting sans avoir à utiliser la bibliothèque Error Reporting pour PHP.

Environnement flexible App Engine

App Engine attribue automatiquement le rôle de rédacteur pour Error Reporting (roles/errorreporting.writer) à votre compte de service par défaut.

La bibliothèque Error Reporting pour PHP peut être utilisée sans avoir à fournir explicitement des identifiants.

Pour activer Error Reporting dans l'environnement flexible App Engine, procédez comme suit :

  1. Installez les bibliothèques nécessaires avec la commande suivante :

    $ composer require google/cloud-error-reporting
  2. Ajoutez la ligne suivante à la section runtime_config du fichier app.yaml :

enable_stackdriver_integration: true

La bibliothèque collecte ensuite automatiquement toutes les erreurs et exceptions non interceptées dans Error Reporting. Si vous utilisez un framework Web qui installe ses propres gestionnaires d'exceptions, consultez la section Intégrations de framework pour en savoir plus.

Google Kubernetes Engine

Pour utiliser Error Reporting avec Google Kubernetes Engine, procédez comme suit:

  1. Assurez-vous que le compte de service à utiliser par votre conteneur a été attribué au rôle Rédacteur Error Reporting (roles/errorreporting.writer).

    Vous pouvez utiliser le compte de service Compute Engine par défaut ou un compte de service personnalisé.

    Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

  2. Créez votre cluster et accordez-lui le champ d'application d'accès cloud-platform.

    Par exemple, la commande de création suivante spécifie la portée d'accès cloud-platform et un compte de service:

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

Compute Engine

Pour utiliser Error Reporting avec des instances de VM Compute Engine, procédez comme suit:

  1. Assurez-vous que le compte de service à utiliser par votre instance de VM a reçu le rôle Rédacteur Error Reporting (roles/errorreporting.writer).

    Vous pouvez utiliser le compte de service Compute Engine par défaut ou un compte de service personnalisé.

    Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

  2. Dans la console Google Cloud, accédez à la page Instances de VM :

    Accéder à la page Instances de VM

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Compute Engine.

  3. Sélectionnez l'instance de VM à laquelle vous souhaitez attribuer le niveau d'accès cloud-platform.

  4. Cliquez sur Arrêter, puis sur Modifier.

  5. Dans la section Identité et accès à l'API, sélectionnez un compte de service doté du rôle Rédacteur Error Reporting (roles/errorreporting.writer).

  6. Dans la section Niveaux d'accès, sélectionnez Autoriser l'accès complet à l'ensemble des API Cloud, puis enregistrez vos modifications.

  7. Cliquez sur Démarrer/Réactiver.

Exemple

1. Installez les bibliothèques cloud avec la commande suivante :

$ composer require google/cloud-error-reporting
2. Ajoutez la ligne suivante au fichier php.ini, où WORKSPACE correspond au chemin absolu du répertoire racine de votre espace de travail:
auto_prepend_file='/WORKSPACE/vendor/google/cloud-error-reporting/src/prepend.php'

Ce fichier ajoute un gestionnaire d'exceptions et un gestionnaire d'erreurs qui envoient automatiquement des erreurs à Error Reporting.

Si vous utilisez l'environnement flexible App Engine, consultez la section Environnement flexible App Engine de cette page.

Exécuter des applications dans un environnement de développement local

Pour utiliser la bibliothèque Error Reporting pour PHP dans un environnement de développement local, par exemple en exécutant la bibliothèque sur votre propre station de travail, vous devez fournir à votre bibliothèque Error Reporting pour PHP les identifiants par défaut de l'application locale. Pour en savoir plus, consultez S'authentifier auprès d'Error Reporting.

Pour utiliser les exemples PHP de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

  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.

Pour en savoir plus, consultez Set up authentication for a local development environment.

La méthode projects.events.report est également compatible avec les clés API. Si vous souhaitez utiliser des clés API pour l'authentification, vous n'avez pas besoin de configurer un fichier d'identifiants par défaut de l'application local. Pour en savoir plus, consultez Créer une clé API dans la documentation sur l'authentification Google Cloud

Afficher les rapports d'erreurs

Dans la console Google Cloud, accédez à la page Error Reporting:

Accéder à Error Reporting

Vous pouvez également accéder à cette page à l'aide de la barre de recherche.

Pour en savoir plus, consultez la page Afficher les erreurs.

Intégrations de framework

Certains framework Web remplacent le gestionnaire d'exceptions. Vous trouverez ci-dessous des exemples où Error Reporting est activé avec Laravel et Symfony. Pour les autres frameworks, vous pouvez utiliser Google\Cloud\ErrorReporting\Bootstrap::exceptionHandler comme gestionnaire d'exceptions.

Laravel

Modifiez la fonction report dans le fichier app/Exceptions/Handler.php, comme suit :

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

Vous devez également ajouter une instruction use d'une ligne au début du fichier :

use Google\Cloud\ErrorReporting\Bootstrap;

Symfony

Créez un fichier src/AppBundle/EventSubscriber/ExceptionSubscriber.php avec le contenu suivant :

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