Monitoring Web API
Tato kapitola shrnuje možnosti sledování provozu API serveru.
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.
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ů.
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:
- Interval sběru dat je řízen parametrem
telemetrySampleIntervalMs
. - Interval odesílání dat na aplikační server je řízen parametrem
telemetrySendIntervalMs
.
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ů.