Bewakings- Azure Functions en Event Hubs

Event Hubs
Functions
Application Insights
Monitor

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:

Toepassingskaart

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.

End-to-end-transactie

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.

Tabel Afhankelijkheden

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

Eigenschap Diagnostische id

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.

Correlatie van batchgebeurtenissen

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 dispatchTimeMilliseconds functie-app voor verwerking.
  • dispatchTimeMilliseconds kan 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.
  • dispatchTimeMilliseconds is 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

Gedetailleerde gebeurtenisverwerking

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

Visualisatie van verzendlatentie

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

Samenvatting van de verzendlatentie

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 over partities

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

Berichtdistributie tussen exemplaren

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

Exemplaren en toegewezen exemplaren uitvoeren

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

Alle telemetrie voor een specifieke functie-uitvoering

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))

End-to-endlatentie voor een gebeurtenis

Volgende stappen

Bekijk de volgende verwante artikelen voor meer informatie: