Jak na logování v Azure App Service

V posledních měsících jsem se hodně věnoval diagnostice webových aplikací s využitím služby Application Insights. Co když ale Application Insights z nějakého důvodu nepoužíváte a přesto potřebujete zalogovat důležitou informaci během vykonávání kódu? Jak získat přehled o selháních HTTP požadavků? Se službou Azure App Service má vývojář k dispozici jednoduché ale velmi mocné diagnostické služby, které v tomto článku krátce popíši.

Přehled diagnostických služeb

V Azure App Service lze snadno aktivovat logování událostí a získat dokonalý přehled o tom, co se ve vaší aplikaci právě děje.

Web Server Diagnostics

Web Server Diagnostics poskytuje tři odlišné typy logů:

  • Detailní Error Log, který nabízí pohled na HTTP chyby (4xx >)
  • Request Tracing pro zfailované požadavky včetně trasování IIS
  • Web Server Logging, který nabízí pohled na HTTP transakce ve W3C log formátu

Application Diagnostics

Zatímco Web Server Diagnostics logy se sbírají na základě zpracování HTTP požadavků, Application Diagnostics log se generuje na základě samotného kódu. V ASP.NET aplikacích může vývojář použít

 System.Diagnostics.Trace.TraceError("Trase message here")

pro trasování.

Deployment Logs

Speciálním typem logů jsou deployment logy, které služba App Service generuje během publikování aplikace. Pro tyto logy není potřeba nic nastavovat (vše se děje automaticky). Využít deployment logy lze nejčastěji při nasazování aplikací pomocí PowerShell scriptů.

Povolení diagnostických služeb v Azure

V prostředí Azure lze najít povolení diagnostických služeb na jediném místě v sekci Settings > Diagnostics Log u vybrané služby App Service. K dispozici je několik možností:

  • Application Logging (FileSystem / Blob)
  • Web server logging (FileSystem / Blob)
  • Failed request tracing

diagnostics-log-azure-app-service

Společně s Application Logs lze nastavit i úroveň logů. Pokud je nastavena například na Error, pak se logují pouze Trace.TraceError (zatímco Trace.TraceInformation a Trace.TraceWarning jsou ignorovány).

Na rozdíl od změn prováděných ve web.config změna nastavení diagnostiky v Azure nerecykluje aplikační doménu. Samotné nastavení ve web.configu vůbec není potřeba.

Přístup k logům

Logy ve službě Azure App Service jsou dostupné přes FTP, lze je stáhnout jako ZIP pomocí Azure PowerShellu nebo Azure CLI. Struktura adresářů je následující:

  • Application logy: /LogFiles/Application (textové soubory)
  • Failed Request Traces: /LogFiles/W3SVC###### (XML+XSL soubory)
  • Detailní error log: /LogFiles/DetailedErrors (HTM soubory)
  • Web server logy: /LogFiles/http/RawLogs (TXT soubory dle standardu W3C)
  • Deployment logy: /LogFiles/Git (logy generované během deploy procesů)

diagnostics-log-export

Nástroj Azure Diagnostics Log Stream

Velmi zajímavý nástroj je Log Stream, který sbírá Application Logs a Web Server Logs a zobrazuje je v reálném čase přímo v portálu Azure. Nalézt jej lze v sekci: Tools > Log Stream ve službě App Service.

log-stream

Na obrázku výše si můžete všimnout, že zapnutím funkce Detailed error messages se v konzoli zobrazí chybová stránka přesně tak, jako uživateli.

Další diagnostické nástroje v App Service

Vedle zmíněných nástrojů pro logování Azure App Service poskytuje několik dalších nástrojů, které slouží především k pohledu na celkový stav aplikace. Tyto nástroje jsou dostupné v bohaté sekci Settings > Support and Troubleshooting.

support-tools

  • Live HTTP Traffic je graf, který nabízí pohled na počty requestů a HTTP errors v čase, filtrovat lze dle hostname
  • AppLens umí to samé ale navíc zobrazuje kdy došlo k posledním deploymentům... lze tak odhalit výkonnostní problémy po nasazení nových verzí aplikace

requests-vs-deployments

  • Metrics per Instance za posledních půl roku hodně pokročily a nabízí performance counters proti jednotlivým instancím (při horizontálním škálování) v téměř reálném čase
  • FREB logs poskytuje logy sesbírané IIS modulem (FREB) a nabízí filtrovatelný grid včetně možnosti stažení XML souborů s podrobným logem.

freb

  • Diagnostics as a Service je chytrý modul, s pomocí kterého lze snadno získat přístup k HTTP logům, Event Viewer logům nebo Memory Dumpu

daas

KUDU

Posledním (neméně zajímavým) místem, kde lze získat přehled o stavu aplikace, zkontrolovat aktuální konfiguraci prostředí nebo například debugovat aplikaci pomocí konzole (CMD / Powershell) je KUDU. KUDU je dostupné pro aplikace nasazené v Azure App Service pod URL:

 http(s)://{nazev aplikace}.scm.azurewebsites.net

Podrobná dokumentace ke KUDU je dostupná ve Wiki

Závěr

Spuštění diagnostických služeb v Azure App Service je otázkou několika kliknutí a nabízí detailní pohled na dění ve vaší aplikaci. I když Vám dnes funguje vše správně, doporučuji logování spustit, protože v případě nenadálých potíží se jedná o první místo, kde lze zjistit příčinu chyb. Application Logs jsou nejsnazší cestou jak trasovat chování webových aplikací nebo například Web Jobů nasazených ve formě konzolové aplikace ve službe Azure App Service.

Miroslav Holec