Azure Functions-telemetrie analyseren in Application Insights

Azure Functions integreert met Application Insights, zodat je je functie-apps beter kunt bewaken. Application Insights verzamelt telemetriegegevens die door uw functie-app worden gegenereerd, inclusief informatie die uw app naar logboeken schrijft. Application Insights-integratie wordt doorgaans ingeschakeld wanneer uw functie-app wordt gemaakt. Als uw functie-app niet beschikt over de instrumentatiesleutelset, moet u eerst Application Insights-integratie inschakelen.

De gegevens die worden verzameld uit uw functie-app, worden standaard opgeslagen in Application Insights. In Azure Portal biedt Application Insights een uitgebreide set visualisaties van uw telemetriegegevens. U kunt inzoomen op foutenlogboeken en querygebeurtenissen en metrische gegevens. Dit artikel bevat basisvoorbeelden van het weergeven en opvragen van uw verzamelde gegevens. Zie Wat is Application Insights? voor meer informatie over het verkennen van uw functie-app-gegevens in Application Insights.

Als u Application Insights-gegevens wilt kunnen weergeven vanuit een functie-app, moet u ten minste de rolmachtigingen voor inzenders voor de functie-app hebben. U moet ook de machtiging Lezer voor bewaking hebben voor het Application Insights-exemplaar. U hebt deze machtigingen standaard voor elke functie-app en Application Insights-instantie die u maakt.

Zie Gegevensverzameling, -retentie en -opslag in Application Insights voor meer informatie over gegevensretentie en mogelijke opslagkosten.

Telemetrie weergeven op het tabblad Monitor

Als Application Insights-integratie is ingeschakeld, kunt u telemetriegegevens weergeven op het tabblad Monitor .

  1. Selecteer op de pagina van de functie-app een functie die ten minste eenmaal is uitgevoerd nadat Application Insights is geconfigureerd. Selecteer Vervolgens Monitor in het linkerdeelvenster. Selecteer Periodiek vernieuwen totdat de lijst met functie-aanroepen wordt weergegeven.

    Invocations list

    Notitie

    Het kan tot vijf minuten duren voordat de lijst wordt weergegeven terwijl de telemetrieclient gegevens batcheert voor verzending naar de server. De vertraging is niet van toepassing op de Live Metrics Stream. Deze service maakt verbinding met de Functions-host wanneer u de pagina laadt, zodat logboeken rechtstreeks naar de pagina worden gestreamd.

  2. Als u de logboeken voor een bepaalde functie-aanroep wilt zien, selecteert u de kolomkoppeling Date (UTC) voor die aanroep. De uitvoer van logboekregistratie voor die aanroep wordt weergegeven op een nieuwe pagina.

    Invocation details

  3. Kies Uitvoeren in Application Insights om de bron van de query weer te geven waarmee de Azure Monitor-logboekgegevens in Het Azure-logboek worden opgehaald. Als dit de eerste keer is dat u Azure Log Analytics in uw abonnement gebruikt, wordt u gevraagd dit in te schakelen.

  4. Nadat u Log Analytics hebt ingeschakeld, wordt de volgende query weergegeven. U kunt zien dat de queryresultaten zijn beperkt tot de afgelopen 30 dagen (where timestamp > ago(30d)) en dat de resultaten niet meer dan 20 rijen (take 20) bevatten. De lijst met aanroepdetails voor uw functie is daarentegen de afgelopen 30 dagen zonder limiet.

    Application Insights Analytics invocation list

Zie Telemetriegegevens opvragen verderop in dit artikel voor meer informatie.

Telemetrie weergeven in Application Insights

Application Insights openen vanuit een functie-app in Azure Portal:

  1. Blader naar uw functie-app in de portal.

  2. Selecteer Application Insights onder Instellingen op de linkerpagina.

  3. Als dit de eerste keer is dat u Application Insights met uw abonnement gebruikt, wordt u gevraagd dit in te schakelen. Hiervoor selecteert u Application Insights inschakelen en selecteert u Toepassen op de volgende pagina.

Open Application Insights from the function app Overview page

Zie de Application Insights-documentatie voor meer informatie over het gebruik van Application Insights. In deze sectie ziet u enkele voorbeelden van het weergeven van gegevens in Application Insights. Als u al bekend bent met Application Insights, kunt u rechtstreeks naar de secties gaan over het configureren en aanpassen van de telemetriegegevens.

Application Insights Overview tab

De volgende gebieden van Application Insights kunnen nuttig zijn bij het evalueren van het gedrag, de prestaties en fouten in uw functies:

Onderzoeken Omschrijving
Mislukkingen Maak grafieken en waarschuwingen op basis van functiefouten en serveruitzonderingen. De naam van de bewerking is de naam van de functie. Fouten in afhankelijkheden worden niet weergegeven, tenzij u aangepaste telemetrie implementeert voor afhankelijkheden.
Prestaties Analyseer prestatieproblemen door resourcegebruik en doorvoer per cloudrolinstanties weer te geven. Deze prestatiegegevens kunnen handig zijn voor foutopsporingsscenario's waarbij functies uw onderliggende resources afbreken.
Metrische gegevens Grafieken en waarschuwingen maken die zijn gebaseerd op metrische gegevens. Metrische gegevens omvatten het aantal functie-aanroepen, uitvoeringstijd en slagingspercentages.
Live Metrics Metrische gegevens weergeven terwijl deze in bijna realtime worden gemaakt.

Telemetriegegevens opvragen

Met Application Insights Analytics hebt u toegang tot alle telemetriegegevens in de vorm van tabellen in een database. Analytics biedt een querytaal voor het extraheren, bewerken en visualiseren van de gegevens.

Kies Logboeken om te verkennen of query's uit te voeren op vastgelegde gebeurtenissen.

Analytics example

Hier volgt een queryvoorbeeld waarin de distributie van aanvragen per werkrol in de afgelopen 30 minuten wordt weergegeven.

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

De beschikbare tabellen worden weergegeven op het tabblad Schema aan de linkerkant. U vindt gegevens die zijn gegenereerd door functie-aanroepen in de volgende tabellen:

Tabel Omschrijving
Sporen Logboeken die zijn gemaakt door de runtime, schaalcontroller en traceringen van uw functiecode.
Verzoeken Eén aanvraag voor elke functie-aanroep.
Uitzonderingen Eventuele uitzonderingen die door de runtime worden gegenereerd.
customMetrics Het aantal geslaagde en mislukte aanroepen, het slagingspercentage en de duur.
customEvents Gebeurtenissen die worden bijgehouden door de runtime, bijvoorbeeld: HTTP-aanvragen die een functie activeren.
performanceCounters Informatie over de prestaties van de servers waarop de functies worden uitgevoerd.

De andere tabellen zijn voor beschikbaarheidstests en client- en browsertelemetrie. U kunt aangepaste telemetrie implementeren om er gegevens aan toe te voegen.

In elke tabel bevinden enkele functiesspecifieke gegevens zich in een customDimensions veld. Met de volgende query worden bijvoorbeeld alle traceringen opgehaald die logboekniveau Errorhebben.

traces 
| where customDimensions.LogLevel == "Error"

De runtime biedt de customDimensions.LogLevel en customDimensions.Category velden. U kunt aanvullende velden opgeven in logboeken die u in uw functiecode schrijft. Zie de ontwikkelaarshandleiding voor .NET-klassenbibliotheek voor een voorbeeld in C# voor gestructureerde logboekregistratie .

Aanroepen van queryfuncties

Aan elke functie-aanroep wordt een unieke id toegewezen. InvocationId is opgenomen in de aangepaste dimensie en kan worden gebruikt om alle logboeken van een bepaalde functie-uitvoering te correleren.

traces
| project customDimensions["InvocationId"], message

Telemetriecorrelatie

Logboeken van verschillende functies kunnen worden gecorreleerd met behulp van operation_Id. Gebruik de volgende query om alle logboeken voor een specifieke logische bewerking te retourneren.

traces
| where operation_Id == '45fa5c4f8097239efe14a2388f8b4e29'
| project timestamp, customDimensions["InvocationId"], message
| order by timestamp

Steekproefpercentage

Steekproefconfiguratie kan worden gebruikt om het volume van telemetrie te verminderen. Gebruik de volgende query om te bepalen of steekproeven operationeel zijn of niet. Als u ziet dat RetainedPercentage voor elk type kleiner is dan 100, wordt er een steekproef genomen van dat type telemetrie.

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

Queryschaalcontrollerlogboeken

Deze functie is beschikbaar als preview-versie.

Nadat u zowel logboekregistratie van schaalcontrollers als Application Insights-integratie hebt ingeschakeld, kunt u zoeken in Application Insights-logboeken om query's uit te voeren op de logboeken van de verzonden schaalcontroller. Schaalcontrollerlogboeken worden opgeslagen in de traces verzameling onder de categorie ScaleControllerLogs .

De volgende query kan worden gebruikt om te zoeken naar alle schaalcontrollerlogboeken voor de huidige functie-app binnen de opgegeven periode:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"

Met de volgende query wordt de vorige query uitgebreid om te laten zien hoe u alleen logboeken krijgt die een wijziging in de schaal aangeven:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"
| where message == "Instance count changed"
| extend Reason = CustomDimensions.Reason
| extend PreviousInstanceCount = CustomDimensions.PreviousInstanceCount
| extend NewInstanceCount = CustomDimensions.CurrentInstanceCount

Metrische gegevens voor verbruiksabonnementen

Bij uitvoering in een verbruiksabonnement worden de uitvoeringskostenvan één functie-uitvoering gemeten in GB-seconden. De uitvoeringskosten worden berekend door het geheugengebruik te combineren met de uitvoeringstijd. Zie De kosten van het verbruiksabonnement schatten voor meer informatie.

De volgende telemetriequery's zijn specifiek voor metrische gegevens die van invloed zijn op de kosten van het uitvoeren van functies in het verbruiksabonnement.

Geheugengebruik bepalen

Selecteer Logboeken (Analytics) onder Bewaking, kopieer de volgende telemetriequery en plak deze in het queryvenster en selecteer Uitvoeren. Deze query retourneert het totale geheugengebruik op elke steekproeftijd.

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

De resultaten zien eruit als in het volgende voorbeeld:

timestamp [UTC] name waarde
9/12/2019, 1:05:14.947 AM Privébytes 209,932,288
9/12/2019, 1:06:14.994 AM Privébytes 212,189,184
12-9-2019, 1:06:30.010 uur Privébytes 231,714,816
12-9-2019, 1:07:15.040 uur Privébytes 210,591,744
12-9-2019, 1:12:16.285 AM Privébytes 216,285,184
9-12-2019, 1:12:31.376 AM Privébytes 235,806,720

Duur bepalen

Azure Monitor houdt metrische gegevens bij op resourceniveau, wat voor Functions de functie-app is. Application Insights-integratie verzendt metrische gegevens per functie. Hier volgt een voorbeeld van een analysequery om de gemiddelde duur van een functie op te halen:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name averageDurationMilliseconden
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

Volgende stappen

Meer informatie over het bewaken van Azure Functions: