Miroslav Holec
Premium

Notifikace o chybách v aplikaci s Azure Webhooks

Miroslav Holec   25. května 2016

Tento článek byl napsán v roce 2016. Vývojářské technologie se neustále inovují a článek již nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

... nebo pokud doma nemáte robota se srdcem Raspberry Pi, který by Vás šikanoval, můžete si nechat v reakci na pád webu poslat třeba výhružnou SMS. V tomto článku bude řeč o metrikách v Azure a notifikování v případě překročení různých thresholdů.

Předdefinované a vlastní metriky

Celá řada služeb v Microsoft Azure sbírá data k metrikám, které vždy s konkrétní službou úzce souvisí. V případě SQL databází se může jednat o zbývající prostor pro data nebo v případě Azure Storage o (ne)úspěšné dotazy do úložiště.

Pokud používáte diagnostickou službu Application Insights, můžete dokonce vytvářet své vlastní metriky navázané na určitou událost ve vaší aplikaci. Příkladem může být měření rychlosti nějakého algoritmu nebo závislosti - například volání cizího API.

Alert rules a správa pravidel

V nastavení mnoha Azure služeb se ukrývá položka Alert rules, která umožňuje nadefinovat pravidlo, při kterém se odesílají správcům notifikace formou emailů.

Položka Alert rules v menu

Po zvolení položky Alert rules a přidání nového alertu je k dispozici jednoduchý formulář:

Add alert rule - část 1

Tento formulář umožňuje zvolit jednu sledovanou metriku a nastavit si pravidlo, při kterém dojde k notifikování správců nebo nadefinovaných emailů. Pravidlo na obrázku říká:

  • Condition: metrika je větší než
  • Threshold: 6 výskytů
  • Period: za posledních 5 minut

Kromě emailu správce nebo volitelných emailů je možné použít funkci Webhooks.

Webhooks na Azure

Webhook je akce, při které Azure odešle POST request se zprávou ve formátu JSON na zvolenou URL adresu (HTTP/HTTPS).

Add alert rule - část 2

Formát tohoto JSON těla lze snadno dohledat v dokumentaci. Pro rychlejší použití uvádím rovnou C# třídy, které používám pro tyto účely já:

Rootová třída Webhook obsahuje stav, informace o kontextu (alertu), v rámci kterého došlo k chybě a dodatečné properties.

public class Webhook
{
	public string Status { get; set; }
	public WebhookContext Context { get; set; }
	public Dictionary<string, string> Properties { get; set; }
}

public class WebhookContext
{
    public DateTime TimeStamp { get; set; }
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string ConditionType { get; set; }
    public WebhookCondition Condition { get; set; }
    public string PortalLink { get; set; }
}

public class WebhookCondition
{
    public string MetricName { get; set; }
    public string MetricUnit { get; set; }
    public string MetricValue { get; set; }
    public string WindowSize { get; set; }
    public string Threshold { get; set; }
    public string TimeAggregation { get; set; }
    public string Operator { get; set; }
}

Pokud píšete aplikace v ASP.NET MVC, není problém takovou třídu rovnou použít jako parametr v action metodě controlleru:

[Route("endpoint")]
[HttpPost]
public ActionResult Endpoint(Webhook webhook)
{
    // zde lze reagovat na danou zprávu
}

Zbytek je už na vaší fantazii. Získanou notifikaci lze využít například k odeslání SMS zpráv přes SMS bránu, odeslání přizpůsobených emailů nebo k integraci s jinou oblíbenou službou.

Pro ilustraci přikládám ukázku Webhooks z testování na mém webu:

Ukázka webhooks na webu miroslavholec.cz

Závěr

Webhooks je sice malá ale velmi užitečná funkce, která opět zdůrazňuje výhody prostředí Azure. Z vlastní zkušenosti doporučuji používat Azure alerty a efektivně tak předcházet různým problémům. Díky Azure alertům + Webhooks se nemusím bát, že mi náhle dojde místo v nějakém úložišti nebo se dozvím o nefunkčnosti určité části systému až od zákazníka.

Znáte a používáte Webhooks? Podělte se o své zkušenosti a případy použití v diskusi.