Monitoring Web API

Tato kapitola shrnuje možnosti sledování provozu API serveru.

  1. Monitorovací dashboard
    1. Záložka Výkon
    2. Záložka Provoz
    3. Záložka Údržba
    4. Záložka Oznámení
  2. Výkonová telemetrie

1. Monitorovací dashboard

Monitorovací dashboard poskytuje přehled o aktuálním stavu serveru (paměť, CPU, požadavky, vlákna atd.). Je dostupná v html prohlížeči na endpointu:

GET {server-api}:{port}/{spojeni}/monitoring

1.1 Záložka Výkon

K dispozici jsou následující grafy:

  • Využití paměti Java/JVM -

    • Nealokováno (MB) – paměť, která je dostupná JVM, ale zatím nebyla alokována (JVM může alokovat více, pokud bude potřeba).

    • Obsazená (MB) – aktuálně využívaná paměť (včetně heapu).

    • Volná (MB) – paměť alokovaná JVM, ale aktuálně nevyužívaná.

  • Historie využití paměti Java/JVM

    • Sleduje vývoj hodnot výše uvedených tří komponent v čase (až 60 datových bodů = 10 minut).

    • Cenné pro odhalování úniků paměti (memory leaks) nebo „sawtooth“ patternů GC cyklu.

  • Historie využití paměti DLL

    • FastMM – interní paměťový alokátor použitý v nativní DLL části.

    • Private usage – množství privátní paměti, kterou proces používá.

    • Working set – aktuální množství paměti nahrané ve fyzické RAM.

  • Historie využití CPU

    • Sleduje využití CPU serverem v procentech.

    • Důležité pro odhalení špiček a případného zahlcení (např. GC stop-the-world, blokující IO operace).

  • Vytížení vláken Java

    • Idle – vlákna ve vláknovém poolu, která nic nedělají.

    • Připravené – připravená k použití, ale zatím neaktivní (čekají např. na přidělení úlohy).

    • Vytížené – právě vykonávají požadavky.

  • Historie využití vláken Java

    • Sleduje trend počtu idle/ready/busy vláken.

    • Umožňuje sledovat škálování thread poolu a jeho přetížení.

  • Vytížení vláken DLL

    • Podobné jako výše, ale pro „nativní“ část serveru (DLL).

    • Může jít o thread pooly např. v Delphi části serveru nebo jiném ne-Java modulu.

  • Historie využití vláken DLL

    • Sleduje dlouhodobé chování DLL vláken – idle/ready/busy.

Automatické obnovení je realizováno po 5 sekundách, případně ručně přes tlačítko Aktualizovat.

Příklad vizualizace paměťových metrik a požadavků.

Poznámka: Historie paměti a CPU se ukládá pouze na stránce (v prohlížeči), nikoliv na serveru. Po obnovení stránky se tedy začíná znovu. Naproti tomu historie požadavků se ukládá v serveru dle nastavení v YAML a načítá se při každém zobrazení stránky.

1.2 Záložka Provoz

Tato záložka je zaměřeno na HTTP metriky. Je ideální pro sledování zátěže API z hlediska požadavků.

Pro zobrazení informací na této záložce, je třeba mít v definičním souboru APIServer.yaml zapnuto monitorování.

monitoring:
  enabled: true
  maxlength: 50000

K dispozici jsou následně tyto grafy:

  • Počet požadavků podle HTTP metody

    • Ukazuje četnost jednotlivých metod: GET, POST, PUT, DELETE atd.

    • Pomáhá identifikovat převahu např. čtecích vs. zapisovacích operací.

  • Počet odpovědí podl kódu statusu

    • Rozpad dle HTTP kódů (200, 404, 500…).

    • Odhalí chybové stavy (např. 5xx během vysoké zátěže).

  • Časová struktura odpovědi

    • Umožňuje odhadnout latenci systému při různých typech požadavků.

  • Velikost odpovědi

    • Pomáhá detekovat nevhodně velké nebo podezřele malé odpovědi (např. chybové HTML místo JSONu).

Automatické obnovení je realizováno po 5 sekundách, případně ručně přes tlačítko Aktualizovat. Vedle tabulky je graf struktury odpovědních časů.

Příklad vizualizace paměťových metrik a požadavků.

1.3 Záložka Údržba

Zobrazuje detailní stav vláken ve vláknovém poolu DLL části serveru. V tabulce jsou dostupné následující informace:

  • Aktivní – označuje, zda je vlákno momentálně využíváno.

  • Uživatel – informace o tom, kdo vlákno využívá.

  • Spojení - Informace o tom, na jakém spojení je vlákno využíváno
  • Poslední požadavek – zobrazuje naposledy obsloužený požadavek (včetně možnosti zobrazit podrobnosti a callstack).

  • Poslední použití – čas poslední aktivity.

  • Trvání – jak dlouho vlákno pracovalo.

  • Identifikátor – identifikátor daného vlákna.

Dostupné jsou tyto nástroje pro správu:

  • Vyčištění poolu – tlačítko umožňuje uvolnit neaktivní vlákna v rámci DLL poolu. Slouží k odstranění vláken, která nejsou aktuálně využívána, ale zůstala alokována – typicky po přetížení nebo výpadku klientské aplikace. Pomáhá tak stabilizovat využití systémových zdrojů.

  • Logování Nexus - Otevře vizuální editor pro konfiguraci logovacích sekcí definovaných v souboru Nexus.cfg. Umožňuje aktivovat nebo upravit chování různých logovacích modulů (např. WAProfilingRequest, WASecurity, SysLog, apod.). Změny se neukládají do souboru – aplikují se pouze v paměti a jsou platné do restartu serveru.

  • Nexus log - Zobrazí aktuální obsah logu vytvořeného podle konfigurace z Nexus.cfg. Lze zde sledovat záznamy o běhu business logiky, výjimkách nebo SQL dotazech. Obsahuje hlavičku X-Request-ID, která usnadňuje trasování konkrétního požadavku napříč vrstvami (např. mezi JVM a DLL částí).
  • Konfigurace APIserver - Zpřístupní vizuální rozhraní pro konfiguraci některých parametrů APIServer.yaml (např. velikost poolu, timeouty apod.). Stejně jako u Nexus logování platí, že změny jsou dočasné a neukládají se zpět do souboru. Při restartu JVM se znovu načítají hodnoty ze souboru APIServer.yaml.
  • APIServer log - Pokud je v APIServer.yaml zapnuto logování, zobrazí obsah běhového logu Java části API serveru.
  • Zapnout profilování - Spustí profilování API požadavků. Při ukončení profilování funkce poskytne soubor s informacemi pro aplikaci profiler. Více o profilování Web API naleznete v kap. Jak profilovat Web API.

1.4 Záložka Oznámení

Obsahuje pomocné informace týkající se změn a stavu API:

Změny ve verzích – zobrazí přehled plánovaných změn v API.

Konzole Info – tlačítko pro zobrazení posledních interních hlášek serveru.

Deprecated požadavky – tato část zobrazuje přehled volání zastaralých (deprecated) API endpointů za posledních 24 hodin. Cílem je umožnit správcům systému včas identifikovat využití funkcí určených k odstranění a kontaktovat jejich uživatele.

Informace o použití těchto zastaralých endpointů jsou automaticky shromažďovány a odesílány do telemetrie. Slouží tak nejen k lokálnímu sledování, ale i k centrálnímu vyhodnocování využití neaktuálních funkcí.

Kromě zobrazení přímo na monitorovací stránce je k dispozici i samostatný REST endpoint:

GET {server-api}:{port}/{spojeni}/monitoring/deprecatedusage

Tento endpoint vrací souhrnná data o voláních zastaralých cest za posledních 24 hodin. U každé položky jsou uvedeny:

  • HTTP metoda a cesta – např. GET /connection/issuedinvoices/
  • Počet volání – kolikrát byla zastaralá cesta volána
  • Verze odstranění – major a minor verze, ve které bude funkce odstraněna
  • Doplňkové identifikační údaje – včetně instance serveru (hash) a volající aplikace

U každého prvního výskytu volání zastaralé cesty se automaticky vytvoří záznam do servisní knížky.

2. Výkonová telemetrie

Výkonová telemetrie slouží k automatickému sběru dat o vytížení API serveru a jejich odesílání na aplikační server a dále k jejich odesílání k centrálnímu vyhodnocování dodavatelem systému ABRA Gen.

Co se měří:

  • Průběžné využití paměti (JVM i DLL)
  • Průměrné zatížení CPU v rámci daného intervalu
  • Počet odpovědí dle HTTP status kódů (např. 2xx, 4xx, 5xx)

Frekvence sběru a odesílání dat:

Zpracování dat:

  • Data jsou ukládána v paměti a při každém odeslání se počítadla vynulují.
  • Pokud dojde k restartu API serveru, započítávání začíná znovu.
  • Aplikační server dále data zprůměrovává a agreguje do jedné hodnoty za hodinu.

Další informace:

  • Data lze vizualizovat v dashboardech napojených na index telemetry-apiperformance-*.
  • Tato telemetrie je nedílnou součástí širšího systému sledování provozu systému a slouží vývojářům a konzultantům k odhalování výkonových problémů.