Het monitoren van de Spring Scheduler met Dynatrace: Custom Service en Request Parameters

In moderne microservice-architecturen, zoals Java-gebaseerde Spring Boot-applicaties, is het monitoren van geplande taken (schedulers) van cruciaal belang om inzicht te krijgen in de prestaties van achtergrondprocessen. Een van de meest gebruikte methoden in Spring om geplande taken te beheren is de org.springframework.scheduling.support.ScheduledMethodRunnable-klasse. Helaas worden deze geplande taken niet automatisch gedetecteerd door APM-tools zoals Dynatrace.

Om de Spring Scheduler-taken nauwkeurig te monitoren in Dynatrace, moeten we gebruik maken van een custom service. In dit artikel leggen we in detail uit hoe je deze custom service kunt configureren en hoe je de juiste request parameters kunt vastleggen voor diepgaand inzicht in de scheduler-executies.

1. De uitdaging met Spring Scheduler Monitoring

De ScheduledMethodRunnable-klasse in Spring Boot wordt vaak gebruikt om methoden periodiek uit te voeren met behulp van annotaties zoals @Scheduled. Dit zijn echter geen HTTP-aanroepen en worden niet altijd automatisch door Dynatrace herkend als aparte services. Hierdoor kan het moeilijk zijn om inzicht te krijgen in de prestaties, mislukkingen of vertragingen van deze geplande taken.

2. Dynatrace Custom Service: Het detecteren van Spring Schedulers

Om geplande taken in de Spring Scheduler correct te monitoren, kunnen we Dynatrace vertellen deze specifieke Runnable-implementaties als een aparte service te beschouwen. Hiervoor maken we gebruik van een custom service in Dynatrace.

Stappen voor het instellen van een Custom Service

1. Navigeer naar Custom Service Configuratie:

– Log in op je Dynatrace-omgeving.

– Ga naar de Settings -> Server-side service monitoring -> Custom services

Article content

2. Nieuwe Custom Service Configureren:

– Klik op Define Java Services binnen de Java services tab.

– Geef een naam aan de nieuwe service, bijvoorbeeld “Spring Scheduler Tasks” en druk op een van beide knoppen, de “Find entry point” geeft een browser waarmee in een bestaand proces de ScheduledMethodRunnable gezocht kan worden, zodat je geen typefouten maakt en je terplekke kunt kiezen welke methodes je wilt, maar in dit geval weten we alle informatie, dus kunnen ook de “Define entry point manually” gebruiken.

Article content

3. Klasse en Methode Specificeren:

– Vul bij Class name in: org.springframework.scheduling.support.ScheduledMethodRunnable.

– Bij Method name kun je public void run invullen, aangezien dit de methode is die elke keer wordt aangeroepen als de scheduler een taak uitvoert.

Article content
Complete definitie van de Custom Service (manual entry)

Nadat deze configuratie is doorgevoerd in Dynatrace, moet u de betreffende springboot applicaties herstarten om de definitie van de custom service actief te maken.

3. Request Attributes Configureren voor Diepere Inzichten

Naast het detecteren van de geplande taken als aparte services, willen we mogelijk ook aanvullende gegevens vastleggen om inzicht te krijgen in de context van de uitgevoerde taak. Dit kan door gebruik te maken van Request Attributes in Dynatrace.

Request Parameters Configureren

1. Navigeren naar Request Attributes:

– Ga naar Settings -> Server-side service monitoring -> Request attributes.

– Klik op Define a new request attribute.

2. Kies een Naam voor het Request Attribute:

– Geef een logische naam, bijvoorbeeld Scheduler Class Name, om de geïmplementeerde runnable-klasse die door de scheduler wordt aangeroepen te identificeren. het datatype is Text, alle andere informatie is correct voorgedefinieerd.

3. Methode Specificeren voor het Extracten van Data:

– Selecteer Add new data source.

– Definieer filters op welke processen deze rule moet worden toegepast, beperk het zoveel mogelijk naar procesgroepen die werkelijk SpringBoot applicaties bevatten. In dit voorbeeld is alleen gefilterd op processen van het type Java.

– Kies als attribute source Java method parameters, omdat de ScheduledMethodRunnable-klasse als instance velden “method” en “target” hebben, die uit te lezen zijn (deze kennis is eenvoudig in github terug te vinden).

Article content

– Helaas is het niet mogelijk om handmatig een methode te selecteren, maar moet hier altijd de ingebouwde klasse browser voor gebruikt worden. Dit betekent dat het definiëren van request parameters in de UI altijd moet gebeuren met een draaiende applicatie, waar de juiste klassen in geheugen geladen zijn.

– Kies de run()-methode van de ScheduledMethodRunnable-klasse en configureer de Capture optie om de this te extraheren (dit is een referentie naar de klasse-instantie). gebruik in het veld Deep object access: ‘.target.getClass().getName()’

Article content

4. Uitlezen van Methode Informatie:

– Om specifieke methodes te identificeren, kunnen we de instancevariabele “method” gebruiken, met precies dezelfde configuratie als hiervoor, dus eerst een nieuwe request attribuut aanmaken met een naam zoals “Scheduler method” en weer de juiste klasse en de run() method kiezen, maar in plaats van “.target…” gebruiken we nu “.method.getName().

Article content

Met deze setup kan Dynatrace niet alleen het algemene succes en de prestaties van Spring Scheduler-taken bijhouden, maar ook specifieke taken onderscheiden en relevante parameters vastleggen voor verdere analyse.

Zoals ook al in beeld verschijnt, worden deze request attributes pas actief geïnstrumenteerd in de applicatie, na een herstart van de JVM.

4. Gebruik van request attributen voor de naamgeving van de requests (optioneel)

Door de extractie van de request attributen, is het al heel goed mogelijk om een (nauw)keurige analyse van de data te doen, door dit als split-elementen te gebruiken in een “Multidimensional Analysis” in Dynatrace. Maar nog veel mooier wordt het om de individuele aanroepen, de traces, een rename te geven met {RequestAttribute:Sheduler class name}.{RequestAttribute:Scheduler method}, dit is eenvoudig te configureren op service nivo via de UI, of generiek via de dynnatrace-API.

5. Visualisatie en Alerting in Dynatrace

Nu de custom service en request attributes zijn ingesteld, kun je Dynatrace gebruiken om de prestaties van de Spring Schedulers te visualiseren:

Dashboards: Maak aangepaste dashboards met grafieken die de totale executietijd van de taken weergeven, gesplitst per specifieke taak.

Alerts: Stel alerts/anomaly detection rules in om gewaarschuwd te worden wanneer een scheduler-taak te lang duurt of als er fouten optreden.

Conclusie

Het monitoren van Spring Schedulers in Dynatrace kan complex zijn omdat ze niet automatisch worden herkend. Door een custom service te configureren op basis van de ScheduledMethodRunnable-klasse en door request attributes te gebruiken, kun je gedetailleerd inzicht krijgen in de prestaties van geplande taken binnen je Spring Boot-applicatie. Deze aanpak geeft je de mogelijkheid om specifieke taken te monitoren, prestaties te optimaliseren en snel te reageren op problemen in de scheduler-executies.

Door deze technische configuratie toe te passen, krijg je de volledige kracht van Dynatrace’s monitoring-mogelijkheden voor achtergrondprocessen in je handen, wat cruciaal is voor het handhaven van de operationele gezondheid van moderne microservices-architecturen.

Voor IctCoreBiz is dit dagelijks werk, dus mocht u bij implementatie van Dynatrace in uw organisatie tegen issues aanlopen dat u data “mist”, of het moeilijk vind deze te interpreteren, neem dan eens contact op om te sparren over de mogelijkheden die we kunnen bieden.

Deze tekst is eerder verschenen op LinkedIn op 15 september 2024.