Bessere MoSKito-Dashboards mit Chart- und Producer-Patterns
MoSKito 2.8.7 bringt Auto-Accumulators, Chart-Patterns und Producer-Patterns, sodass ein Dashboard alle passenden Producer automatisch aufnimmt. Als Beispiel bauen wir ein ServiceBoard für den BurgerShop.
Benutzerdefinierte Dashboards gehören zweifellos zu den nützlichsten Visualisierungsfunktionen, die MoSKito zu bieten hat. Alle zusammengehörigen Informationen auf einen Blick an einem Ort zu sehen, verbessert die Analysemöglichkeiten und hilft beim Aufspüren von Anomalien. Bisher konnte die Konfiguration eines Dashboards jedoch mühsam sein, besonders bei einer großen Anzahl von Charts und Producern. Außerdem musste ein neuer Producer im System explizit zum Dashboard hinzugefügt werden – ein Schritt, der leicht übersehen werden konnte. Mit MoSKito 2.8.7 haben wir uns verbessert!
Oft möchten wir eine ganze Klasse von Producern auf einmal analysieren, um Anomalien schnell zu erkennen. Beispielsweise möchten wir alle Services, alle DAOs oder alle Actions überwachen und sehen, welche davon heraussticht. Unabhängig davon, wie wir die Producer selbst im System bekannt machen, mussten wir bisher trotzdem jeden Chart (Accumulator) und das Dashboard einzeln konfigurieren. Das kann mühsam sein, besonders bei neu hinzugefügten oder entfernten Producern. Mit Auto-Accumulators, Chart- und Producer-Patterns können wir diesen Prozess jetzt beschleunigen.
Als Beispiel möchten wir alle Services in unserer Beispielanwendung burgershop überwachen. Die burgershop-Anwendung dient hier als Grundlage unseres Integration Guides: Der komplette MoSKito Integration Guide – Schritt 1 sowie hier: Bestehende Anwendungen mit dem MoSKito Javaagent überwachen. Wir richten ein neues Dashboard ein, auf dem wir alle Services im System und die zugehörigen Informationen sehen.
Schritt 1: Auto-Accumulators einrichten
Um etwas auf einem Dashboard anzuzeigen, müssen wir es zunächst haben. Da wir Services überwachen, möchten wir die Anzahl der Requests und Fehler sowie die Gesamt- und durchschnittliche Ausführungszeit sehen. Um die Werte für jeden Service automatisch als Chart darzustellen, konfigurieren wir für jeden der genannten Werte (Requests, Fehler, Gesamtzeit, durchschnittliche Dauer) einen Auto-Accumulator:
"@accumulatorsConfig" : {
"accumulationAmount": 200,
"@autoAccumulators": [
{
"namePattern": "$PRODUCERNAME.REQ.1m",
"producerNamePattern": "(.*)Service",
"statName": "cumulated",
"valueName": "req",
"intervalName": "1m"
},
{
"namePattern": "$PRODUCERNAME.TIME.1m",
"producerNamePattern": "(.*)Service",
"statName": "cumulated",
"valueName": "time",
"intervalName": "1m"
},
{
"namePattern": "$PRODUCERNAME.AVG.1m",
"producerNamePattern": "(.*)Service",
"statName": "cumulated",
"valueName": "avg",
"intervalName": "1m"
},
{
"namePattern": "$PRODUCERNAME.ERR.1m",
"producerNamePattern": "(.*)Service",
"statName": "cumulated",
"valueName": "err",
"intervalName": "1m"
}
Die Definition ist ziemlich geradlinig: Für alle Producer, deren Name auf (.*)Service passt, wird ein neuer Accumulator für den statName ‚cumulated‘ (das bedeutet: kumulierte Requests an alle Methoden dieses Service), das Intervall 1 Minute und die Werte ‚req‘, ‚avg‘, ‚time‘ und ‚err‘ angelegt. Dadurch entstehen für jeden neu registrierten Producer, dessen Name auf ‚Service‘ endet, 4 neue Accumulators (Charts). Für den ShopService in der Demo erhalten wir zum Beispiel:

Bitte beachten Sie, dass die Charts erscheinen, sobald sich ein neuer Producer mit passendem Namen registriert. Das hängt von der Art des Producers ab, in der Regel registrieren sich Producer aber bei ihrer ersten Verwendung.
Schritt 2: Das Dashboard einrichten
Da wir nun unsere Accumulators haben, können wir das Dashboard einrichten. Wir möchten Requests, Fehler, Gesamt- und durchschnittliche Dauer aller Services gemeinsam sehen (um zu erkennen, welcher heraussticht) und dazu die vollständige Liste der Producer für weitere Untersuchungen.
Die Dashboard-Konfiguration sieht so aus:
{
"name": "ServiceBoard",
"@charts": [],
"@chartPatterns": [
{
"caption": "Service Requests",
"accumulatorPatterns": [
"(.*)Service.REQ.1m"
]
},
{
"caption": "Service Errors",
"accumulatorPatterns": [
"(.*)Service.ERR.1m"
]
},
{
"caption": "Service TotalTime",
"accumulatorPatterns": [
"(.*)Service.TIME.1m"
]
},
{
"caption": "Service Average Duration",
"accumulatorPatterns": [
"(.*)Service.AVG.1m"
]
}
],
"@producerNamePatterns": ["(.*)Service"]
},
Wir konfigurieren hier zwei Dinge: die Producer-Tabelle und die Charts.
Neben dem üblichen chart-Element der Konfiguration (im obigen Beispiel nicht enthalten) wurde ein neues Element chartPattern hinzugefügt. Es besteht aus einer caption und einer Liste von Patterns für Accumulator-Namen. Zum Beispiel:
{
"caption": "Service Requests",
"accumulatorPatterns": [
"(.*)Service.REQ.1m"
]
},
erzeugt einen neuen Chart mit mehreren Linien, der Caption „Service Requests“ und einer Linie für jeden Accumulator, dessen Name auf (.*)Service.REQ.1m: passt:

Die Producer-Tabelle ist eine Tabelle auf dem Dashboard, die alle konfigurierten Producer enthält – in unserem Fall alle Producer, die auf eines oder mehrere Patterns passen. Mit
"@producerNamePatterns": ["(.*)Service"]
werden alle Producer angezeigt, deren Name auf ‚Service‘ endet. Tauchen später neue Producer mit passendem Namen auf, werden sie bei ihrer Verwendung automatisch hinzugefügt. Zur Definition des producerNamePattern können reguläre Ausdrücke verwendet werden.
Im burgershop-Beispiel haben wir nur zwei Producer mit Service im Namen, daher sieht unsere Tabelle so aus:
Schritt 3: Feiern.
Wir sind fertig. Jetzt haben wir ein neues, glänzendes Dashboard namens ServiceBoard, das alle unsere Services mit ihren Statistiken zu REQ, Time, AVG Duration und Error Count enthält:

Das Dashboard können Sie sich hier ansehen: http://burgershop-hamburg.demo.moskito.org/burgershop/moskito-inspect/mskDashboard?dashboard=ServiceBoard
Sobald neue Services zum System hinzukommen, werden sie automatisch akkumuliert (als Chart dargestellt) und zum Dashboard hinzugefügt. Verschwinden sie aus dem System, verschwinden sie auch vom Dashboard.
Details zur Konfiguration von Dashboards finden Sie im Konfigurationsleitfaden.
Dieses Feature ist ab Version 2.8.7 verfügbar