Fehler melden

In dieser Anleitung wird beschrieben, wie Sie nicht erfasste Ausnahmen in der Python Bookshelf-Anwendung mit der Google Cloud Console melden und erfassen.

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. Öffne die Datei config.py zur Bearbeitung und ersetze die folgenden Werte:
    • Legen Sie den Wert von [PROJECT_ID] auf Ihre Projekt-ID fest, die in der Cloud Console sichtbar ist.
    • Lege für [DATA_BACKEND] den Wert fest, den du in der Anleitung Strukturierte Daten verwenden verwendet hast.
    • Wenn du Cloud SQL oder MongoDB verwendest, musst du für die Werte im Abschnitt Cloud SQL oder Mongo die Werte festlegen, die du im Schritt Strukturierte Daten verwenden verwendet hast.
    • Legen Sie den Wert von [CLOUD_STORAGE_BUCKET] auf den Namen Ihres Cloud Storage-Buckets fest.
    • Lege im Abschnitt OAuth2 configuration die Werte für [GOOGLE_OAUTH2_CLIENT_ID] und [GOOGLE_OAUTH2_CLIENT_SECRET] auf die zuvor erstellte Anwendungs-Client-ID und das Secret fest.

  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. In the Google Cloud console, go to the Versions page for App Engine.

    Go to Versions

  2. Select the checkbox for the non-default app version that you want to delete.
  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

Wenn Sie Error Reporting in Aktion sehen möchten, führen Sie absichtlich einen Fehler in den Code ein und suchen Sie dann auf der Seite „Error Reporting“ in der Cloud Console nach der Ausnahme.

  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 der Cloud Console die Stackdriver-Seite Error Reporting auf.

    Python aufrufen

    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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.