Monitoring Web API

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

  1. Monitorovací dashboard

  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

Použití konzultantského klíče

Monitorovací dashboard je možné otevřít také v konzultantském režimu. Konzultant se může přihlásit pod účtem uživatele bez znalosti jeho hesla, pokud je u daného uživatele povoleno přihlášení konzultantů pod jeho účtem. Tato možnost slouží například pro servisní monitoring API spojení a nečerpá zákaznickou API licenci daného uživatele.

Přihlášení konzultanta do API využívá konzultantský klíč vydaný výrobcem systému. Více k povolení přihlášení konzultanta pod účtem uživatele viz kapitola Přihlášení uživatele.

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

V sekci Historie požadavků na API server jsou pak vidět konkrétní dotazy, včetně podrobností a zdrojové IP adresy požadavku.

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 globální profilování - Spustí globální 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 Profilování

Záložka slouží k odeslání jednoho API požadavku s automaticky zapnutým profilováním. Je dostupná při nastaveném parametru profilePath v konfiguračním souboru APIServer.yaml; pokud parametr nastavený není, monitoring zobrazí upozornění.

Ve formuláři lze zvolit HTTP metodu, cestu endpointu, executor (inprocess nebo outprocess) a ladicí volby debug-reload-scripts a debug-enforce-new-executor. Pro požadavky s tělem je k dispozici tlačítko Formátovat, které zadané JSON tělo naformátuje a při neplatném JSONu zobrazí chybu.

Tlačítko Dokumentace otevře dokumentaci kontroleru podle první části zadané cesty. Pokud se kontroler nerozpozná, otevře se rozcestník dokumentace API na /api-docs/overview.

Po odeslání požadavku se zobrazí status odpovědi, hlavička X-Request-ID, tělo odpovědi, čas požadavku měřený v prohlížeči a tabulka profilovacích dat. Pokud data profilování nejsou dostupná ihned, aplikace je krátce opakovaně načítá a umožní ruční opakování načtení.

Profiler si v prohlížeči pamatuje historii posledních 30 odeslaných požadavků pro danou základní URL. Položku z historie lze vložit zpět do formuláře nebo historii vymazat. Historie je uložená lokálně v prohlížeči a může obsahovat i tělo požadavku; přihlašovací údaje z voleb pro jiného uživatele se do ní neukládají.

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.

Notifikace –zobrazuje informace o zaslaných API dotazech. Informace lze třídit podle filtru:

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

  • Chyba práv - zobrazuje požadavky kde došlo při vykonání k chybě v právech

  • Použité - požadavky, které byly volány a nebyla nich evidována žádná chyba

  • Chyba editace - Chyba kdy se uživatel pomocí API pokouší o zápis do BO který je needitovatelný a je zapnutá striktní kontrola

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

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)
  • Cesty použitých endpointů. Evidují se všechny cesty kromě volání OPTIONS metody

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