Pokud provozujete webovou aplikaci, je dobré vědět, že se těší dobrému zdraví. Že běží, odpovídá na HTTP requesty, ale také že běží správně. Tedy nejenom že běží web server, ale třeba také jestli se dokáže připojit k databázi, k cloudovému úložišti, jestli je dost místa na disku, jestli nezabírá moc paměti a podobně. To lze samozřejmě monitorovat zvnějšku aplikace, například pomocí performance counterů, ale to musíte mít pod kontrolou celou infrastrukturu, což často není možné nebo praktické. Proto je v ASP.NET Core přítomna technologie health checků, které fungují zevnitř. Aplikace pomocí nich dokáže otestovat sama sebe a reportovat, zda jednotlivé její části fungují tak jak mají.
Pro kanál Z-TECH jsem připravil seriál videí, který se věnuje tomuto tématu.
Úvod
V úvodním videu se podíváme na to, jak technologie health checků vlastně funguje, jak registrovat jednotlivé checky, jak je pomocí HTTP requestu spouštět a jak získat výsledek.
Formátování výstupu a publishers
Ve vychozím nastavení je výsledkem volání health checku pouze informace Healthy (všechno je OK), Unhealthy (někde je problém) a Degraded (ještě není problém, ale nejspíš brzo bude). Lze nicméně napsat vlastní formátování výstupu a pomocí něj dát vědět, co je vlastně špatně. Ukážu vám, jak vrátit JSON dokument s výpisem všech checků a jejich výsledků. Nadřízený monitorovací systém tak může - pokud danému formátu rozumí - lépe poznat, co se v aplikaci děje.
Také nemusí nutně platit, že health checky se spouštějí v návaznosti na HTTP požadavek zvenčí. Pomocí publisherů lze celou logiku obrátit. Tedy checky spouštět pravidelně v nastavených časových intervalech a jejich výsledky "tlačit" někam jinam, třeba je posílat do nějakého API.
Knihovna AspNetCore.Diagnostics.HealthChecks
Health checky nemusíte psát sami. Často to je potřeba, pokud potřebujete otestovat zdraví nějakých subsystémů, které jsou specifické pro vaši aplikaci. Ale mnohdy jde o vcelku standardizované věci, jako jsou systémové parametry (disk, paměť...) nebo externí služby (databáze, cloudová úložiště a API...). Existuje open source knihovna AspNetCore.Diagnostics.HealthChecks, která obsahuje desítky již hotových checků, které stačí jenom zkonfigurovat a použít.
HealthChecks UI
V předchozím videu zmíněná knihovna AspNetCore.Diagnostics.HealthChecks umí ještě jednu zajímavou věc: vytvořit hezké webové grafické uživatelské rozhraní, které umožní podívat se na stav aplikace, a ukládat historii změn stavů checků do nějakého trvalého úložiště, typicky do databáze. S health check infrastrukturou přitom komunikuje pomocí HTTP a JSON formátovaného výstupu, takže to webové UI může běžet úplně jinde, než samotná aplikace.
Externí služby pro monitoring stavu
Mít API pro health checks je jenom polovina řešení. Ještě potřebujete něco, co bude zdraví aplikace pravidelně kontrolovat a dá vám vědět, že je něco špatně. Ukážu vám dvě služby, UptimeRobot a Wedos Online, které to umí - a do určitého rozsahu zdarma.