Waarom JMeter en Splunk een mooie combinatie is!

Volgens Google Trends is de interesse in Splunk stijgend en die in JMeter dalend maar ze zijn elkaar in het verleden gekruist en dat is juist wat ik weer wil doen.

JMeter is een open source oplossing voor het load testen van applicaties (web, jdbc, RMI, etc.) en Splunk is een oplossing voor het visualiseren van data. De analyse module van JMeter is niet heel erg uitgebreid en ziet er niet gelikt uit terwijl Splunk dat wel is.

Uitgangspunten voor een integratie van de twee.
jmeter-splunk-google-trends

JMeter

Voor deze blogpost heb ik een simpele load test opgezet op deze website waarbij ik twee pagina’s open; de homepage en de contactpagina. Niet echt heel spannend.

Het gaat te ver om de complete opzet van de test hier uit werken maar onderstaande instellingen heb ik gebruikt om de test op te zetten.

  • Test Plan
  • -> Thread Group ( Number of test users: 5 / Loop Count: 50 )
  • –> HTTP Request Defaults ( Server Name or IP: www.bluefactory.nl )
  • –> HTTP Request ( Path: / )
  • –> HTTP Request ( Path: /contact/ )
  • –> Graph Results

Dit is voldoende om een simpele test op te zetten die in totaal 250 keer de 2 pagina’s zal gaan benaderen. Graph Results levert het volgende resultaat op:

jmeter-graph-results

Dit is niet zo spannend en ook nog lastig te exporteren naar een dashboard voor andere gebruikers zoals het management die natuurlijk zeer geïnteresseerd zijn in de resultaten van de test.

Om de resultaten naar Splunk te krijgen moeten we de restresultaten weg gaan schrijven naar een bestand. Zoals je in bovenstaand screenshot ziet is dit binnen JMeter geen probleem. Zorg dat bij Filename het pad naar je bestand staat. Ligt het aan mij of is die Browse knop een beetje gammel in JMeter?

Niet zichtbaar op het screenshot maar rechts van de Browse… knop is een Configure knop geplaatst waar je kunt instellen hoe en wat er gelogd wordt. Standaard schrijft JMeter de data weg naar een CSV maar om de data eenvoudig in Splunk beschikbaar te maken kies ik hier voor XML. Splunk zal in XML namelijk automatisch een aantal fields uit de XML halen die je in queries kunt gebruiken. Vink ook even Save URL aan als je de URL’s ook in Splunk wilt gebruiken.

jmeter-file-settings

De volgende XML structuur wordt weggeschreven:

<httpSample t="19" lt="16" ts="1407319068371" s="true" lb="Homepage" rc="200" rm="OK" tn="Jmeter Users 1-5" dt="text" by="29874">
  <java.net.URL>https://www.bluefactory.nl/</java.net.URL>
</httpSample>
<httpSample t="21" lt="16" ts="1407319068376" s="true" lb="Contact" rc="200" rm="OK" tn="Jmeter Users 1-3" dt="text" by="37540">
  <java.net.URL>https://www.bluefactory.nl/contact/</java.net.URL>
</httpSample>

Belangrijke velden hier zijn:

  • t = Response Time (tijd van de start van de request totdat de gehele pagina binnen is)
  • lt = Latency (tijd van de start van de request totdat de eerste bytes binnen komen)
  • ts = TimeStamp in UNIX epoc formaat.
  • s = de status van de test
  • lb = logische naam van de stap
  • rc = HTTP statuscode die terug gekomen is
  • rm = label van de HTTP statuscode

Omdat Splunk XML automatisch scant op velden zullen bovenstaande automatisch gevonden worden en beschikbaar worden gesteld in de search app. Handig toch?

Splunk

Nu komen we bij Splunk en moeten we de data gaan presenteren. Voordat we dat doen moeten we de XML file in Splunk laden. Vaak wordt een analyse van een load test uitgevoerd nadat de test helemaal afgerond is. Het heeft dus geen zin om in Splunk een directory aan te wijzen waar hij constant moet scannen op nieuwe data. Die komt er namelijk niet. Het is een eenvoudiger om deze eenmalig te indexeren.

Splunk zal in de preview functie de events netjes uitsplitsen en het ts veld als timestamp herkennen en omzetten naar de tijdsinstellingen van de Splunk installatie.

splunk-xml-input

Als we nu in Splunk gaan zoeken op het sourcetype wat we geconfigureerd hebben zien we de data van de XML keurig uitgewerkt.

splunk-event-content

De url in bovenstaand plaatje is niet automatisch door Splunk herkent maar deze zul je via de field extractor moeten extraheren. Dit is zeer eenvoudig.

De laatste stap is het bouwen van queries waarmee we de data op zo’n manier kunnen presenteren dat de anderen het ook kunnen lezen en conclusies kunnen trekken uit deze rapporten.

Een van de searches die je kunt maken is; sourcetype=JMeterXMLResult | xyseries _time url t. De naam van het sourcetype is hier zoals ik dat in Splunk geconfigureerd heb maar dat kan bij jou natuurlijk anders zijn. Met deze search word per url de response tijd uitgezet over tijd. Dit kun je als tabel weergeven maar een lijngrafiek is interessanter.

splunk-jmeter-search-results

Een volgende stap in deze exercitie zou zijn om het aantal virtuele gebruikers uit te zetten tegenover deze response tijden zodat je kunt zien wat de impact van deze gebruikers op de website is. De start van een goede load test analyse.

Ik hoop dat ik je in deze post heb laten inzien hoe gaaf de combinatie JMeter en Splunk is en ook dat ik je een klein beetje op weg geholpen heb met het opzetten van deze integratie. Mocht je nog verdere vragen hebben over deze integratie of over Splunk laat het vooral horen in de comments!

Links

Over Coen Meerbeek

Splunk consultant @ Blue Factory, eigenaar en oprichter @ BuzzardLabs, basketbalspeler en Xbox-gamer. Lees meer van Coen op Launchers.nl en Twitter.

Laat wat van je horen

*