Von Errbit zu Sentry

Pascal Zumkehr

Bei der Softwareentwicklung ist die Stabilität unserer Applikationen eines unserer Qualitätsziele. Treten Fehler auf, wollen wir automatisch benachrichtigt werden, um aktiv und zeitnah Massnahmen ergreifen zu können. Seit kurzem unterstützt uns Sentry dabei.

Eine Bibliothek verhält sich in Spezialfällen nicht wie spezifiziert, eine komplexe Konstellation wurde in der Testsuite übersehen oder ein System ist nicht wie gewohnt verfügbar – Laufzeitfehler lassen sich nie ganz vermeiden. Die folgende, leider noch viel zu oft anzutreffende Situation jedoch schon:

Benutzende sehen anstelle des gewünschten Resultats (vielleicht) eine Fehlermeldung, können damit aber in der Regel nichts anfangen, wissen nicht, an wen sie sich wenden sollen und ärgern sich still über die Software. Der Fehler wird allenfalls in eine Log-Datei geschrieben, welche geduldig aber gänzlich unbeachtet auf den Logrotator wartet, um dann schliesslich in /dev/null ihren Frieden zu finden.

Der wichtigste Schritt zur Umgehung dieser Situation ist die automatische Benachrichtigung des Entwicklungsteams bei einem Fehlerfall. Damit werden die Fehler sichtbar und das Team erhält ein Bild über das Verhalten seiner Applikation in der Produktion. Danach gilt es natürlich, die Meldungen zu behandeln, problematisches Verhalten abzufangen und Fehler zu korrigieren.

Mit einer solchen Benachrichtigung können nicht nur der Stacktrace, sondern auch beliebige weitere Kontextinformationen mitgeliefert werden. Dies können beispielsweise die Requestparamter, der User Agent oder die ID des eingeloggten Benutzers sein. Informationen wie diese sind in Log-Dateien wenn dann nur sehr aufwändig zu finden. Das Team erhält damit zusätzliches Wissen, welches essentiell für das Auffinden und Beheben eines Fehlers ist.

Ein kleiner Rückblick

Die einfachste Möglichkeit für automatische Benachrichtigungen bietet E-Mail. Ruby on Rails hatte solche Exception Notifications seit Beginn integriert, und so freuen wir uns seit 2007 auf E-Mails von unseren Applikationen. Das war natürlich sehr rudimentär und konnte durchaus auch mal ein Postfach zum Überlaufen bringen. Aber bereits damit konnten wir oft Probleme beheben, bevor der Kunde uns an der nächsten Sitzung darauf aufmerksam machte.

Bald erschienen die ersten SaaS Lösungen, welche die Fehlermeldungen aggregierten und übersichtlich darstellten. Mit entsprechenden Regeln konnte auch die E-Mail Flut eingedämmt werden. Mit Errbit fanden wir 2012 eine Open Source Lösung, die uns erlaubte, unsere Daten selbst zu hosten. Seither konnten wir unzählige Fehler aktiv angehen und unsere Applikationen kontinuierlich verbessern.

Screenshot Errbit

Errbit ist kompatibel mit Airbrake, welches über Integrationsmöglichkeiten für eine Vielzahl von Sprachen und Frameworks bietet. Im Java und JavaScript Bereich stellte sich jedoch heraus, dass nicht das volle Featureset genutzt werden kann, weshalb wir uns nach weiteren Lösungen umschauten.

Willkommen Sentry

Seit einigen Monaten wacht nun Sentry über unsere Applikationen. Die gewohnten Informationen werden in einem frischen Design dargestellt. Der Stacktrace enthält sogar Ausschnitte aus dem Quellcode, was für eine erste Analyse ganz nützlich ist. Bei JavaScript können Source Maps hinterlegt werden.

Screenshot Sentry

 

Die folgenden Highlights von Sentry unterstützen uns noch besser beim Debugging:

Breadcrumbs

Unter Breadcrumbs versteht Sentry eine Aufzeichnung der letzten Aktionen, welche im Browser ausgeführt wurden. Diese helfen enorm beim Nachvollziehen von Fehlern in JavaScript Applikationen.

Sentry Breadcrumbs

Eigene Kontextinformationen

Der Sentry Client der Applikation kann beliebige Kontextinformationen mitliefern. Neben einem ausführlichen Standardset können auch eigene Informationen mit einem Fehler mitgeschickt werden. Dies kann beispielsweise der Name des aktuellen Tenants oder die Benutzergruppen des eingeloggten Users sein. Somit lassen sich Fehler besser gruppieren und abgrenzen.

Grafische Widgets

Tritt ein Fehler immer zur gleichen Zeit auf, nur punktuell oder beliebig oft? Der grafisch dargestellte zeitliche Verlauf liefert die Antwort auf einen Blick. Auch ob ein Fehler nur in einem bestimmten Browser oder in einer bestimmten Betriebsumgebung auftritt, lässt sich anhand der Darstellungen sofort erkennen. Solche Hinweise liefern wertvolle Anhaltspunkte beim Nachvollziehen der Fehlerursache.

Sentry Tags

 

Releases

Der aktuelle Release einer Applikation lässt sich im Sentry Client ebenfalls konfigurieren, z.B. als Git Commit Hash. Dadurch lassen sich vom Entwicklungsteam bereits korrigierte Fehler als ‚Resolved in next release‘ markieren, wodurch keine weiteren Meldungen verschickt werden. Sollte der Fehler mit einer anderen Releasenummer erneut auftauchen, landet wieder eine Nachricht beim Team.

Teams

Zu guter Letzt bietet Sentry eine Vielzahl von Einstellungsmöglichkeiten, um die Organisation optimal zu unterstützen. Dazu gehört ein praktisches Berechtigungskonzept, welches verschiedene Teams mit jeweils eigenen Projekten ermöglicht. So lässt sich eine Sentry Instanz problemlos von einem ganzen Unternehmen verwenden.

Fazit

Automatische Benachrichtigungen bei Applikationsfehlern gehören für uns in die Standardwerkzeugkiste jeder Entwicklerin und jedes Entwicklers. Durch die kontinuierliche Behebung von auftretenden Problemen lässt sich die Qualität einer Applikation stetig erhöhen. Mit Sentry können wir Fehler noch besser analysieren und die Stabilität unserer Software sicherstellen.

Kommentare sind geschlossen.