Monitorování 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ý přehled o prostředí, historických trendech, korelaci různých faktorů a měření změn výkonu, spotřeby nebo míry chyb.

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 telemetrie požadavků a závislostí funkce. Při práci se službami Functions a Event Hubs může Application Insights také sledovat odchozí telemetrická data závislostí do centra událostí, vypočítat čas strávený ve frontě 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 vaše řešení Event Hubs a Functions.

Mapa aplikace

Mapa aplikace ukazuje, jak spolu komponenty v systému vzájemně komunikují. Vzhledem k telemetrii závislostí, kterou Služba Application Insights poskytuje, mapuje tok událostí mezi Azure Functions a službou Event Hubs, včetně průměru spuštění jednotlivých funkcí a průměrné doby trvání události ve službě Event Hubs a také zobrazení transakcí obsahujících chyby označené červeně.

Po odeslání očekávaného zatížení do systému můžete přejít na Application Insights v Azure Portal a na bočním panelu zvolit v Mapě 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

Podrobnosti o celé transakci ukazují, jak spolu komponenty systému vzájemně spolupracují, a to v chronologickém pořadí. Toto zobrazení také ukazuje, jak dlouho událost strávila ve frontě. Z tohoto zobrazení můžete také přejít k podrobnostem o telemetrii jednotlivých komponent, což usnadňuje řešení potíží napříč komponentami v rámci stejného požadavku v případě, že dojde k problému.

Kompletní transakce

Metriky a telemetrie platformy

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 služby Functions a spouštění funkcí. Další informace najdete v tématu Analýza Azure Functions telemetrie 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í, abyste používali rozšíření Služby Event Hubs 4.2.0 nebo novější verzi. Tato data jsou velmi užitečná, protože obsahují informace o zprávě, která aktivovala spuštění funkce, a dají se použít k dotazování a přehledům. Obsahuje následující data pro každou aktivaci funkce:

  • ID oddílu (6)
  • Rozsah posunu oddílu (3985758552064-3985758624640)
  • Časový rozsah zařazení do 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 jazyka C#, izolovaný jazyk C#, skript jazyka C#, JavaScript, Java, PowerShell a Python). Toto protokolování se zobrazí v tabulce trasování v Application Insights. Můžete vytvořit vlastní záznamy do Application Insights a přidat vlastní dimenze, které se dají použít k dotazování dat 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 Application Insights Dependencies (Závislosti Application Insights).

Tabulka závislostí

U služby Event Hubs se korelace vloží do datové části události a v událostech se zobrazí vlastnost Diagnostic-Id :

Vlastnost ID diagnostiky

Následuje formát kontextu trasování W3C , který se také používá jako ID operace a odkazy operací v telemetrii vytvořené službou Functions, což službě Application Insights umožňuje vytvořit korelaci mezi událostmi centra událostí a spuštěním funkcí, i když jsou distribuované.

Korelace dávkových událostí

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 služby Event Hubs verze 4.2.0 nebo vyšší.

Pokud je ve službě Application Insights povolené vzorkování , můžou v datech nacházet mezery.

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

Data se generují pouze ve správném formátu při použití dávkového odesílá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 z hlediska výkonu. Mějte na paměti následující skutečnosti:

  • Hodnota dispatchTimeMilliseconds se blíží době mezi zápisem události do centra událostí a jejím vyzvednutím aplikací funkcí ke zpracování.
  • dispatchTimeMilliseconds může být záporná nebo jinak nepřesná kvůli posunu času 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 se nezpracují všechny předchozí zprávy. Monitorujte dobu provádění funkcí, protože delší doby provádění způsobí zpoždění odesílání.
  • Výpočet používá enqueueTime první zprávy v dávce. Doba odeslání může být kratší pro ostatní zprávy v dávce.
  • dispatchTimeMilliseconds je založená na určitém bodu v čase.
  • Pořadová čísla jsou pro jednotlivé oddíly a může dojít k duplicitnímu zpracování, protože služba Event Hubs nezaručuje doručení zprávy 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 odesílání událostí na 50. a 90. percentilu pro danou funkci aktivovanou centrem událostí. Další podrobnosti a poznámky najdete v 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 se podobá výše uvedenému, 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 napříč 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 napříč oddíly

Distribuce zpráv mezi instancemi

Tento dotaz ukazuje, jak vizualizovat distribuci zpráv mezi 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í). Většinou 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í

Všechna telemetrie pro spuštění konkrétní funkce

Pole operation_Id je možné použít v různých tabulkách v Application Insights. V případě služby Event Hubs aktivované Azure Functions následující dotaz například povede k informacím o triggeru, telemetrii z protokolů v kódu funkce a závislostem a výjimkám:

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

Všechna telemetrie pro spuštění konkrétní funkce

Koncová latence události

Vzhledem k tomu, že vlastnost enqueueTimeUtc v trasování podrobností triggeru ukazuje čas zařazení do fronty pouze první události každé dávky, kterou funkce zpracovala, je možné použít pokročilejší dotaz k výpočtu celkové latence událostí mezi dvěma funkcemi se službou Event Hubs mezi nimi. Tento dotaz rozšíří propojení operací (pokud existuje) v požadavku druhé funkce a namapuje čas ukončení operace na stejné ID operace jako při spuštění první 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))

Koncová latence události

Přispěvatelé

Tento článek spravuje Microsoft. Původně ji napsali následující přispěvatelé.

Hlavní autor:

Pokud chcete zobrazit neveřejné profily Služby LinkedIn, přihlaste se k LinkedInu.

Další kroky

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