Bewaking biedt inzicht in het gedrag en de status van uw systemen en helpt bij het bouwen van een holistische weergave van de omgeving, historische trends, het correleren van diverse factoren en het meten van wijzigingen in prestaties, verbruik of foutpercentage.
Azure Functions biedt ingebouwde integratie met Application Insights. Vanuit Application Insights kunt u informatie verkrijgen, zoals het aantal exemplaren van de functie-app of telemetrie van aanvragen en afhankelijkheden van een functie. Wanneer u met Functions en Event Hubs werkt, kan Application Insights ook de telemetrie van uitgaande afhankelijkheden naar de Event Hub bijhouden, de tijd berekenen die in de wachtrij is besteed en de end-to-end stroom van het systeem weergeven die is verbonden via Event Hubs.
In deze sectie vindt u nuttige functies en inzichten die u kunt verkrijgen van Application Insights voor uw Event Hubs plus Functions-oplossing.
Toepassingskaart
Toepassingskaart laat zien hoe de onderdelen in een systeem met elkaar communiceren. Vanwege de afhankelijkheids-telemetrie die Application Insights biedt, wordt de stroom gebeurtenissen tussen Azure Functions en Event Hubs in kaart brengen, inclusief het gemiddelde van elke functie-uitvoering en de gemiddelde duur van een gebeurtenis in Event Hubs, en worden transacties weergegeven die fouten bevatten die rood zijn gemarkeerd.
Nadat de verwachte belasting naar uw systeem is verzonden, kunt u naar Toepassingskaart Insights in de Azure Portalgaan en op de zijbalk kiezen voor Toepassingskaart. Hier ziet u een kaart met drie functies, drie Event Hubs en duidelijke fouten bij het schrijven naar een downstream-database:

End-to-end transactiedetails
End-to-end transactiedetails laten zien hoe uw systeemonderdelen met elkaar communiceren, in chronologische volgorde. In deze weergave ziet u ook hoe lang een gebeurtenis in de wachtrij heeft doorgebracht. U kunt ook inzoomen op de telemetrie van elk onderdeel in deze weergave, waardoor het eenvoudiger is om problemen op te lossen tussen onderdelen binnen dezelfde aanvraag wanneer er een probleem is opgetreden.

Metrische gegevens en telemetrie van platform
Door het platform gegenereerde metrische gegevens in Azure Monitor voor Event Hubs en Azure Functions kunnen worden gebruikt voor algemene bewaking van het gedrag en de status van de oplossing:
Azure Event Hubs metrische gegevens in Azure Monitor zijn van belang voor het vastleggen van nuttige inzichten voor Event Hubs (zoals aggregaten van binnenkomende aanvragen, uitgaande aanvragen, beperkt aanvragen, geslaagde aanvragen, binnenkomende berichten, uitgaande berichten, vastgelegde berichten, binnenkomende bytes, uitgaande bytes, vastgelegde bytes, gebruikersfouten).
Azure Functions metrische gegevens delen veel van de metrische gegevens van Azure App Service, met de toevoeging van aantal functie-uitvoeringen en functie-uitvoeringseenheden die kunnen worden gebruikt om inzicht te krijgen in het gebruik en de kosten van het verbruiksplan. Andere metrische gegevens die van belang zijn, zijn Verbindingen, Gegevens in, Gegevens uit, Gemiddelde geheugenset, Aantal threads, Aanvragen en Reactietijd.
Azure Functions kan worden geïntegreerd met Application Insights om geavanceerde en gedetailleerde telemetrie en inzichten te bieden in de functions-host en functie-uitvoeringen. Zie Analyze Azure Functions telemetry in Application Insights (Telemetrie analyseren in Application Insights) voor meer Insights. Wanneer u Application Insights voor het bewaken van een topologie, zijn er verschillende configuraties beschikbaar. Zie Bewaking configureren voor Azure Functions voor meer Azure Functions.
Hier volgt een voorbeeld van extra telemetrie voor Event Hubs geactiveerde functies die worden gegenereerd in de traceringentabel:
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
Voor deze informatie moet u Event Hubs extensie 4.2.0 of een latere versie. Deze gegevens zijn zeer nuttig omdat deze informatie bevatten over het bericht dat de uitvoering van de functie heeft geactiveerd en kan worden gebruikt voor het uitvoeren van query's en inzichten. Deze bevat de volgende gegevens voor elke keer dat de functie wordt geactiveerd:
- De partitie-id (6)
- Het partitie offsetbereik (30095894584-30095919248)
- Het tijdsbereik voor enqueue in UTC (2021-05-06T02:02:59.2490000Z-2021-05-06T02:02:59.2490000Z)
- Het reeksnummerbereik 814940-815019
- En het aantal berichten (80)
Raadpleeg de sectie Voorbeeldtoepassing Insights query's voor voorbeelden van het gebruik van deze telemetrie.
Aangepaste telemetrie is ook mogelijk voor verschillende talen ( C-klassebibliotheek, C # Isolated, C # Script, JavaScript, Java, PowerShellen Python). # Deze logboekregistratie wordt in de tabel traces in Application Insights. U kunt uw eigen vermeldingen maken in Application Insights en aangepaste dimensies toevoegen die kunnen worden gebruikt voor het uitvoeren van query's op gegevens en het maken van aangepaste dashboards.
Wanneer uw functie-app verbinding maakt met een Event Hub met behulp van een uitvoerbinding, worden vermeldingen ook naar de tabel Application Insights Dependencies geschreven.

Voor Event Hubs wordt de correlatie geïnjecteerd in de nettolading van de gebeurtenis en ziet u de eigenschap Diagnostic-Id in gebeurtenissen:

Dit volgt de W3C Trace Context-indeling die ook wordt gebruikt als Bewerkings-id en Bewerkingskoppelingen in telemetrie die is gemaakt door Functions, waarmee Application Insights de correlatie tussen event hub-gebeurtenissen en functie-uitvoeringen kan maken, zelfs wanneer ze worden gedistribueerd.

Voorbeeld van application Insights query's
Hieronder vindt u een lijst met nuttige Application Insights-query's bij het controleren Event Hubs met Azure Functions. Deze query geeft gedetailleerde informatie weer voor door event hub geactiveerde functie met behulp van telemetrie die wordt Event Hubs extensie 4.2.0 en hoger.
Wanneer steekproeven zijn ingeschakeld in Application Insights, kunnen er hiaten in de gegevens zijn.
Gedetailleerde informatie over gebeurtenisverwerking
De gegevens worden alleen in de juiste indeling verzonden wanneer batchgebatch verzonden wordt gebruikt. Batch-verzending betekent dat de functie meerdere gebeurtenissen accepteert voor elke uitvoering, wat wordt aanbevolen voor prestaties. Houd rekening met de volgende overwegingen:
- De waarde geeft een schatting van de tijdsduur tussen het moment waarop de gebeurtenis naar de Event Hub is geschreven en het moment waarop deze is opgehaald door de
dispatchTimeMillisecondsfunctie-app voor verwerking. dispatchTimeMillisecondskan negatief of anderszins onnauwkeurig zijn vanwege een klokdrift tussen de Event Hub-server en de functie-app.- Event Hubs partities worden opeenvolgend verwerkt. Een bericht wordt pas verzonden naar functiecode voor verwerking als alle eerdere berichten zijn verwerkt. Controleer de uitvoeringstijd van uw functies, aangezien langere uitvoeringstijden vertragingen bij de verzending veroorzaken.
- De berekening maakt gebruik van de enqueueTime van het eerste bericht in de batch. De verzendtijden zijn mogelijk lager voor andere berichten in de batch.
dispatchTimeMillisecondsis gebaseerd op het tijdstip.- Sequentienummers zijn per partitie en dubbele verwerking kan plaatsvinden omdat Event Hubs exactly-once berichtbezorging niet garandeert.
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

Visualisatie van verzendlatentie
Met deze query wordt de latentie voor het verzenden van gebeurtenissen op het 50e en 90e percentiel voor een bepaalde door event hub geactiveerde functie gevisualiseerd. Zie de bovenstaande query voor meer informatie en opmerkingen.
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

Samenvatting van de verzendlatentie
Deze query is vergelijkbaar met hierboven, maar toont een samenvattingsweergave.
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

Berichtdistributie over partities
Deze query laat zien hoe u berichtdistributie over partities kunt visualiseren.
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

Berichtdistributie tussen exemplaren
Deze query laat zien hoe u berichtdistributie tussen exemplaren kunt visualiseren.
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

Exemplaren en toegewezen exemplaren uitvoeren
Deze query laat zien hoe u het aantal Azure Functions-exemplaren visualiseert dat gebeurtenissen van Event Hubs verwerkt, en het totale aantal exemplaren (verwerken en wachten op lease). In de meeste tijd moeten ze hetzelfde zijn.
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

Alle telemetrie voor een specifieke functie-uitvoering
Het operation_Id veld kan worden gebruikt in de verschillende tabellen in Application Insights. Voor Event Hubs geactiveerde Azure Functions resulteert de volgende query bijvoorbeeld in de triggergegevens, telemetrie van logboeken in de functiecode en afhankelijkheden en uitzonderingen:
union isfuzzy=true requests, exceptions, traces, dependencies
| where * has "<ENTER THE OPERATION_ID OF YOUR FUNCTION EXECUTION HERE>"
| order by timestamp asc

End-to-endlatentie voor een gebeurtenis
Omdat de eigenschap enqueueTimeUtc in de traceerfunctie voor triggerdetails de inschrijvingstijd toont van alleen de eerste gebeurtenis van elke batch die door de functie is verwerkt, kan een geavanceerdere query worden gebruikt om de end-to-endlatentie van gebeurtenissen tussen twee functies met Event Hubs ertussen te berekenen. Met deze query worden de bewerkingskoppelingen (indien van ) in de aanvraag van de tweede functie uitgebreid en wordt de eindtijd ervan aan dezelfde overeenkomstige bewerkings-id van de eerste begintijd van de functie toe te staan.
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))

Volgende stappen
Bekijk de volgende verwante artikelen voor meer informatie:
- Serverloze gebeurtenisverwerking bewaken
- Uw Azure Functions analyseren in Application Insights
- Bewaking configureren voor Azure Functions
- Uw Azure Functions analyseren in Application Insights
- Metrische gegevens in Azure Monitor - Azure Event Hubs
- Kusto-querytaal
Gerelateerde resources
- Bewaking van serverloze gebeurtenisverwerking biedt richtlijnen voor het bewaken van serverloze gebeurtenisgestuurde architecturen.
- Serverloze gebeurtenisverwerking is een referentiearchitectuur met een typische architectuur van dit type, met codevoorbeelden en bespreking van belangrijke overwegingen.
- In Batchverwerking en filteren in serverloze gebeurtenisverwerking met Event Hubs gedetailleerder beschreven hoe deze gedeelten van de referentiearchitectuur werken.