Monitorování poskytuje přehled o chování a stavu systémů a pomáhá vytvořit holistický pohled na prostředí, historické trendy, korelovat různorodé faktory a měřit změny ve výkonu, spotřebě nebo míře chyb.
Azure Functions nabízí integrovanou integraci s Application Přehledy. V Přehledy můžete získat informace, jako je počet instancí aplikace funkcí nebo telemetrie požadavků a závislostí funkce. Při práci s functions a Event Hubs může Application Přehledy také sledovat odchozí telemetrie závislostí do centra událostí, vypočítat čas strávený ve frontě a zobrazit celý tok systému připojeného přes Event Hubs.
Tato část představuje užitečné funkce a přehledy, které můžete získat z application Přehledy pro vaše 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í, kterou poskytuje application Přehledy, mapuje tok událostí mezi Azure Functions a Event Hubs, včetně průměru spuštění jednotlivých funkcí a průměrné doby trvání události v Event Hubs a také zobrazuje transakce, které obsahují selhání označená červeně.
Po odeslání očekávaného zatížení do vašeho systému můžete přejít na stránku Application Přehledy na Azure Portala na bočním panelu zvolit Na 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:

Podrobnosti o koncové transakci
Podrobné informace o každé transakci ukazují vzájemnou interakci systémových komponent v chronologickém pořadí. Toto zobrazení také ukazuje, jak dlouho se událost strávila ve frontě. Můžete také přejít k podrobnostem telemetrie jednotlivých komponent z tohoto zobrazení, což usnadňuje řešení potíží mezi komponentami v rámci stejného požadavku, když došlo k problému.

Metriky platformy a telemetrie
Metriky generované platformou v Azure Monitor pro Event Hubs a Azure Functions lze použít k celkovému monitorování chování a stavu řešení:
Azure Event Hubs metriky v Azure Monitor jsou zajímavé k zachycení užitečných přehledů pro Event Hubs (jako jsou agregace příchozích požadavků, odchozí požadavky, omezování požadavků, úspěšné požadavky, příchozí zprávy, odchozí zprávy, zachycené zprávy, příchozí bajty, odchozí bajty, zachycené bajty, uživatelské chyby).
Azure Functions metriky sdílí mnoho metrik z Azure App Services přidáním počtu spuštění funkce a jednotek provádění funkcí, které lze použít k pochopení využití a nákladů plánu Consumption. Mezi další metriky, které vás zajímají, jsou připojení, příchozí data, out data, průměrná pracovní sada paměti, počet vláken, požadavky a doba odezvy.
Azure Functions se integruje s Application Přehledy a poskytuje pokročilou a podrobnou telemetrii a přehledy o spouštění funkcí a hostitele služby Functions. Další informace najdete v tématu Analýza Azure Functions dat v nástroji Application Přehledy. Při použití Přehledy k monitorování topologie 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é Event Hubs vygenerované v tabulce trasování:
Trigger Details: PartionId: 6, Offset: 30095894584-30095919248, EnqueueTimeUtc: 2021-05-06T02:02:59.2490000Z-2021-05-06T02:02:59.2490000Z, SequenceNumber: 814940-815019, Count: 80
Tyto informace vyžadují, aby Event Hubs verzi 4.2.0 nebo novější. Tato data jsou velmi užitečná, protože obsahují informace o zprávě, která aktivoval spuštění funkce a lze je použít k dotazování a přehledům. Při každé aktivaci funkce obsahuje následující data:
- ID oddílu (6)
- Rozsah posunu oddílu (30095894584-30095919248)
- Časový rozsah zařazení do fronty v UTC (2021-05-06T02:02:59.2490000Z-2021-05-06T02:02:59.2490000Z)
- Rozsah pořadových čísel 814940–815019
- A počet zpráv (80)
Příklady použití této telemetrie Přehledy v části Příklady dotazů na aplikace.
Vlastní telemetrie je možná také pro různé jazyky ( knihovna třídjazyka C, # izolovaný jazyk C, # skript jazyka # C, JavaScript, Java, PowerShella Python). Toto protokolování se zobrazí v tabulce trasování v části Application Přehledy. V aplikaci Application Přehledy můžete vytvořit vlastní položky a přidat vlastní dimenze, které je možné 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, zapisují se také položky do tabulky Application Přehledy Dependencies.

Například Event Hubs se korelace vkládá do datové části události a v událostech se zobrazí vlastnost Diagnostic-Id:

To se řídí formátem kontextu trasování W3C, který se také používá jako ID operace a propojení operací v telemetrii vytvořené funkcí, což umožňuje, aby služba Application Přehledy vytvořila korelaci mezi událostmi centra událostí a spouštěním funkcí, a to i v případě jejich distribuce.

Příklady dotazů Přehledy aplikací
Níže je seznam užitečných dotazů pro Přehledy aplikací při monitorování 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šší.
Pokud je v části Přehledy povolené vzorkování, mohou v datech být mezery.
Podrobné informace o zpracování událostí
Data se vyzařují pouze ve správném formátu, pokud se používá dávkové odesílání. Batch Dispatch 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 přibližuje dobu mezi zápisem události do centra událostí a tím, kdy ji aplikace funkcí
dispatchTimeMillisecondsvyzvedne ke zpracování. dispatchTimeMillisecondsmůže být záporná nebo jinak nepřesná kvůli posunu hodin mezi událostí hub server a aplikací funkcí.- Event Hubs oddíly se zpracovávají postupně. Zpráva nebude odeslána do kódu funkce ke zpracování, dokud se nezpracují všechny předchozí zprávy. Sledujte dobu provádění funkcí, protože delší doba provádění způsobí zpoždění odesílání.
- Výpočet používá enqueueTime první zprávy v dávce. Časy odesílání ostatních zpráv v dávce můžou být nižší.
dispatchTimeMillisecondsje založená na bodu v čase.- Pořadová čísla jsou pro každý oddíl a může dojít k duplicitnímu zpracování, protože 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 "Z-" enqueueTimeEnd:datetime ", 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 odesílání
Tento dotaz vizualuje latenci volání událostí 50. a 90. percentilu pro danou funkci aktivované 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 "Z-" enqueueTimeEnd:datetime ", 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 odesílání
Tento dotaz se podobá výše uvedenému dotazu, 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 "Z-" enqueueTimeEnd:datetime ", 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 mezi oddíly.
traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "Z-" enqueueTimeEnd:datetime ", SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by partitionId, bin(timestamp, 5m)
| render areachart kind=stacked

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 "Z-" enqueueTimeEnd:datetime ", 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 z Event Hubs, a celkový počet instancí (zpracování a čekání na zapůjčení). Ve většině času 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 můžete použít v různých tabulkách v části Application Přehledy. Například Event Hubs aktivované Azure Functions následující dotaz například vytvoří informace o triggeru, telemetrii 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

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 zpracuje, je možné pomocí pokročilejšího dotazu vypočítat celkovou latenci událostí mezi dvěma funkcemi s Event Hubs mezi. Tento dotaz rozbalí propojení operací (pokud jsou k dispozici) v požadavku druhé funkce a namapuje její koncový čas na stejné odpovídající ID operace prvního času 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))

Další kroky
Další informace najdete v těchto souvisejících článcích:
- Monitorování zpracování událostí bez serveru
- Analýza Azure Functions telemetrie v nástroji Application Přehledy
- Konfigurace monitorování pro Azure Functions
- Analýza Azure Functions telemetrie v nástroji Application Přehledy
- Metriky v Azure Monitor – Azure Event Hubs
- Dotazovací jazyk Kusto
Související prostředky
- Monitorování bez serveru zpracování událostí poskytuje pokyny k monitorování architektur řízených událostmi bez serveru.
- Zpracování událostí bez serveru je referenční architektura, která podrobně popisuje typickou architekturu tohoto typu. Obsahuje ukázky kódu a diskusi o důležitých aspektech.
- Podrobnější popis toho, jak tyto části referenční architektury fungují, Event Hubs bez serveru při zpracování událostí bez serveru.