Logging, Performance Management, Debugging, Alerting und Tracking

15 Java-Tools, die jeder Entwickler kennen sollte

Alex Zhitnitsky

© Shutterstock.com/Africa Studio

Im Gegensatz zu der hypothetischen Frage, ob man bei der Zombie-Apokalypse lieber zur Machete oder zur Schrotflinte greift, sind Probleme in Java-Produktionsumgebungen sehr real. Heutzutage ist man weniger denn je vor Problemen gefeit. Schließlich werden die Code-Lieferzyklen auf Wochen, Tage oder gar Stunden verkürzt.

Damit Sie also nicht „von den Zombies überrannt“ werden, wird im Folgenden ein Survival Kit vorgestellt, das genau aufzeigt, welche Auswirkungen neuer Code potentiell auf Ihr System hat – seien es Performance-Einbrüche oder Funktionsausfälle – und wie diese wieder repariert werden können.

Logging

Neben stetig schrumpfenden Release-Zyklen sind auch ständig wachsende, schnell mehrere Gigabyte pro Tag umfassende, Logdateien Bestandteil moderner Entwicklungszyklen. Und wenn nach einer Bereitstellung Probleme auftreten – und man sich mit mehreren Gigabyte an unstrukturierten Daten aus mehreren Quellen und von verschiedenen Maschinen herumschlagen muss – ist eine schnelle Reaktion fast unmöglich. Es sei denn, man nutzt die richtigen Tools.

Diese Tools können grundsätzlich in On-Premise-Lösungen wie Splunk und SaaS-Mitbewerber wie Sumo Logic, Loggly und andere eingeteilt werden. Es stehen zahlreiche Alternativen mit ähnlichen Angeboten zur Auswahl, weshalb wir die Log-Verwaltung einer gründlicheren Analyse unterzogen haben.

1. Tipp: Verfolgen Sie eine solide Log-Verwaltungs-Strategie, um hinter die Kulissen der blanken Logdateien zu blicken und nach einer neuen Bereitstellung schnell reagieren zu können.

Eine unserer Erfahrung nach extrem nützliche Logging-Architektur ist der quelloffene ELK-Stack. Doch um was handelt es sich dabei genau? Im Grunde um eine Kombination von Elasticsearchs Such- und Analysefähigkeiten, Logstash (als Protokoll-Aggregator) und Kibana (Dashboard-Visualisierung). Wir nutzen ihn schon eine Weile, füttern ihn mit aus unseren Java-Logs und Redis; sowohl unsere Entwicklern als auch die Business-Intelligence-Abteilung verwenden ihn.

Da Elasticsearch mittlerweile praktisch in Logstash enthalten ist und Kibana ebenfalls ein Elasticsearch-Produkt ist, gestalten sich Integration und Setup denkbar einfach.

Steht eine neue Bereitstellung ins Haus, folgen die Dashboards den benutzerdefinierten Indikatoren über den Gesundheitszustand unserer Anwendung. Die Indikatoren werden in Echtzeit aktualisiert, was nach dem Upload neuen Codes in die Produktion eine genaue Überwachung ermöglicht.

2. Tipp: Das Suchen, Visualisieren und das einfache Ansammeln von Logs aus verschiedenen Quellen sind Schlüsselfaktoren bei der Festlegung Ihrer Log-Verwaltungs-Strategie.

3. Tipp: Aus Entwicklersicht kann die Auswertung der Auswirkungen einer neuen Bereitstellung auch Business-Intelligence-Aspekte umfassen.

Wichtige Tools:

1. On-premise: Splunk

2. SaaS: Sumo Logic


3. SaaS: Loggly

4. Open Source: Graylog2

5. Open Source: Fluentd


6. Der ELK Stack (Open source): Elasticsearch + Logstash + Kibana

Performance Monitoring

Kürzere Releasezyklen und größer werdende Logdateien sind aber nicht alles:

Die Anzahl der Benutzeranfragen wächst exponentiell – und alle erwarten höchste Performance. Will man nicht viel Arbeit in die Optimierung investieren, wird einen schlichtes Logging nicht weit bringen.

Vor diesem Hintergrund gelten dedizierte Application Performance Management (APM)-Tools nicht länger als Luxus, sondern entwickeln sich mit rasanter Geschwindigkeit zum Standard. Im Kern bedeutet APM, dass der Zeitaufwand für die Ausführung verschiedener Bereiche des Codes sowie für den Abschluss von Transaktionen zeitlich geplant wird. Dies wird entweder durch Instrumentierung des Codes, Überwachungsprotokolle oder Netzwerk- bzw. Hardware-Metriken erreicht, und zwar sowohl am eigenen Backend als auch auf dem Gerät des Benutzers.

Die zwei ersten modernen APM-Tools, die einem in den Sinn kommen, sind New Relic – dessen gleichnamiger Hersteller vor Kurzem an die Börse gegangen ist – sowie AppDynamics.

Jedes zielte traditionell auf eine andere Art von Entwickler ab, von größeren Unternehmen bis hin zu Startups. Doch nun, da beide Unternehmensarten vermehrt an die Börse gehen und große Wachstumsraten verzeichnen können, beginnen die Grenzen zu verschwimmen. Verfolgt man das Nutzungsmodell On-Premise, ist AppDynamics das Tool der Wahl. Ansonsten kann man nicht viel falsch machen; die Wahl des Werkzeugs hängt davon ab, welches am besten zum eigenen Stack passt – und welche der gebotenen Features man tatsächlich benötigt.

Lesen Sie dazu auch die kürzlich von uns veröffentlichte Analyse, die beide Werkzeuge einem direkten Vergleich unterzieht.

DevOpsCon Istio Cheat Sheet

Free: BRAND NEW DevOps Istio Cheat Sheet

Ever felt like service mesh chaos is taking over? As a follow-up to our previous cheat sheet featuring the most important commands and functions, DevOpsCon speaker Michael Hofmann has put together the 8 best practices you should keep in mind when using Istio.

Zwei weitere interessante, unlängst veröffentlichte, Tools sind Ruxit von Compuware und DripStat von Chronon Systems. Beide stellen einen Versuch von größeren Unternehmen dar, den von New Relic bereiteten SaaS-Monitoring-Markt mit eigenen Produkten anzusprechen. In Bezug auf JVM-Interna sind auch  jClarity und Plumbr definitiv einen Blick wert.

4. Tipp: Neue Bereitstellungen können die Performance Ihrer Anwendung beeinflussen, sie verlangsamen. APM-Tools können einen allgemeinen Überblick über den Gesundheitszustand Ihrer Anwendung liefern.

Wichtige Tools:

1. AppDynamics


2. New Relic

Neulinge:

1. jClarity


2. Plumbr


3. Ruxit


4. Dripstat

Debugging in der Produktion

Releasezyklen werden kürzer, Logdateien größer, die Anzahl der Benutzeranfragen explodiert…und es gibt schlicht und ergreifend keinen Spielraum für Fehler. Wenn doch ein Fehler auftritt, so muss man in der Lage sein, ihn sofort zu beseitigen.

Großangelegte Produktionsumgebungen können täglich Millionen von Fehlern von mehreren hundert verschiedenen Stellen im Code erzeugen. Manche Fehler können trivial sein, während andere für den Ausfall kritischer Anwendungsfunktionen und nachteilige Auswirkungen für die Endnutzer veantwortlich sind – ohne dass Sie es bemerken. Um diese Fehler zu identifizieren bzw. überhaupt zu erfahren, dass einer aufgetreten ist, wäre man klassischerweise auf die Logdateien oder ein Log-Management-Tool angewiesen – beseitigt wären sie damit allerdings noch lange nicht.

Takipi hingegen verrät, welche Fehler das größte Risiko darstellen und deshalb höchste Prioriät genießen sollten und bietet zudem direkt umsetzbare Informationen darüber, wie sie zu beheben sind.

Mit Blick auf die Fehler, die nach einer neuen Bereitstellung entstehen, bietet Takipi Lösungen in drei großen Problembereichen:

1. Man weiß, welche Fehler einen am meisten beeinträchtigen: Mit Takipi werden 100 % aller Codefehler in der Produktion, inklusive JVM-Ausnahmen und Logfehler, gefunden. Mithilfe von Smart Filtering kann man quasi durch das Hintergrundrauschen dringen und sich auf die wichtigsten Fehle konzentrieren. Über 90 % der Takipi-User berichten davon, bereits am ersten Tag der Nutzung mindestens einen kritischen Bug in der Produktion gefunden zu haben.

2. Man investiert weniger Zeit und Energie in das Debugging: Takipi reproduziert automatisch jeden Fehler und zeigt sowohl den Code als auch die Variablen an, die zu ihm führten – und das sogar über Server hinweg. Die Notwendigkeit, die Fehler manuell zu reproduzieren, entfällt somit, was die Wartungsdauer und somit die für die Problemlösung aufzuwendende Zeit drastisch reduziert.

3. Bereitstellung ohne Risiko: Takipi benachrichtigt den Nutzer, wenn sich durch eine neue Version Fehler einschleichen und sich bereits behobene Fehler wieder zurückmelden.

5. Tipp: Mit Takipi können Sie schnell reagieren und jedes Problem lösen, dass sich nach einem neuen Release ergibt.

Werkzeuge:

1. Takipi

Alerting und Tracking

Releasezyklen, Logdateien, Benutzeranfragen, kein Spielraum für Fehler…wie behält man dabei den Überblick?  Sie vermuten wahrscheinlich, dass diese Kategorie sich mit den vorherigen überschneidet, und da haben Sie nicht ganz Unrecht. ABER: Wenn jedes Tool seine eigenen Fehlerbreichte abliefert, kann es ziemlich unübersichtlich werden, insbesondere in der Phase nach einer neuen Bereitstellung, in der alle möglichen Arten unerwarteter Dinge geschehen können (oder weniger schonend ausgedrückt: die Hölle los ist).

Eines der führenden, diese Problemstellung angehenden, Incident-Management-Tools ist PagerDuty: Es sammelt die Meldungen von Ihren Monitoring-Tools, erstellt Zeitpläne, um ihr Team zu koordinieren und sendet jede Meldung via Text, E-Mail, SMS oder Push-Benachrichtigung an die jeweils zuständige Person.

6. Tipp: Denken Sie darüber nach, ein Incident-Management-System zu verwenden, um der Informationsüberlastung Herr zu werden.

Ein spezialisiertes Tool, das wir hier bei Takipi gerne verwenden, ist Pingdom. Seine Funktionsweise ist recht einfach – und es funktioniert einfach zuverlässig: Es kümmert sich rund um die Uhr um das Tracking und Alerting der Reaktionszeiten Ihrer Webseite, um die einfache, aber entscheidende Frage „Ist sie erreichbar?“ zu beantworten. Zur Sondierung dieser Frage werden die verschiedensten, über die gesamte Welt verteilten, Standorte genutzt.

Eine weitere Herangehensweise, um mit der Informationsüberlastung umzugehen, ist ein Fehlertracking, das weit über die Funktionalität von Log-Analysatoren hinausgeht: die Nutzung von Smart-Dashboards für die Verwaltung von Ausnahmen und Protokollfehlern. Diese aggregieren mittels Log Events oder anderen Hilfsmitteln alle Daten von allen Servern und Maschinen an einem Ort aggregieren.

7. Tipp: Codefehler treten in den verschiedensten Formen auf. Deshalb sollten sie mithilfe eines Fehler-Tracking-Tools einer besonderen Behandlung unterzogen werden. Wenn dabei auch gleichzeitig ein paar Bugs ihr Leben lassen müssen: umso besser!

Wichtige Tools:

1. PagerDuty

2. Pingdom

Fazit

Wir haben gesehen, wie moderne Softwareentwicklung den Release-Lebenszyklus beeinflusst und wie man mit den Konsequenzen der neuen, schnellen Implementierungen umgeht. Denn bevor man die Auswirkungen des letzten Updates vollständig begreifen konnte, ist oft schon neuer Code da. Allgemein sollte jedes Tool, dessen Nutzung Sie erwägen, die folgenden fünf Herausforderungen moderner Softwareentwicklung stemmen können:

1. Immer kürzere Releaszyklen

2. Wachsende Logdateien

3. Zunehmende Benutzeranfragen

4. Kleinerer Spielraum für Fehler

5. Informationsüberlastung

Am wichtigsten dabei ist, dass Sie darüber nachdenken, wie Sie mit den angesprochenen Problemen umgehen und welches Sie die meiste Zeit kostet. Die Chancen stehen gut, dass bereits ein Tool existiert, das Ihr Problem lösen kann.

Zuerst erschienen auf dem Takipi-Blog. Übersetzt und bearbeitet von der JAXenter-Redaktion.

Aufmacherbild: Emergency preparation equipment on wooden table, on dark background von shutterstock.com / Urheberrecht: Africa Studio 

Geschrieben von
Alex Zhitnitsky

Alex Zhitnitsky arbeitet bei Takipi, wo er Java- and Scala-Entwickler dabei unterstützt, Probleme in der Produktion zu beheben.

Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
4000
  Subscribe  
Benachrichtige mich zu: