
Bună, mă numesc Evgheni, sunt liderul echipei B2B la Citymobil. Una dintre sarcinile echipei noastre este suportul pentru integrările cererii de taxi de la parteneri, iar pentru a asigura un serviciu stabil, trebuie mereu să înțelegem ce se întâmplă în microserviciile noastre. Iar pentru asta, trebuie să monitorizăm constant jurnalele.
La Citymobil, pentru a lucra cu jurnalele, utilizăm stiva ELK (ElasticSearch, Logstash, Kibana), iar volumul de date care ajunge acolo este enorm. Găsirea problemelor care pot apărea după desfășurarea unui cod nou în această masă de cereri este destul de complicată. Iar pentru a le evidenția vizual, în Kibana există un tab Dashboard.
Pe Habr există destul de multe articole cu exemple despre cum să configurezi stiva ELK pentru a primi și a stoca date, dar nu există materiale actuale despre crearea unui Dashboard. De aceea, vreau să arăt cum se creează o reprezentare vizuală a datelor în Kibana, pe baza jurnalelor primite.
Configurare
Pentru a fi mai clar, am creat o imagine Docker cu ELK și Filebeat. Și am integrat în container o mică aplicație scrisă în Go, care, pentru exemplul nostru, va genera jurnale de test. Nu voi descrie în detaliu configurarea ELK, pe Habr sunt suficiente informații despre asta.
Clonăm repository-ul cu configurația docker-compose și setările ELK și îl pornim cu comanda docker-compose up. Intenționat nu adaug cheia -d, pentru a vedea procesul de funcționare al stivei ELK.
git clone https://github.com/et-soft/habr-elk
cd habr-elk
docker-compose up
Dacă totul este configurat corect, în jurnale ar trebui să vedem o înregistrare (poate nu imediat, procesul de lansare a containerului cu întreaga stivă poate dura câteva minute):
{"type":"log","@timestamp":"2020-09-20T05:55:14Z","tags":["info","http","server","Kibana"],"pid":6,"message":"serverul http rulează la http://0:5601"}
La adresa localhost:5061 ar trebui să se deschidă Kibana.


Singurul lucru pe care trebuie să-l configurăm este să creăm un Index Pattern pentru Kibana cu informații despre datele care trebuie afișate. Pentru aceasta, vom efectua o cerere curl sau vom face o serie de acțiuni în interfața grafică.
$ curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern'
-H 'Content-Type: application/json'
-H 'kbn-xsrf: true'
-d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'
Crearea Index Pattern prin interfața grafică
Pentru configurare, alegem din meniul din stânga secțiunea Discover, și ajungem la pagina de creare a Index pattern-ului.

Apăsând butonul „Create index pattern”, ajungem pe pagina de creare a indexului. În câmpul „Index pattern name” introducem „logstash-*”. Dacă totul este configurat corect, mai jos Kibana va arăta indici care se încadrează în regulă.

Pe pagina următoare, alegem câmpul cheie cu marcajul temporal, în cazul nostru acesta este @timestamp.

În rezultat, va apărea pagina de setări a indexului, însă pentru moment nu sunt necesare acțiuni suplimentare din partea noastră.

Acum putem reveni la secțiunea Discover, unde vom vedea înregistrările jurnalelor.

Tabloul de bord
În meniul din stânga, facem clic pe secțiunea de creare a Dashboard-ului și ajungem pe pagina corespunzătoare.

Facem clic pe «Create new dashboard» și ajungem pe pagina de adăugare a obiectelor în Dashboard.

Facem clic pe butonul «Create new», iar sistemul ne va solicita să alegem modul de afișare a datelor. În Kibana există o mulțime, dar vom analiza crearea reprezentării grafice «Vertical Bar» și a tabelului «Data Table». Celelalte tipuri de reprezentare se configurează în mod similar.

Unele obiecte disponibile au etichetele B și E — aceasta înseamnă că formatul este experimental sau în etapa de testare beta. În timp, formatul se poate schimba sau poate dispărea complet din Kibana.
Bară verticală
Pentru exemplul «Vertical Bar», vom crea un histogramă a raportului între statusurile de răspuns reușite și nereușite ale serviciului nostru. La finalul configurărilor, vom obține următorul grafic:

La reușite, vom include toate cererile cu statusul de răspuns = 400.
Pentru a crea graficul «Vertical Bar», trebuie să alegem sursa de date. Alegem Index Pattern-ul pe care l-am creat anterior.

Implicit, după alegerea sursei de date, va apărea un grafic continuu. Să-l configurăm.

În blocul «Buckets», facem clic pe butonul «Add», alegem «X-axis» și configurăm axa X. Vor fi afișate marcajele temporale ale înregistrărilor în jurnal. La „Aggregation”, alegem „Date Histogram”, iar la „Field” alegem „@timestamp”, care indică câmpul temporal. „Minimum interval” îl lăsăm pe „Auto”, iar acesta se va adapta automat la afișarea noastră.

După ce facem clic pe butonul «Update», vom vedea graficul cu numărul de cereri la fiecare 30 de secunde.

Acum să configurăm coloanele pe axa Y. În prezent, vedem numărul total de cereri în intervalul de timp ales.

Vom schimba valoarea „Aggregation” pe „Sum Bucket”, care ne va permite să combinăm datele din cererile reușite și nereușite. În blocul Bucket -> Aggregation, alegem agregarea prin „Filters” și setăm filtrarea pe „statusCode >= 400”. Iar în câmpul „Custom label” specificăm denumirea indicatorului nostru pentru o afișare mai clară în legendă pe grafic și în lista generală.

După ce facem clic pe butonul «Update» sub blocul de setări, vom obține graficul cu cererile problematice.

Dacă apăsați pe cercul din jurul legendei, va apărea o fereastră în care puteți schimba culoarea coloanelor.

Acum vom adăuga pe grafic date despre interogările de succes. În secțiunea „Metrics” apăsați butonul „Add” și selectați „Y-axis”.

În metrica creată, vom face aceleași setări ca și pentru interogările eronate. Doar că în filtru vom specifica „statusCode < 400”.

Schimbând culoarea noului coloană, vom obține o reprezentare a proporției între interogările problematice și cele de succes.

Apăsând în partea de sus a ecranului pe butonul „Save” și specificând un nume, vom vedea pe Dashboard primul grafic.

Tabel de date
Acum să luăm în considerare prezentarea tabelară „Data Table”. Vom crea un tabel cu lista tuturor URL-urilor pentru care au fost efectuate interogări și numărul acestor interogări. La fel ca în exemplul cu Vertical Bar, mai întâi alegem sursa de date.

După aceasta, pe ecran va apărea un tabel cu o singură coloană, care arată numărul total de interogări pentru intervalul de timp selectat.

Vom modifica doar blocul „Buckets”. Apăsăm butonul „Add” și alegem „Split rows”.

În câmpul „Aggregation” alegem „Terms”. În câmpul care apare, alegem „url.keyword”.

Specificând în câmpul „Custom label” valoarea „Url” și apăsând „Update”, vom obține tabelul dorit cu numărul de interogări pentru fiecare URL în intervalul de timp selectat.

În partea de sus a ecranului vom apăsa din nou pe butonul „Save” și vom specifica numele tabelului, de exemplu, Urls. Ne întoarcem la Dashboard și vedem ambele vizualizări create.

Lucrul cu Dashboard
Când am creat Dashboard-ul, în setările obiectelor de vizualizare am stabilit doar parametrii de bază. Nu are sens să specificăm în obiecte date pentru filtre, cum ar fi „intervalul de date”, „filtrarea după useragent”, „filtrarea după țara interogării” etc. Este mult mai convenabil să specificați intervalul de timp dorit sau să stabiliți filtrarea necesară în panoul de interogare, care se află deasupra obiectelor.
![]()
Filtrele adăugate în acest panou se vor aplica întregului Dashboard, iar toate obiectele de vizualizare vor fi reorganizate în conformitate cu datele filtrate actuale.
Concluzie
Kibana este un instrument puternic care permite vizualizarea oricăror date într-un format convenabil. Am încercat să arăt configurarea a două tipuri de vizualizare de bază. Dar și alte tipuri se configurează într-un mod similar. Iar multitudinea de setări pe care le-am lăsat „în umbră” vă va permite să personalizați graficile foarte flexibil în funcție de nevoile dumneavoastră.
Sursa: habr.com
