Blog
Wie Sie die Fehlerprotokolle in der Google-Fehlerberichterstattung sichtbar machen

Möchten Sie wissen, wie Sie Ihre Fehlerprotokolle in Google Error Reporting erscheinen lassen können? In diesem Blog zeige ich Ihnen, wie Sie die Protokollierung Ihrer Anwendung so konfigurieren, dass in Google Cloud Logging protokollierte Fehler automatisch in Google Error Reporting erscheinen: Durch die Konfiguration der strukturierten Protokollierung und das Hinzufügen von zwei Eigenschaften zum Protokolldatensatz lässt sich diese Integration schnell bewerkstelligen.
Google Fehlerberichterstattung
Google Error Reporting ist ein netter Dienst, der in Ihren Anwendungen entdeckte Fehler sammelt und eine schnelle Reaktion und Lösung ermöglicht.

Hier ist der Grund, warum ich sie für unschätzbar halte:
- Es bietet einen schnellen Einblick in verschiedene Fehlertypen.
- Es unterstützt Benachrichtigungen für neue Fehler über verschiedene Kanäle hinweg.
- Es ermöglicht die direkte Verknüpfung mit Tickets in Incident Management Systemen.
Benachrichtigungen können an verschiedene Kanäle gesendet werden, von SMS und Slack bis hin zur Google Cloud App. Kurz gesagt, es bietet eine sofort einsatzbereite Unterstützung für das Incident Response Management.
Fehlerprotokolle erscheinen nicht in der Fehlerberichterstattung
Die Protokolle aller unserer Anwendungen, die in Google Cloud laufen, werden bereits erfasst und in Google Cloud Logging geschrieben. Wann immer eine Ausnahme im Protokoll auftaucht, wird sie automatisch von Google Error Reporting erkannt. Aber es gibt einen Haken: Fehler, die von der Anwendung protokolliert werden, ohne dass eine Ausnahme ausgelöst wird, erscheinen nicht in der Fehlerberichterstattung.
Protokoll der gemeldeten Fehlerereignisse
Der Dokumentation zufolge können Fehler über die Google Error Reporting API oder durch das Schreiben eines ReportedErrorEvent-Datensatzes in das Protokoll gemeldet werden. Der direkte Aufruf der API ist nicht ideal, da der Fehler dadurch im Protokoll dupliziert wird. Stattdessen habe ich entdeckt, dass das Hinzufügen von serviceContextund reportLocation zum Protokolleintrag es Error Reporting ermöglicht, den Fehler zu erkennen.
Als ich mich mit der Google Cloud Logging Python-Bibliothek beschäftigte, fand ich heraus, dass der Google Cloud Logging-Handler auf das json_fields -Attribut des Log-Datensatzes reagiert und diese Felder automatisch in die strukturierte Log-Ausgabe einfügt.
Fügen Sie den Fehlerkontext als json-Felder hinzu
Jetzt wissen Sie also, was Sie tun müssen: Fügen Sie einfach die erforderlichen JSON-Felder zum Protokolldatensatz hinzu, wie in diesem Codeschnipsel gezeigt:
def addErrorContextFilter(record: logging.LogRecord) ->bool:
"""
adds the attribute `json_fields` to the LogRecords of severity ERROR
to ensure that the log is detected by Google Error Reporting.
"""
if record.levelno >= logging.ERROR:
setattr(
record,
"json_fields",
{
"serviceContext": {"service": "demo", "version": "1.0"},
"context": {
"reportLocation": {
"filePath": record.pathname,
"lineNumber": record.lineno,
"functionName": record.funcName,
}
},
},
)
return True
Natürlich sollten Sie den Namen und die Version des Dienstes Ihrer Anwendung auf etwas intelligentere Weise angeben. Jetzt müssen Sie nur noch den Filter zum Standard-Logger hinzufügen.
Python Logging für die Verwendung von Google Logging einrichten
Der folgende Codeschnipsel zeigt, wie Sie die strukturierte Protokollierung in Python einrichten und den Filter für den Fehlerkontext hinzufügen.
import google.cloud.logging_v2
import logging
def main():
##Setup the Python error logging to use Google Cloud Logging
credentials, project = gcloud_config_helper.default()
client = google.cloud.logging_v2.Client(
project=project,
credentials=credentials)
client.setup_logging(log_level=logging.INFO)
## Now add the ErrorContext filter
logging.getLogger().addFilter(addErrorContextFilter)
Fazit
Mit nur ein paar Zeilen Code können Sie dafür sorgen, dass jedes Fehlerprotokoll in Google Error Reporting erscheint. Idealerweise könnte Google dies standardmäßig in die Standardbibliothek aufnehmen, um den Prozess noch weiter zu vereinfachen.
Bild von Michael Geiger aus Pixabay
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Contact