Monitorování Web API

API server nabízí HTML stránku pro monitoring provozních metrik na následujícím endpointu:

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

Stránka je dynamicky generovaná JavaScriptem a zobrazuje různé provozní informace o stavu serveru. K dispozici jsou tyto záložky:

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.

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ů.

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.

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 – tabulka s výskytem volání zastaralých požadavků. Uvádí:

  • HTTP metodu a cestu

  • počet volání

  • verzi, od které bude odstraněno

  • volající aplikace a doplňkové informace