Fehler melden

In dieser Anleitung wird beschrieben, wie Sie nicht abgefangene Ausnahmen in der Python Bookshelf App mithilfe der Google Cloud Console melden und verfolgen.

Error Reporting bietet ein zentrales Dashboard, das die Anzahl der einzelnen Fehler, Stacktraces und einen Verlauf der Vorkommen anzeigt. Sie können auch eine Benachrichtigung einrichten, wenn Fehler auftreten.

Diese Seite ist Teil einer mehrseitigen Anleitung. Wechseln Sie zur Python Bookshelf App, um die Dokumentation von Anfang an durchzugehen und eine Anleitung zur Einrichtung zu erhalten.

Einstellungen konfigurieren

In diesem Abschnitt wird Code im Verzeichnis 5-logging verwendet. Bearbeiten Sie die Dateien und führen Sie Befehle in diesem Verzeichnis aus.

  1. Öffnen Sie die Datei config.py zum Bearbeiten und ersetzen Sie die folgenden Werte:
    • Legen Sie den Wert von [PROJECT_ID] auf Ihre Projekt-ID fest, die in der Cloud Console angezeigt wird.
    • Legen Sie für [DATA_BACKEND] den Wert fest, den Sie in der Anleitung Strukturierte Daten verwenden verwendet haben.
    • Wenn Sie Cloud SQL oder MongoDB verwenden, legen Sie im Abschnitt Cloud SQL bzw. Mongo dieselben Werte fest, die Sie auch im Schritt Strukturierte Daten verwenden angegeben haben.
    • Legen Sie den Wert von [CLOUD_STORAGE_BUCKET] auf den Namen Ihres Cloud Storage-Buckets fest.
    • Legen Sie im Abschnitt OAuth2 configuration die Werte von [GOOGLE_OAUTH2_CLIENT_ID] und [GOOGLE_OAUTH2_CLIENT_SECRET] auf die Client-ID und das Secret der Anwendung fest, die Sie zuvor erstellt haben.

  2. Speichern und schließen Sie die config.py-Datei.

Wenn Sie Cloud SQL verwenden:

  1. Öffnen Sie die Datei app.yaml zur Bearbeitung.
  2. Setzen Sie den Wert von cloudsql-instance auf denselben Wert, der für [CLOUDSQL_CONNECTION_NAME] in der Datei config.py verwendet wird. Verwenden Sie das Format project:region:cloudsql-instance. Entfernen Sie die Kommentarzeichen für diese gesamte Zeile.
  3. Speichern und schließen Sie die app.yaml-Datei.

Abhängigkeiten installieren

Verwenden Sie die folgenden Befehle, um eine virtuelle Umgebung zu erstellen und Abhängigkeiten zu installieren:

Linux/macOS

virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt

Windows

virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt

App auf lokalem Computer ausführen

  1. Starten Sie einen lokalen Webserver:

    python main.py
    
  2. Geben Sie im Browser die folgende Adresse ein:

    http://localhost:8080
    

Drücken Sie Strg+C, um den Worker und dann den lokalen Webserver zu beenden.

App in der flexiblen App Engine-Umgebung bereitstellen

  1. Stellen Sie die Beispiel-App bereit:

    gcloud app deploy
    
  2. Geben Sie im Webbrowser die folgende URL ein:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    Ersetzen Sie Folgendes:

Wenn Sie die Anwendung aktualisieren, stellen Sie die aktualisierte Version bereit. Dazu geben Sie den gleichen Befehl ein, den Sie bei der ersten Bereitstellung der Anwendung verwendet haben. Bei der neuen Bereitstellung wird eine neue Version der Anwendung erstellt und zur Standardversion hochgestuft. Die älteren Versionen der Anwendung und die zugehörigen VM-Instanzen werden beibehalten. Alle diese Anwendungsversionen und VM-Instanzen sind kostenpflichtige Ressourcen. Löschen Sie zur Senkung der Kosten die nicht standardmäßigen Versionen Ihrer Anwendung.

So löschen Sie eine App-Version:

  1. Rufen Sie in der Cloud Console die Seite Versionen für App Engine auf.

    Zur Seite "Versionen"

  2. Klicken Sie auf das Kästchen für die nicht standardmäßige Anwendungsversion, die Sie löschen möchten.
  3. Klicken Sie zum Löschen der Anwendungsversion auf Löschen.

Weitere Informationen zum Bereinigen abrechenbarer Ressourcen finden Sie im letzten Schritt dieser Anleitung im Abschnitt Bereinigen.

Fehler simulieren

Fügen Sie absichtlich einen Fehler in Ihren Code ein und suchen Sie auf der Seite "Error Reporting" der Cloud Console nach der Ausnahme, um Error Reporting in Aktion zu sehen.

  1. Fügen Sie in bookshelf/crud.py einen Vorgang hinzu, der auf eine nicht definierte Variable zugreift und in der Indexansicht ein ReferenceError generiert.

    @crud.route("/")
    def list():
       x[3]
    
  2. Anwendung bereitstellen.

    gcloud app deploy
  3. Rufen Sie die Indexseite auf.

    gcloud app browse

    Sie können die Nachricht An internal error occurred anzeigen.

  4. Rufen Sie in Stackdriver die Seite Error Reporting auf.

    Zu Python

    Der Fehler wird aufgelistet.

    Fehler anzeigen

  5. Klicken Sie auf den Fehler, um Informationen über den Fehler aufzurufen, z. B. wann der Fehler zuletzt aufgetreten ist, wie oft der Fehler aufgetreten ist, ein Histogramm der Vorkommen und den Stacktrace.

Code verstehen

Zur Meldung nichterfasster Ausnahmen verwendet der Code zuerst den Flask-Decorator errorhandler und meldet die Ausnahme dann mithilfe der Cloud-Clientbibliotheken für Python an Error Reporting.

@app.errorhandler(500)
def server_error(e):
    client = error_reporting.Client(app.config['PROJECT_ID'])
    client.report_exception(
        http_context=error_reporting.build_flask_context(request))
    return """
    An internal error occurred.
    """, 500

Der Client fügt automatisch die Traceback-Informationen hinzu und verwendet eine Hilfsfunktion, zum Extrahieren der relevanten Anfragedetails aus der Flask-Anfrage, die Error Reporting mit den relevanten Stacktraces und HTTP-Kontexten für alle nicht erfassten InternalServerError HTTP 500-Ausnahmen in Ihrer Anwendung auffüllt.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.