Strumentare le app PHP per Error Reporting

Puoi inviare eventi di errore a Error Reporting dalle applicazioni PHP utilizzando la libreria Error Reporting per PHP. Utilizza la libreria Error Reporting per PHP per creare gruppi di errori per i seguenti casi:

  • Un bucket dei log che contiene le voci di log ha chiavi di crittografia gestite dal cliente (CMEK).
  • Il bucket di log soddisfa uno dei seguenti requisiti:
    • Il bucket di log è archiviato nello stesso progetto in cui hanno avuto origine le voci di log.
    • Le voci di log sono state instradate a un progetto, che le ha archiviate in un bucket di log di sua proprietà.
  • Vuoi segnalare eventi di errore personalizzati.

Error Reporting è integrato con alcuni Google Cloud servizi, come le funzioni Cloud Run e App Engine, Compute Engine e Google Kubernetes Engine. Error Reporting mostra gli eventi di errore registrati in Cloud Logging dalle applicazioni in esecuzione su questi servizi. Per saperne di più, vai a Esecuzione su Google Cloud in questa pagina.

Puoi anche inviare eventi di errore a Error Reporting utilizzando Logging. Per informazioni sui requisiti di formattazione dei dati, consulta Formattare una voce di log per segnalare eventi di errore.

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  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 .

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. 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 .

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Installa la libreria client

La libreria Error Reporting per PHP ti consente di monitorare e visualizzare gli eventi di errore segnalati dalle applicazioni PHP in esecuzione praticamente ovunque.

Per saperne di più sull'installazione, leggi la documentazione della libreria Error Reporting per PHP. Puoi anche segnalare i problemi utilizzando il tracker dei problemi.

Configura la libreria client

Puoi personalizzare il comportamento della libreria Error Reporting per PHP. Consulta la configurazione della libreria per un elenco delle possibili opzioni di configurazione.

Eseguire app su Google Cloud

Per creare gruppi di errori utilizzando projects.events.report, il account di servizio richiede il ruolo Writer Error Reporting (roles/errorreporting.writer).

Alcuni servizi Google Cloud concedono automaticamente il ruolo Scrittore Error Reporting (roles/errorreporting.writer) alaccount di serviziot appropriato. Tuttavia, per alcuni servizi devi concedere questo ruolo al service account appropriato.

Cloud Run e Cloud Run Functions

Il account di servizio predefinito utilizzato da Cloud Run dispone delle autorizzazioni del ruolo Writer di Error Reporting (roles/errorreporting.writer).

La libreria Error Reporting per PHP può essere utilizzata senza dover fornire esplicitamente le credenziali.

Cloud Run è configurato per utilizzare Error Reporting automaticamente. Le eccezioni JavaScript non gestite verranno visualizzate in Logging ed elaborate da Error Reporting senza dover utilizzare la libreria Error Reporting per PHP.

Ambiente flessibile di App Engine

App Engine concede automaticamente il ruolo Writer Error Reporting (roles/errorreporting.writer) al tuo account di servizio predefinito.

La libreria Error Reporting per PHP può essere utilizzata senza dover fornire esplicitamente le credenziali.

Per abilitare Error Reporting nell'ambiente flessibile di App Engine:

  1. Installa le librerie necessarie con questo comando:

    $ composer require google/cloud-error-reporting
  2. Aggiungi la seguente riga alla sezione runtime_config in app.yaml:

enable_stackdriver_integration: true

Quindi, la libreria raccoglie automaticamente tutti gli errori e le eccezioni non rilevate in Error Reporting. Se utilizzi un framework web che installa i propri gestori delle eccezioni, consulta la sezione Integrazioni di framework per ulteriori informazioni.

Google Kubernetes Engine

Per utilizzare Error Reporting con Google Kubernetes Engine, fai quanto segue:

  1. Assicurati che al account di servizio da utilizzare dal tuo container sia stato concesso il ruolo Writer Error Reporting (roles/errorreporting.writer).

    Puoi utilizzare l'account di servizio predefinito di Compute Engine o un service account personalizzato.

    Per informazioni sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

  2. Crea il cluster e concedigli l'cloud-platform ambito di accesso.

    Ad esempio, il seguente comando create specifica l'ambito di accesso cloud-platform e un account di servizio:

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

Compute Engine

Per utilizzare Error Reporting con le istanze VM di Compute Engine, svolgi le seguenti operazioni:

  1. Assicurati che al account di servizio da utilizzare dalla tua istanza VM sia stato concesso il ruolo Writer di Error Reporting (roles/errorreporting.writer).

    Puoi utilizzare l'account di servizio predefinito di Compute Engine o un service account personalizzato.

    Per informazioni sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

  2. Nella Google Cloud console, vai alla pagina Istanze VM.

    Vai a Istanze VM

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Compute Engine.

  3. Seleziona l'istanza VM che deve ricevere l'cloud-platform ambito di accesso.

  4. Fai clic su Interrompi e poi su Modifica.

  5. Nella sezione Identità e accesso API, seleziona un account di servizio con il ruolo Writer di Error Reporting (roles/errorreporting.writer).

  6. Nella sezione Ambiti di accesso, seleziona Consenti l'accesso completo a tutte le API Cloud e poi salva le modifiche.

  7. Fai clic su Avvia/Riprendi.

Esempio

1. Installa le librerie cloud con questo comando:

$ composer require google/cloud-error-reporting
2. Aggiungi la seguente riga al file php.ini, dove WORKSPACE è il percorso assoluto della directory principale del tuo spazio di lavoro:
auto_prepend_file='/WORKSPACE/vendor/google/cloud-error-reporting/src/prepend.php'

Questo file di pre-elaborazione installa un gestore di eccezioni e un gestore di errori che inviano automaticamente gli errori a Error Reporting.

Se utilizzi l'ambiente flessibile di App Engine, consulta Ambiente flessibile di App Engine in questa pagina.

Esegui app in un ambiente di sviluppo locale

Per utilizzare la libreria Error Reporting per PHP in un ambiente di sviluppo locale, ad esempio eseguendo la libreria sulla tua workstation, devi fornire alla libreria Error Reporting per PHP le credenziali predefinite dell'applicazione locale. Per saperne di più, consulta Autenticarsi in Error Reporting.

Per utilizzare gli esempi di PHP in questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.

  1. Installa Google Cloud CLI.

  2. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  3. Se utilizzi una shell locale, crea credenziali di autenticazione locali per il tuo account utente:

    gcloud auth application-default login

    Non è necessario eseguire questa operazione se utilizzi Cloud Shell.

    Se viene restituito un errore di autenticazione e utilizzi un provider di identità (IdP) esterno, verifica di aver acceduto a gcloud CLI con la tua identità federata.

Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

Il metodo projects.events.report supporta anche le chiavi API. Se vuoi utilizzare le chiavi API per l'autenticazione, non devi configurare un file delle Credenziali predefinite dell'applicazione locale. Per saperne di più, consulta Crea una chiave API nella documentazione sull'autenticazione di Google Cloud .

Visualizza gruppi di errori

Nella console Google Cloud , vai alla pagina Error Reporting:

Vai a Error Reporting

Puoi trovare questa pagina anche utilizzando la barra di ricerca.

Per saperne di più, vedi Visualizzare e filtrare i gruppi di errori.

Integrazioni di framework

Alcuni framework web sostituiscono il gestore delle eccezioni. Di seguito sono riportati esempi per l'attivazione di Error Reporting con Laravel e Symfony. Per gli altri framework, puoi utilizzare Google\Cloud\ErrorReporting\Bootstrap::exceptionHandler come gestore delle eccezioni.

Laravel

Modifica la funzione report nel file app/Exceptions/Handler.php come segue:

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

Devi anche aggiungere un'istruzione use di una riga all'inizio del file:

use Google\Cloud\ErrorReporting\Bootstrap;

Symfony

Crea un nuovo file src/AppBundle/EventSubscriber/ExceptionSubscriber.php con il seguente contenuto:

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