Betrieb unter Spring Boot

Monitoring

Vorbemerkungen

Um das jadice® web toolkit 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) Auftreten Typ Messung
jwt.read.document jwtReadDocument Der Inhalt des Dokuments wird über den Reader in ein jadice document geladen Timer Die Zeit, die zum Laden des Dokuments benötigt wurde
jwt.read.document.failure jwtReadDocumentFailure Meter Die Anzahl der bisherigen Fehlschläge beim Laden (Bspw. enthielt das Dokument unzulässige Daten oder eine IO Operation schlug fehl)
jwt.render.tile jwtRenderTile Eine Kachel wird zu einem Bild gerendert Timer Die Zeit, die zum Rendern einer Kachel benötigt wurde
jwt.render.tile.failure jwtRenderTileFailure Meter Die Anzahl der bisherigen Fehlschläge beim Rendern von Kacheln
jwt.recover.document jwtRecoverDocument Stellt ein Dokument wieder her, nachdem es aus dem Cache expired wurde Timer Die Zeit, die für die Wiederherstellung des Dokuments benötigt wurde
jwt.recover.document.failure jwtRecoverDocumentFailure Meter Die Anzahl der bisherigen Fehlschläge bei der Wiederherstellung
jwt.render.maximumPoolSize jwtRenderMaximumPoolSize Eine Kachel wird zu einem Bild gerendert Gauge Die höchste Anzahl an Threads, die der Tile-Rendering-Thread-Pool annehmen kann
jwt.render.poolSize jwtRenderPoolSize Eine Kachel wird zu einem Bild gerendert Gauge Die aktuelle Anzahl an Threads, die der Tile-Rendering-Thread-Pool hat
jwt.render.corePoolSize jwtRenderCorePoolSize Eine Kachel wird zu einem Bild gerendert Gauge Die 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.largestPoolSize jwtRenderLargestPoolSize Eine Kachel wird zu einem Bild gerendert Gauge Die höchste Anzahl an Threads, die bisher gleichzeitig aktiv waren
jwt.render.activeCount jwtRenderActiveCount Eine Kachel wird zu einem Bild gerendert Gauge Die Anzahl an Threads, die aktuell Rendering-Tasks ausführen
jwt.render.queueSize jwtRenderQueueSize Eine Kachel wird zu einem Bild gerendert Gauge Die Anzahl an Rendering-Tasks, die sich in der Warteschlange zur Ausführung befinden
jwt.render.futuresQueueSize jwtRenderFuturesQueueSize Eine Kachel wird zu einem Bild gerendert Gauge Die Anzahl an Rendering-Tasks für alle Clients, die aktuell mehr Rendering-Tasks angefragt haben, als pro Client zulässig

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:

URL: http://myserver.xom/myapplication/actuator/metrics/NameDerMetrik → z.B.: http://webtoolkit.jadice.com/actuator/metrics/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:

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);
            

[jadice web toolkit Version 5.10.50.0 : Dokumentation für Entwickler. Veröffentlicht: 2021-09-21]