PHP-Anwendungen für Error Reporting instrumentieren

Mit der Error Reporting-Bibliothek für PHP können Sie Fehlerereignisse direkt aus Ihren PHP-Anwendungen an Error Reporting senden, um Laufzeitabstürze zu diagnostizieren und zu überwachen. Wenn Sie Ihre Anwendung mit der Bibliothek instrumentieren, können Sie benutzerdefinierte Fehlerereignisse melden und Fehler erfassen, auch wenn für Ihre Log-Buckets vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) verwendet werden.

Bei Anwendungen, die auf integrierten Google Cloud Diensten ausgeführt werden, einschließlich Cloud Run Functions, App Engine, Compute Engine und Google Kubernetes Engine, kann Error Reporting Fehlerereignisse auch automatisch aus Cloud Logging ableiten, ohne dass die Error Reporting-Bibliothek für PHP erforderlich ist. Damit Error Reporting Fehlerereignisse aus Logs ableiten kann, müssen Ihre Logeinträge den Anforderungen an die Fehlerformatierung entsprechen und in einem Nicht-CMEK-Log-Bucket gespeichert werden, der dem ursprünglichen Projekt oder dem Zielprojekt gehört, an das die Logs weitergeleitet wurden.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  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

Clientbibliothek installieren

Mit der Error Reporting-Bibliothek für PHP können Sie Fehlerereignisse, die von PHP-Anwendungen gemeldet werden, die fast überall ausgeführt werden, überwachen und ansehen.

Weitere Informationen zur Installation finden Sie in der Dokumentation der Error Reporting-Bibliothek für PHP. Probleme können Sie über die Problemverfolgung melden.

Clientbibliothek konfigurieren

Das Verhalten der Error Reporting-Bibliothek für PHP kann angepasst werden. Die Konfiguration der Bibliothek enthält eine Liste der Konfigurationsoptionen.

Apps auf Google Cloudausführen

Wenn Sie Fehlergruppen mit projects.events.report erstellen möchten, benötigt Ihr Dienstkonto die Rolle „Error Reporting Writer“ (roles/errorreporting.writer).

Einige Google Cloud -Dienste weisen dem entsprechenden Dienstkonto automatisch die Rolle „Error Reporting Writer“ (roles/errorreporting.writer) zu. Für einige Dienste müssen Sie diese Rolle jedoch dem entsprechenden Dienstkonto zuweisen.

Cloud Run und Cloud Run Functions

Das von Cloud Run verwendete Standarddienstkonto hat die Berechtigungen der Rolle „Error Reporting Writer“ (roles/errorreporting.writer).

Die Error Reporting-Bibliothek für PHP kann verwendet werden, ohne dass Anmeldedaten explizit angegeben werden müssen.

Cloud Run ist so konfiguriert, dass Error Reporting automatisch verwendet wird. Nicht abgefangene JavaScript-Ausnahmen werden im Logging angezeigt und von Error Reporting verarbeitet, ohne dass die Error Reporting-Bibliothek für PHP verwendet werden muss.

Flexible App Engine-Umgebung

App Engine weist Ihrem Standarddienstkonto automatisch die Rolle „Error Reporting-Autor“ (roles/errorreporting.writer) zu.

Die Error Reporting-Bibliothek für PHP kann verwendet werden, ohne dass Anmeldedaten explizit angegeben werden müssen.

Gehen Sie zum Aktivieren von Error Reporting in der flexiblen App Engine-Umgebung so vor:

  1. Installieren Sie die erforderlichen Bibliotheken mit dem folgenden Befehl:

    $ composer require google/cloud-error-reporting
  2. Fügen Sie die folgende Zeile in den Abschnitt runtime_config in app.yaml ein:

enable_stackdriver_integration: true

Danach erfasst die Bibliothek automatisch alle Fehler und nicht abgefangenen Ausnahmen und sendet sie an Error Reporting. Wenn Sie ein Web-Framework verwenden, das seine eigenen Ausnahme-Handler installiert, finden Sie unter Framework-Integrationen weitere Informationen.

Google Kubernetes Engine

So verwenden Sie Error Reporting mit Google Kubernetes Engine:

  1. Achten Sie darauf, dass dem Dienstkonto, das von Ihrem Container verwendet werden soll, die Rolle „Error Reporting Writer“ (roles/errorreporting.writer) zugewiesen wurde.

    Sie können entweder das Compute Engine-Standarddienstkonto oder ein benutzerdefiniertes Dienstkonto verwenden.

    Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

  2. Erstellen Sie Ihren Cluster und gewähren Sie ihm den cloud-platform-Zugriffsbereich.

    Im folgenden Beispiel wird mit dem Befehl „create“ der Zugriffsbereich cloud-platform und ein Dienstkonto angegeben:

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

Compute Engine

So verwenden Sie Error Reporting mit Compute Engine-VM-Instanzen:

  1. Prüfen Sie, ob dem Dienstkonto, das von Ihrer VM-Instanz verwendet werden soll, die Rolle „Error Reporting Writer“ (roles/errorreporting.writer) zugewiesen wurde.

    Sie können entweder das Compute Engine-Standarddienstkonto oder ein benutzerdefiniertes Dienstkonto verwenden.

    Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

  2. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf:

    Zu Seite VM-Instanzen

    Wenn Sie diese Seite über die Suchleiste finden, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Compute Engine lautet.

  3. Wählen Sie die VM-Instanz aus, die den cloud-platform-Zugriffsbereich erhalten soll.

  4. Klicken Sie auf Beenden und dann auf Bearbeiten.

  5. Wählen Sie im Abschnitt Identität und API-Zugriff ein Dienstkonto mit der Rolle „Error Reporting Writer“ (roles/errorreporting.writer) aus.

  6. Wählen Sie im Bereich Zugriffsbereiche die Option Uneingeschränkten Zugriff auf alle Cloud APIs zulassen aus und speichern Sie die Änderungen.

  7. Klicken Sie auf Starten/Fortsetzen.

Beispiel

1. Installieren Sie die Cloudbibliotheken mit dem folgenden Befehl:

$ composer require google/cloud-error-reporting
2. Fügen Sie der Datei php.ini die folgende Zeile hinzu, wobei WORKSPACE der absolute Pfad zum Stammverzeichnis Ihres Arbeitsbereichs ist:
auto_prepend_file='/WORKSPACE/vendor/google/cloud-error-reporting/src/prepend.php'

Diese vorangestellte Datei installiert einen Ausnahme-Handler und einen Fehler-Handler, die automatisch Fehler an Error Reporting senden.

Wenn Sie die flexible App Engine-Umgebung verwenden, lesen Sie den Abschnitt Flexible App Engine-Umgebung auf dieser Seite.

Apps in einer lokalen Entwicklungsumgebung ausführen

Wenn Sie die Error Reporting-Bibliothek für PHP in einer lokalen Entwicklungsumgebung verwenden möchten, z. B. wenn Sie die Bibliothek auf Ihrer eigenen Workstation ausführen, müssen Sie der Error Reporting-Bibliothek für PHP die lokalen Standardanmeldedaten für Anwendungen zur Verfügung stellen. Weitere Informationen finden Sie unter Authentifizierung für Error Reporting.

Wenn Sie die PHP-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

  1. Installieren Sie die Google Cloud CLI.

  2. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  3. Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:

    gcloud auth application-default login

    Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.

    Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.

Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

Die projects.events.report-Methode unterstützt auch API-Schlüssel. Wenn Sie API-Schlüssel für die Authentifizierung verwenden möchten, müssen Sie keine lokale ADC-Datei (Standardanmeldedaten für Anwendungen) einrichten. Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter API-Schlüssel erstellen.

Fehlergruppen ansehen

Rufen Sie in der Google Cloud Console die Seite Error Reporting auf:

Error Reporting aufrufen

Sie können diese Seite auch über die Suchleiste finden.

Weitere Informationen finden Sie unter Fehlergruppen ansehen und filtern.

Framework-Integrationen

Einige Web-Frameworks überschreiben den Ausnahme-Handler. Im Folgenden finden Sie Beispiele zur Verwendung von Error Reporting mit Laravel und Symfony. Für andere Frameworks können Sie Google\Cloud\ErrorReporting\Bootstrap::exceptionHandler als Ausnahme-Handler verwenden.

Laravel

Bearbeiten Sie die Funktion report in der Datei app/Exceptions/Handler.php so:

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

Außerdem müssen Sie am Anfang der Datei eine einzeilige use-Anweisung einfügen:

use Google\Cloud\ErrorReporting\Bootstrap;

Symfony

Erstellen Sie eine neue Datei vom Typ src/AppBundle/EventSubscriber/ExceptionSubscriber.php mit folgendem Inhalt:

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