Vega visualisaties in Kibana

-

Zoals Rino al in een eerder blog heeft verteld kun je met verschillende beats allerlei data naar Kibana brengen. Vervolgens kun je die data inzichtelijk maken op een dashboard. Daar zijn in Kibana genoeg visualisaties voor, maar de standaard grafieken en tellertjes zijn niet altijd wat je wilt.

Zo zocht ik naar een manier om een dashboard te maken voor het monitoren van het aantal berichten in bijna 200 queues. Ik kan je vertellen dat een dashboard met bijna 200 metertjes je browser niet blij maakt.

Het weergeven van het aantal berichtjes in een grote tabel maakt de data niet erg inzichtelijk. Vervolgens ben ik gaan kijken naar een heatmap. Dan kan een queue met veel berichten een ander kleurtje krijgen, zodat deze direct opvalt en kunnen queues die bij elkaar horen worden gegroepeerd. Dit is al een stuk beter, maar heatmaps hebben ook hun beperkingen. Je kunt geen onderscheid maken tussen queues en wanneer ze een andere kleur moeten krijgen. Het is toch wat anders of er één bericht in een queue zit tussen twee systemen of één bericht in een dead letter queue. Verder is het ordenen van de queues in een logische volgorde niet echt makkelijk.

Dus zocht ik verder tussen de visualisaties die Kibana te bieden heeft en vond ik Vega. Hiermee is het mogelijk om het uiterlijk en interactieve gedrag van een visualisatie te beschrijven in JSON-format. Dit is op dit moment nog wel een experimenteel functionaliteit van Kibana en kan dus veranderd of verwijderd worden in toekomstige versies van Kibana. Maar het geeft wel complete vrijheid over wat je wilt weergeven in je visualisatie.

Een Vega beschrijving bestaat uit verschillende onderdelen. Er is een onderdeel voor het binnenhalen van de weer te geven data. Dit kan vanuit een extern bestand, vanuit Kibana of de data kan direct gedefinieerd worden in de beschrijving. Er is een onderdeel waarin schalen gedefinieerd worden. Dit kunnen posities langs een as zijn of een bepaalde kleur voor een bepaalde waarde. Het visualiseren gebeurt voornamelijk met het mark onderdeel.

Zo kun je lijnen aan grafieken, staven aan staafdiagrammen en taartpunten aan taartdiagrammen toevoegen. De visualisatie kan interactief gemaakt worden met het signal onderdeel. Hiermee kun je de weergave van de marks updaten aan de hand van sliders, checkboxes of interacties met de muis. Veder zijn er onderdelen voor het weergeven van dingen als assen en legenda’s.

Met al deze onderdelen probeer ik een overzichtelijke visualisatie te maken van de berichten in de queues. De queues geef ik weer als gekleurde cirkels, waar de kleur aangeeft hoeveel berichten erin zitten. De cirkels moeten worden gegroepeerd per type bericht en lijntjes tussen de cirkels moeten aangeven welke queues berichten aan elkaar doorgeven. Na veel proberen en uitzoeken is het onderstaande plaatje wat ik nu heb kunnen maken. Dit bleek nog niet zo makkelijk en is nog een work in progress.

Met name de lijnen tussen de cirkels blijken een uitdaging te zijn omdat je dan eerst moet achterhalen wat de coördinaten van de cirkels zijn (die ik niet zelf heb ingevoerd maar op vaste intervallen langs een as heb laten plaatsen). Dit is uiteindelijk wel mogelijk door de data die gebruikt wordt voor de lijnen te transformeren met een lookup van x- en y-coordinaten van de cirkels.

Er is dus van alles mogelijk maar het kan ook behoorlijk ingewikkeld worden. Er is een uitgebreide documentatie en er zijn een hoop voorbeelden. De online editor helpt je ook hier en daar met waarschuwingen en foutmeldingen en de ingebouwde dataviewer is handig wanneer je transformaties van de data moet uitvoeren.

Ondanks al deze hulpmiddelen is het soms moeilijk te achterhalen waar het probleem zit wanneer iets niet weergegeven wordt in je visualisatie. Ik raad dan ook aan wanneer je zelf met Vega gaat experimenteren om te werken vanuit een voorbeeld en steeds kleine stapjes te maken. Er is ook een Vega-Lite beschikbaar met wat minder mogelijkheden.