Upravit

Sdílet prostřednictvím


Monitorování služby Azure Functions a event Hubs

Azure Event Hubs
Azure Functions
Azure Monitor

Monitorování poskytuje přehled o chování a stavu vašich systémů a pomáhá vytvářet ucelený pohled na prostředí, historické trendy, korelovat různé faktory a měřit změny výkonu, spotřeby nebo chybovosti.

Azure Functions nabízí integrovanou integraci s Application Insights. Z Application Insights můžete získat informace, jako je počet instancí aplikace funkcí nebo žádost a telemetrie závislostí funkce. Při práci se službami Functions a Event Hubs může Application Insights také sledovat odchozí telemetrie závislostí do centra událostí, vypočítat čas zpracování a zobrazit kompletní tok systému připojeného prostřednictvím služby Event Hubs.

Tato část představuje užitečné funkce a přehledy, které můžete získat z Application Insights pro službu Event Hubs a řešení Functions.

Mapa aplikace

Mapa aplikace ukazuje, jak spolu komponenty v systému vzájemně komunikují. Vzhledem k telemetrii závislostí, která Application Insights poskytuje, mapuje tok událostí mezi Službami Azure Functions a Event Hubs, včetně průměru každého spuštění funkce a průměrné doby trvání události ve službě Event Hubs a také zobrazení transakcí, které obsahují chyby označené červenou barvou.

Po odeslání očekávaného zatížení do systému můžete přejít na Application Insights na webu Azure Portal a na bočním panelu zvolit Mapu aplikace. Tady je mapa, která zobrazuje tři funkce, tři centra událostí a zjevné selhání při zápisu do podřízené databáze:

Mapa aplikace

Podrobnosti o celé transakci

Podrobné informace o komplexní transakci ukazují, jak spolu komponenty systému vzájemně komunikují v chronologickém pořadí. Toto zobrazení také ukazuje, jak dlouho událost strávila při zpracování. V tomto zobrazení můžete také přejít k podrobnostem telemetrie jednotlivých komponent, což usnadňuje řešení potíží mezi komponentami v rámci stejného požadavku, když dojde k problému.

Komplexní transakce

Metriky platformy a telemetrie

Metriky generované platformou ve službě Azure Monitor pro službu Event Hubs a Azure Functions je možné použít k celkovému monitorování chování a stavu řešení:

Azure Functions se integruje s Application Insights, aby poskytovala pokročilou a podrobnou telemetrii a přehledy o hostiteli a spouštění funkcí Functions. Další informace najdete v tématu Analýza telemetrie Azure Functions v Application Insights. Při monitorování topologie pomocí Application Insights je k dispozici celá řada konfigurací. Další informace najdete v tématu Konfigurace monitorování pro Azure Functions.

Následuje příklad dodatečné telemetrie pro funkce aktivované službou Event Hubs vygenerované v tabulce trasování :

Trigger Details: PartionId: 6, Offset: 3985758552064-3985758624640, EnqueueTimeUtc: 2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00, SequenceNumber: 3712266-3712275, Count: 10

Tyto informace vyžadují použití rozšíření Event Hubs 4.2.0 nebo novější verze. Tato data jsou velmi užitečná, protože obsahují informace o zprávě, která aktivovala provádění funkce, a je možné je použít k dotazování a přehledům. Zahrnuje následující data pro každou aktivaci funkce:

  • ID oddílu (6)
  • Rozsah posunu oddílu (3985758552064-3985758624640)
  • Časový rozsah fronty v UTC (2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00)
  • Rozsah pořadových čísel 3712266-3712275
  • A počet zpráv (10)

Příklady použití této telemetrie najdete v části Příklady dotazů Application Insights.

Vlastní telemetrie je také možná pro různé jazyky (knihovna tříd C#, izolovaný jazyk C#, skript jazyka C#, JavaScript, Java, PowerShell a Python). Toto protokolování se zobrazí v tabulce trasování v Application Insights. Do Application Insights můžete vytvořit vlastní položky a přidat vlastní dimenze, které se dají použít k dotazování na data a vytváření vlastních řídicích panelů.

Když se vaše aplikace funkcí připojí k centru událostí pomocí výstupní vazby, zapíšou se také položky do tabulky Závislostí Application Insights.

Tabulka závislostí

V případě služby Event Hubs se korelace vloží do datové části události a v událostech se zobrazí vlastnost Diagnostické ID :

Vlastnost Diagnostické ID

To se řídí formátem kontextu trasování W3C, který se používá také jako ID operace a propojení operací v telemetrii vytvořených funkcemi, což umožňuje Application Insights vytvořit korelaci mezi událostmi centra událostí a spouštěním funkcí, i když jsou distribuované.

Korelace událostí služby Batch

Příklady dotazů Application Insights

Níže je seznam užitečných dotazů Application Insights při monitorování služby Event Hubs pomocí Azure Functions. Tento dotaz zobrazí podrobné informace o funkci aktivované centrem událostí pomocí telemetrie generované rozšířením Event Hubs 4.2.0 a vyšším.

Pokud je v Application Insights povolené vzorkování, můžou se v datech vyskytovat mezery.

Podrobné informace o zpracování událostí

Data se vygenerují pouze ve správném formátu při použití dávkového odeslání. Dávkové odeslání znamená, že funkce přijímá více událostí pro každé spuštění, což se doporučuje pro výkon. Mějte na paměti následující skutečnosti:

  • Hodnota dispatchTimeMilliseconds se blíží délce doby mezi tím, kdy byla událost zapsána do centra událostí a kdy ji aplikace funkcí vyzvedla ke zpracování.
  • dispatchTimeMilliseconds může být záporná nebo jinak nepřesná kvůli posunu hodin mezi serverem centra událostí a aplikací funkcí.
  • Oddíly služby Event Hubs se zpracovávají postupně. Zpráva se neodesílají do kódu funkce ke zpracování, dokud nebudou zpracovány všechny předchozí zprávy. Sledujte dobu provádění funkcí, protože delší doba provádění způsobí zpoždění odeslání.
  • Výpočet používá enqueueTime první zprávy v dávce. Časy odeslání můžou být nižší pro jiné zprávy v dávce.
  • dispatchTimeMilliseconds je založená na bodu v čase.
  • K pořadovým číslům patří oddíl a může dojít k duplicitnímu zpracování, protože služba Event Hubs nezaručuje doručení zpráv přesně jednou.
traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| project timestamp, cloud_RoleInstance, operation_Name, processId =
customDimensions.ProcessId, partitionId, messageCount, sequenceNumberStart,
sequenceNumberEnd, enqueueTimeStart, enqueueTimeEnd, dispatchTimeMilliseconds

Podrobné zpracování událostí

Vizualizace latence odeslání

Tento dotaz vizualizuje latenci odeslání události 50. a 90. percentilu pro danou funkci aktivovanou centrem událostí. Další podrobnosti a poznámky najdete ve výše uvedeném dotazu.

traces
| where operation_Name == "<ENTER THE NAME OF YOUR FUNCTION HERE>"
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| summarize percentiles(dispatchTimeMilliseconds, 50, 90) by bin(timestamp, 5m)
| render timechart

Vizualizace latence odeslání

Souhrn latence odeslání

Tento dotaz je podobný výše, ale zobrazuje souhrnné zobrazení.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| summarize messageCount = sum(messageCount),
percentiles(dispatchTimeMilliseconds, 50, 90, 99, 99.9, 99.99) by operation_Name

Souhrn latence odeslání

Distribuce zpráv mezi oddíly

Tento dotaz ukazuje, jak vizualizovat distribuci zpráv napříč oddíly.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by cloud_RoleInstance,
bin(timestamp, 5m)
| render areachart kind=stacked

Distribuce zpráv mezi oddíly

Distribuce zpráv mezi instancemi

Tento dotaz ukazuje, jak vizualizovat distribuci zpráv napříč instancemi.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by cloud_RoleInstance,
bin(timestamp, 5m)
| render areachart kind=stacked

Distribuce zpráv mezi instancemi

Spouštění instancí a přidělených instancí

Tento dotaz ukazuje, jak vizualizovat počet instancí Azure Functions, které zpracovávají události ze služby Event Hubs, a celkový počet instancí (zpracování a čekání na zapůjčení). Ve většině případů by měly být stejné.

traces
| where message startswith "Trigger Details: Parti"
| summarize type = "Executing Instances", Count = dcount(cloud_RoleInstance) by
bin(timestamp, 60s)
| union (
    traces
    | summarize type = "Allocated Instances", Count = dcount(cloud_RoleInstance) by
bin(timestamp, 60s)
)
| project timestamp, type, Count
| render timechart

Spouštění instancí a přidělených instancí

Veškerá telemetrie pro konkrétní spuštění funkce

Pole operation_Id lze použít v různých tabulkách v Application Insights. V případě služby Event Hubs aktivovaný službou Azure Functions se například zobrazí informace o triggeru, telemetrie z protokolů uvnitř kódu funkce a závislosti a výjimky:

union isfuzzy=true requests, exceptions, traces, dependencies
| where * has "<ENTER THE OPERATION_ID OF YOUR FUNCTION EXECUTION HERE>"
| order by timestamp asc

Veškerá telemetrie pro konkrétní spuštění funkce

Komplexní latence pro událost

Vzhledem k tomu, enqueueTimeUtc vlastnost v trigger detail trasování ukazuje enqueue čas pouze první události každé dávky, kterou funkce zpracovala, lze pokročilejší dotaz použít k výpočtu koncové latence událostí mezi dvěma funkcemi s Event Hubs mezi. Tento dotaz rozšíří propojení operací (pokud existuje) v požadavku druhé funkce a namapuje jeho koncový čas na stejné ID operace prvního spuštění funkce.

let start = view(){
requests
| where operation_Name == "FirstFunction"
| project start_t = timestamp, first_operation_Id = operation_Id
};
let link = view(){
requests
| where operation_Name == "SecondFunction"
| mv-expand ex = parse_json(tostring(customDimensions["_MS.links"]))
| extend parent = case(isnotempty(ex.operation_Id), ex.operation_Id, operation_Id )
| project first_operation_Id = parent, second_operation_Id = operation_Id
};
let finish = view(){
traces
| where customDimensions["EventName"] == "FunctionCompleted" and operation_Name
== "SecondFunction"
| project end_t = timestamp, second_operation_Id = operation_Id
};
start
| join kind=inner (
link
| join kind=inner finish on second_operation_Id
) on first_operation_Id
| project start_t, end_t, first_operation_Id, second_operation_Id
| summarize avg(datetime_diff('second', end_t, start_t))

Komplexní latence pro událost

Přispěvatelé

Tento článek spravuje Microsoft. Původně byla napsána následujícími přispěvateli.

Hlavní autor:

Pokud chcete zobrazit neveřejné profily LinkedIn, přihlaste se na LinkedIn.

Další kroky

Další informace najdete v těchto souvisejících článcích: