Skip to main content

Betrieb unter Spring Boot

Monitoring

Vorbemerkungen

Um das JWT bzw. dessen Integration im Betrieb überwachen zu können, sind serverseitig einige Messpunkte eingehängt. Dazu wird micrometer als neutrale Fassade genutzt, so dass eine große Bandbreite gängiger Systeme angebunden werden kann.

Vorhandene Metriken

Metrik (Web)Metrik (JMX)AuftretenTypMessung
jwt.read.documentjwtReadDocumentDer Inhalt des Dokuments wird über den Reader in ein jadice document geladenTimerDie Zeit, die zum Laden des Dokuments benötigt wurde
jwt.read.document.failurejwtReadDocumentFailureMeterDie Anzahl der bisherigen Fehlschläge beim Laden (Bspw. enthielt das Dokument unzulässige Daten oder eine IO Operation schlug fehl)
jwt.render.tilejwtRenderTileEine Kachel wird zu einem Bild gerendertTimerDie Zeit, die zum Rendern einer Kachel benötigt wurde
jwt.render.tile.failurejwtRenderTileFailureMeterDie Anzahl der bisherigen Fehlschläge beim Rendern von Kacheln
jwt.recover.documentjwtRecoverDocumentStellt ein Dokument wieder her, nachdem es aus dem Cache expired wurdeTimerDie Zeit, die für die Wiederherstellung des Dokuments benötigt wurde
jwt.recover.document.failurejwtRecoverDocumentFailureMeterDie Anzahl der bisherigen Fehlschläge bei der Wiederherstellung
jwt.render.maximumPoolSizejwtRenderMaximumPoolSizeEine Kachel wird zu einem Bild gerendertGaugeDie höchste Anzahl an Threads, die der Tile-Rendering-Thread-Pool annehmen kann
jwt.render.poolSizejwtRenderPoolSizeEine Kachel wird zu einem Bild gerendertGaugeDie aktuelle Anzahl an Threads, die der Tile-Rendering-Thread-Pool hat
jwt.render.corePoolSizejwtRenderCorePoolSizeEine Kachel wird zu einem Bild gerendertGaugeDie minimale Anzahl an Threads, die für das Tile-Rendering immer bereit stehen (diese Threads sind immer alive und bekommen keinen Timeout etc.)
jwt.render.largestPoolSizejwtRenderLargestPoolSizeEine Kachel wird zu einem Bild gerendertGaugeDie höchste Anzahl an Threads, die bisher gleichzeitig aktiv waren
jwt.render.activeCountjwtRenderActiveCountEine Kachel wird zu einem Bild gerendertGaugeDie Anzahl an Threads, die aktuell Rendering-Tasks ausführen
jwt.render.queueSizejwtRenderQueueSizeEine Kachel wird zu einem Bild gerendertGaugeDie Anzahl an Rendering-Tasks, die sich in der Warteschlange zur Ausführung befinden
jwt.render.futuresQueueSizejwtRenderFuturesQueueSizeEine Kachel wird zu einem Bild gerendertGaugeDie Anzahl an Rendering-Tasks für alle Clients, die aktuell mehr Rendering-Tasks angefragt haben, als pro Client zulässig
jadice.cache.evictionsjadiceCacheEvictionsCacheGaugeAnzahl der Aufräumvorgänge
jadice.cache.getsjadiceCacheGetsCacheGaugeAnzahl der Abrufe von Elementen aus dem Cache
jadice.cache.hit-ratiojadiceCacheHit-ratioCacheGaugeTrefferquote
jadice.cache.object-countjadiceCacheObject-countCacheGaugeAnzahl der Elemente im Cache
jadice.cache.sizejadiceCacheSizeCacheGaugeGeschätzte Größe in Bytes

Abruf der Metriken mittels Spring Boot

Nachfolgend werden beispielhaft Aktivierung und Abruf der Metriken über Spring Boot beschrieben.

Aktivierung der Metriken

Um auf die verschiedenen Metriken zugreifen zu können, müssen der Integration folgende Dependencies hinzugefügt und Konfigurationen vorgenommen werden:

pom.xml

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-jmx</artifactId> <!-- nur erforderlich, falls die Metriken über JMX exponiert werden sollen -->
</dependency>

<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId> <!-- nur erforderlich, wenn Prometheus für die Darstellung der Metriken genutzt werden soll -->
</dependency>

application.yml

Über welches Protokoll Endpoints (z.B. HTTP, JMX) exponiert werden sollen, konfiguriert man beispielsweise in der application.yml. Details siehe Dokumentation zu Spring Boot Actuator Folgendes Beispiel zeigt, wie man beide Wege exponiert:

management:
endpoints:
web:
exposure:
include: health, metrics, info
jmx:
exposure:
include: health, metrics, info

metrics:
enable:
all: true
export:
jmx:
enabled: true

endpoint:
health:
show-components: always
show-details: always
spring:
jmx:
enabled: true

Web-Metriken: z.B. Abruf über den Browser

Metriken, die per Web exponiert sind, kann man über HTTP gemäß der Konventionen und Konfiguration in Spring Boot Actuator abrufen:

http://myserver.xom/myapplication/actuator/metrics/NameDerMetrik → z.B.: http://webtoolkit.jadice.com/actuator/metrics/jwt.readDocument

Beispielausgabe von jwt.readDocument Beispielausgabe von jwt.readDocument

JMX-Metriken: z.B. Abruf über jconsole

Die Metriken sind unter MBeans im Ordner metrics in dem ihrem Typ entsprechenden Unterordner zu finden:

z.B. jwtReadDocument hat den Typ Timer → unter metrics/timers

Durch die Auswahl des Unterpunkts Attributes der Metrik werden die ermittelten Werte angezeigt.

Beispielauswahl und -ausgabe von jwtReadDocument Beispielauswahl und -ausgabe von jwtReadDocument

Einhängen eigener Messpunkte in die Integration

Eigene Messpunkte (z.B. in DocumentDataProvider-Implementierungen) lassen sich leicht ergänzen, Details siehe micrometer-Dokumentation.

Nachfolgend ein Beispiel zum Einhängen eines Timers:

Sample s = Timer.start();
{
// do something
}
Timer timer = Metrics.timer("mydomain.myname");
s.stop(timer);

Pendant in Spring Boot

@Timed("mydomain.myname")
public void someMethod{
// do something
}

Die Klasse, zu der someMethod gehört, muss per Spring-Mechanismus injected worden sein, damit @Timed funktioniert.