Monitoring aplikácií v kocke – 1. časť: Čo všetko sledujeme a prečo?

Webová aplikácia Crossuite rastie vo všetkých smeroch. Zväčšuje sa počet jej používateľov, množstvo kódu, typy využívaných technológií a, samozrejme, počet serverov, na ktorých beží. S týmto rastom sa zvyšujú aj nároky na škálovateľnosť a vzniká potreba neustaleho sledovania vyťaženosti jej zdrojov. Aby sme ich dokázali pokryť, na projekte sme vytvorili pozíciu pre monitoring aplikácie. Aké nástroje pri jej vykonávaní využívame najčastejšie, ktoré metriky sledujeme a ako nám to pomáha? To všetko sa dozviete v tomto a nasledujúcich blogoch.

Grafana je základ

Jedným z najdôležitejších nástrojov na monitoring, resp. zobrazovanie dát pre monitorovanie našej aplikácie, je Grafana. Momentálne ju používame 3 rôznymi spôsobmi, ktoré spolu vytvárajú funkčný komplex. Len vďaka ich kombinácii totiž dokážeme správne identifikovať príčinu prípadného problému. Ide o:

  1. Dátovú vizualizáciu – Slúži na monitorovanie serverov. 
  2. Grafana alerting – Upozorňuje nás na možné problémy pomocou automatického monitoringu na základe grafov získaných vďaka dátovej vizualizácii (1).
  3. Loki (Logs) – Umožňujú nám sledovať problémy na základe funkčných logov aplikácie.

Crossuite aplikácia má už niekoľko verzií, ktoré bežia na rôznych serveroch. Podľa toho ich máme rozdelené aj v samotnej Grafane. Na každom serveri sledujeme v podstate tie isté parametre. Konkrétne sú to:

CPU (Central Processing Unit = Centrálna procesná jednotka): Je srdcom každého počítača, vrátane serverov. Je zodpovedná za vykonávanie inštrukcií softvéru a manipuláciu s údajmi, ktoré sú uložené v pamäti počítača. V kontexte serverov pre webovú aplikáciu je dôležité sledovať využitie CPU z niekoľkých dôvodov:

  1. Výkon: Ak je CPU preťažená, môže znížiť rýchlosť a efektívnosť webovej aplikácie. Používateľom tak stránka bude pracovať pomaly alebo sa na nej dokonca môžu vyskytnúť chyby pri načítaní.
  2. Plánovanie zdrojov: Monitorovanie využitia CPU môže pomôcť pri rozhodovaní o tom, kedy je potrebné zvýšiť alebo znížiť zdroje servera. Napríklad, ak je CPU neustále preťažená, môže to naznačovať, že je čas zvýšiť výpočtovú kapacitu alebo optimalizovať aplikáciu.
  3. Bezpečnosť: Nezvyčajne vysoké využitie CPU môže naznačovať, že server je pod útokom, alebo že je infikovaný škodlivým softvérom.
  4. Identifikácia problémov s výkonom: Monitorovanie CPU môže pomôcť identifikovať rozličné problémy s výkonom webovej aplikácie, ako napríklad neefektívne kódy alebo procesy, ktoré vyžadujú neprimerané množstvo procesorového času.

Load (Zaťaženie): Táto metrika nám poskytuje informácie o tom, koľko práce vykonáva server a aké množstvo procesov čaká na spracovanie CPU. Ak je zaťaženie vysoké a čakanie trvá dlhšie, môže to naznačovať, že server je preťažený a potrebuje viac výpočtových zdrojov alebo optimalizáciu. 

Processes (Procesy): Ide o sledovanie počtu a stavu spustených procesov na serveri. V prípade, že beží priveľa procesov s veľkým nárokom na CPU alebo pamäť, môže to viesť k spomaleniu alebo dokonca zlyhaniu servera. Zároveň nám tento parameter pomáha identifikovať nezvyčajné procesy, ktoré by mohli naznačovať útok alebo prítomnosť škodlivého softvéru.

Memory (Pamäť): Pamäť je kľúčovým zdrojom pre každý server. Ak je nedostatočná, prípadne sa rýchlo vyčerpáva, aplikácia môže spomaliť alebo zlyhať. Monitorovanie jej využitia nám teda pomáha identifikovať procesy, ktoré jej spotrebúvajú príliš veľa. Zároveň signalizujú, kedy je potrebné pamäť pridať alebo existujúce aplikácie optimalizovať.

Network Usage (Sieťové využitie): Tento parameter odkazuje na množstvo dát, ktoré sú prenášané zo servera a na server. Ak je sieťové využitie príliš vysoké, môže to spôsobiť spomalenie alebo prerušenie služby, čo môže mať za následok zhoršenie používateľskej skúsenosti. Nadmerné sieťové využitie môže byť aj indikátorom problémov, ako sú DDoS útoky alebo neautorizovaný prístup.

Disk Space (Voľný diskový priestor): Je dôležitý pre správne fungovanie servera a jeho aplikácií. Ak je voľný priestor na disku príliš malý, môže to obmedziť schopnosť servera ukladať nové údaje. To môže viesť k chybám v aplikáciách či dokonca k jej zastaveniu. Monitorovanie voľného priestoru na disku umožňuje správcom týmto problémom predchádzať.

Ako nastaviť zobrazenie parametrov v Grafane? 

V Grafane sa na tvorbu queries a výstupných grafov používajú dotazy. To, akú syntax majú, záleží od zdroja dát. V prípade Crossuite je to Prometheus, ktorý je zásobovaný dátami z AWS. Na dotazovanie preto používame PromQL – funkčný query jazyk vyvinutý špeciálne pre Prometheus. Dotaz pre zobrazenie parametra CPU v ňom vyzerá nasledovne:

sum by (instance)
(rate(node_cpu_seconds_total{mode="user",instance="$instance"}[2m]))
/ on() group_right() count without(cpu, mode) 
(node_cpu_seconds_total{mode="idle", 
instance="$instance"})

Rozoberme si jednotlivé funkcie:

  • node_cpu_seconds_total{mode=“user“,instance=“$instance“}[2m]: Zabezpečuje meranie celkového počtu sekúnd, počas ktorých bola CPU pre určitú inštanciu za posledné 2 minúty v režime používateľa.
  • rate(…): Vypočíta rýchlosť zmien za sekundu v časovom rade, v danom časovom intervale (v tomto prípade 2 minúty). Táto funkcia je najčastejšie používaná pre merania, ktoré predstavujú monotónne rastúce čísla, ako je napríklad node_cpu_seconds_total.
  • sum by (instance)(…): Spočíta všetky hodnoty podľa inštancie. Jej výsledkom teda bude súčet všetkých hodnôt pre jednotlivé inštancie.
  • node_cpu_seconds_total{mode=“idle“, instance=“$instance“}: Meranie zaznamenáva celkový počet sekúnd, počas ktorých bola CPU pre určitú inštanciu v nečinnom režime (idle mode).
  • count without(cpu, mode) (…): Funkcia spočíta počet prvkov v časovom rade. Kľúčové slovo without v tomto prípade odstraňuje z výsledku uvedené dimenzie (cpu, mode).
  • … / on() group_right() …: Táto časť vykonáva operáciu delenia dvoch časových radov. 
    • on() definuje, na základe ktorých spoločných dimenzií by sa mali tieto dva časové rady porovnať. 
    • group_right() určuje, že sa zachovajú dimenzie z pravej strany.

Výsledkom kombinácie viacerých takýchto query je graf zobrazujúci hodnoty CPU v danom časovom intervale:

A čo znamenajú tie dve prerušované čiary? To sa dozviete už čoskoro, v ďalšom pokračovaní tohto malého seriálu  blogov o monitoringu.