Timeseries vizualizáció: Kibana Timelion

Jelenlegi post még a timelion funkcionalitására épül, azonban itt jegyezném meg, hogy az 5.4-es főverzió kapcsán kiadott közlemény alapján ezek a funkciók (vagy legalábbis nagy részük) már elérhető lesz közvetlenül a beépített Kibana vizualizációs eszközökkel is. Addig is amíg nem kerül kiadásra az 5.4, viszont marad a timelion. A timelion eredetileg egy függetlenül fejlesztett Kibana plugin volt, ami az 5.0-ás főverziótól kezdődően beépült az alap Kibana funkciók közül (a Sense pluginnal együtt).

A timelion talán legfontosabb funkciója az összehasonlítható és vizuálisan részletgazdagabb chartok képessége. Mindemellett a timelionban készített vizualizációk minden gond nélkül rárakhatók tetszőleges dashboardra vegyesen akármilyen más Kibanás vizualizációval együtt.

Az alábbiakban bemutatok néhány (általam) nagyon sűrűn használt timelion vizualizációt. Minden vizualizációnak az alapja nyilván az adatmodell, tehát, hogy miyen módon vannak tárolva az adatok az indexekben. Az általam legsűrűbban használt metódus a következő:

  • Eventek alapján tárolok propertyket. Minden event kapcsán tárolva van annak a keletkezési timestampje. Tehát adott timestamphez tartozó eventek következnek be egy időben. Az eventek vagy elemi szinten kerülnek rögzítésre (transaction modell), vagy pedig valamilyen aggregáció során (application performance modell), ami annyit jelent, hogy pl perces aggregáció mellett kerülnek rögzítésre az elemi eventek darabszámai, és egyéb jellemző adatait (pl átfutási idő pivot, vagy méret eloszlás, vagy bármilyen más releváns, elemezhető adat az adott eventről).
  • Az eventek kapcsán törekedni kell a teljeskörűségre. Mivel big data jellegű analízis a célunk így nincs okunk ezen spórolni. Egy webservice esetén minimum elemi eventek:  touch, login, logout, authorization, servicecall, healthcheck, stb.

Elemi szinten rendezve az eventekre így néz ki az adatmodell felső nézete:


Látható valós időben, hogy adott időpontban milyen események következtek be a minta rendszerben.

Egy eventet kibontva a következő relevánsabb adatokat lehet látni a JSON truktúrában:


A modellben tehát az event neve “event name” és annak adott timestampon történt bekövetkezési darabszáma “event count”.  Az aggregáció perces jellegű, tehát a darabszám adott percen belüli bekövetkezést mutatja.

Két hasonló event darabszámának összehasonlítása

.es(index=siapm-x-activity-*, q='"event1"', metric='avg:event_count').bars(), .es(index=siapm-x-activity-*, q='"event2"', metric='avg:event_count')
A keletkező ábrán az event1 és event2 közös Y tengelyen mutatja a darabszámok összehasonlítását úgy, hogy az event1 vertical bar-on van ábrázolva, az event2 pedig linecharton. Fontos megjegyezni, hogy az egyes adatköröknél megadandó az index is, tehát a timelionban van lehetőség különböző index-ekben tárolt adatokat is közös diagramon ábrázolni.

Ugyanazon event mai és tagnapi darabszámainak összehasonlítása

.es(index=siapm-x-activity-*, q='"event1"', metric='avg:event_count').bars().label("Event(1) today"), .es(index=siapm-x-activity-*, q='"event1"', metric='avg:event_count', offset=-1d).label("Event(1) yesterday")
Itt már jól látszik a timelion egyik nagyon fontos előnye, hiszen képes több különböző timeseriest is összehasonlítani:

A konkrét példában a tegnapi napot hasonlítjuk össze, de az offset= módosításával ez szabadon állítható.

Másodlagos Y tengely és stacket vertical bar

.es(index=siapm-x-channel-*,metric="avg:event1", metric="avg:event2", metric="avg:event3", metric="avg:event4").bars(stack=true).yaxis(1,label="Logins by channels"), .es(index=siapm-x-activity-*, q='"Login"', metric='sum:event_count').subtract(.es(index=siapm-x-activity-*, q='"Logout"', metric='sum:event_count')).label("Concurrent users").yaxis(2,label="Concurrent users")

Szórás ábrázolása korábbi baselinehoz képest

.es(index=siapm-x-activity-*, q='"event1"', metric='avg:event_count').subtract(.es(index=siapm-x-activity-*, q='"event1"', metric='avg:event_count', offset=-3d)).label("Event(1) (StdDevs)").yaxis(2,max=100,label="Event").lines(width=2,fill=5,steps=1,show=true)

Az ábra a “.substract” művelet segítségével jeleníti meg a 3 nappal ezelőtti adott időpontban rögzített esemény baselinehoz képest az eltérést.

Mozgóátlaggal normalizált baselinehoz képesti deviancia ábrázolása

.es(index=siapm-x-activity-*, q='"event1"', metric='avg:event_count').movingaverage(6).subtract(.es(index=siapm-x-activity-*, q='"event1"', metric='avg:event_count', offset=-3d)).label("Event(1) (StdDevs)").yaxis(2,max=100,label="Event(1)").movingaverage(6).lines(width=2,fill=5,steps=1,show=true),

A query lényegében ugyanaz annyival kiegészítve, hogy a prompt adatok helyett 6 perces mozgóátlaggal számolunk. Ennek hatására eltűnnek a nagy tüskék így kevesebb téves riasztást lehet kiolvasni az ábrából, cserébe viszont csak a jelentősebb devianciák rajzolódnak ki kb 6 perces késéssel.

Az itt szereplő példák persze csak részben fedik le a timelion teljes funkcionalitását, de ezen példák mentén könnyedén elsajátíthatók az alapok, melyek segítségével már könnyedén lehet összerakni lényegesen bonyolultabb elemző vizualizációkat is.

Ahogy időm engedi fogok később példát mutatni a némileg bonyolultabb “átfutási idő pivot” elven tárolt adatok vizualizálására is.

Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *