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:
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.
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í:
Metriky služby Azure Event Hubs ve službě Azure Monitor jsou zajímavé k zachycení užitečných přehledů pro službu Event Hubs (například agregace příchozích požadavků, odchozích požadavků, omezených požadavků, úspěšných požadavků, příchozích zpráv, odchozích bajtů, odchozích bajtů, zachycených bajtů, chyb uživatelů).
Metriky Azure Functions sdílejí mnoho metrik ze služby Aplikace Azure Service s přidáním počtu spouštění funkcí a jednotek spouštění funkcí, které je možné použít k pochopení využití a nákladů na plán Consumption. Další zajímavé metriky jsou Připojení, Data In, Data Out, Average Memory Working Set, Thread Count, Requests a Response Time.
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.
V případě služby Event Hubs se korelace vloží do datové části události a v událostech se zobrazí 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é.
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
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
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
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 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
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
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
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))
Přispěvatelé
Tento článek spravuje Microsoft. Původně byla napsána následujícími přispěvateli.
Hlavní autor:
- David Barkol | Hlavní specialista řešení GBB
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: