Analyser la télémétrie d’Azure Functions dans Application Insights

Azure Functions s’intègre à Application Insights pour vous permettre de mieux analyser vos applications de fonction. Application Insights collecte les données de télémétrie générées par votre application de fonction, y compris les informations que votre application écrit dans les journaux. L’intégration d’Application Insights est généralement activée lors de la création de votre application de fonction. Si votre application de fonction n’a pas de clé d’instrumentation définie, vous devez d’abord activer l’intégration d’Application Insights.

Par défaut, les données collectées à partir de votre application de fonction sont stockées dans Application Insights. Dans le portail Azure, Application Insights fournit un ensemble complet de visualisations de vos données de télémétrie. Vous pouvez parcourir les journaux d’erreurs et interroger les événements et les métriques. Cet article fournit des exemples de base montrant comment afficher et interroger les données que vous avez collectées. Pour plus d’informations sur l’exploration des données de votre application de fonction dans Azure Application Insights, consultez Présentation d’Application Insights.

Pour pouvoir visualiser les données Application Insights d’une application de fonction, vous devez disposer au moins des autorisations du rôle Contributeur sur l’application de fonction. Vous devez également disposer de l’autorisation Lecteur d’analyse sur l’instance Application Insights. Vous disposez de ces autorisations par défaut pour n’importe quelle application de fonction et pour l’instance Application Insights que vous créez.

Pour en savoir plus sur la conservation des données et les coûts de stockage potentiels, consultez Collecte, rétention et stockage des données dans Application Insights.

Affichage de la télémétrie dans l’onglet Surveiller

Une fois l'intégration d’Application Insights activée, vous pouvez afficher des données de télémétrie dans l'onglet Surveiller.

  1. Dans la page d’application de fonction, sélectionnez une fonction exécutée au moins une fois après la configuration d’Application Insights. Ensuite, sélectionnez Surveiller dans le volet gauche. Sélectionnez Actualiser régulièrement jusqu’à ce que la liste d’appels de fonction s’affiche.

    Invocations list

    Remarque

    Cette opération peut prendre jusqu’à cinq minutes, le temps que le client de télémétrie organise les données par lots pour les transmettre au serveur. Ce délai ne s’applique pas au Flux de métriques temps réel. Le service se connecte à l’hôte Functions lorsque vous chargez la page, de sorte que les journaux d’activité sont transmis directement sur la page.

  2. Pour afficher les journaux d’activité liés à un appel de fonction spécifique, sélectionnez le lien de la colonne Date (UTC) correspondant à cet appel. La sortie de journalisation pour cet appel s’affiche dans une nouvelle page.

    Invocation details

  3. Choisissez Exécuter dans Application Insights pour afficher la source de la requête qui récupère les données de journal Azure Monitor dans Azure Log Analytics. Si c’est la première fois que vous utilisez Azure Log Analytics dans votre abonnement, vous êtes invité à l’activer.

  4. Une fois que vous avez activé Log Analytics, la requête suivante s’affiche. Vous pouvez voir que les résultats de la requête sont limités aux 30 derniers jours (where timestamp > ago(30d)) et qu’ils n’affichent pas plus de 20 lignes (take 20). Par contre, la liste des détails des appels pour votre fonction porte sur les 30 derniers jours, sans limite.

    Application Insights Analytics invocation list

Pour plus d’informations, consultez la section Interroger les données de télémétrie dans la suite de cet article.

Afficher les données de télémétrie dans Application Insights

Pour ouvrir Application Insights à partir d’une application de fonction dans le portail Azure :

  1. Accédez à votre application de fonction dans le portail.

  2. Sélectionnez Application Insights sous Paramètres dans la page de gauche.

  3. Si c’est la première fois que vous utilisez Application Insights avec votre abonnement, vous êtes invité à l’activer. Pour ce faire, sélectionnez Activer Application Insights, puis Appliquer sur la page suivante.

Open Application Insights from the function app Overview page

Pour plus d’informations sur l’utilisation d’Application Insights, consultez la documentation d’Application Insights. Cette section présente des exemples montrant comment afficher les données dans Application Insights. Si vous êtes déjà familiarisé avec Application Insights, vous pouvez passer directement aux sections sur la configuration et la personnalisation des données de télémétrie.

Application Insights Overview tab

Les domaines d’Application Insights suivants peuvent s'avérer utiles lors de l'évaluation du comportement, du niveau de performance et des erreurs de vos fonctions :

Examiner Description
Échecs Créez des graphiques et des alertes basés sur les échecs de fonction et les exceptions de serveur. Le Nom de l’opération est le nom de la fonction. Les échecs de dépendances ne sont pas affichés, sauf si vous implémentez des données de télémétrie personnalisées pour les dépendances.
Niveau de performance Analysez les problèmes de performances en consultant l’utilisation des ressources et le débit par instances de rôle cloud. Ces données de performances peuvent être utiles pour déboguer les scénarios où les fonctions ralentissent vos ressources sous-jacentes.
Métriques Créez des graphiques et des alertes basés sur des métriques. Les métriques incluent le nombre d’appels de fonction, le délai d’exécution ainsi que les taux de réussite.
Métriques temps réel Visualisez les données des métriques au fil de leur création en quasi-temps réel.

Interroger les données de télémétrie

Application Insights Analytics vous donne accès à toutes les données de télémétrie sous forme de tables de base de données. Analytics fournit un langage de requête pour l’extraction, la manipulation et la visualisation des données.

Choisissez Journaux pour explorer ou rechercher les événements journalisés.

Analytics example

Voici un exemple de requête qui montre la distribution des demandes par nœud Worker au cours des 30 dernières minutes.

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

Les tables disponibles sont affichées sous l’onglet Schéma situé à gauche. Les données générées par les appels de fonction sont disponibles dans les tables suivantes :

Table de charge de travail Description
traces Journaux créés par le runtime, le contrôleur d’échelle et les traces de votre code de fonction.
requests Une demande par appel de fonction.
exceptions Toutes les exceptions levées par le runtime.
customMetrics Nombre d’appels ayant réussi ou échoué, taux de réussite, durée.
customEvents Événements suivis par le runtime, par exemple : requêtes HTTP qui déclenchent une fonction.
performanceCounters Informations sur le niveau de performance des serveurs sur lesquels les fonctions sont en cours d’exécution.

Les autres tables concernent les tests de disponibilité et les données de télémétrie client et navigateur. Vous pouvez implémenter une télémétrie personnalisée en vue d’y ajouter des données.

Dans chaque table, un champ customDimensions contient certaines des données spécifiques à Azure Functions. Par exemple, la requête suivante récupère toutes les traces dont le niveau de journal est Error.

traces 
| where customDimensions.LogLevel == "Error"

Le runtime fournit les champs customDimensions.LogLevel et customDimensions.Category. Vous pouvez fournir des champs supplémentaires dans les journaux d’activité que vous écrivez dans votre code de fonction. Pour obtenir un exemple en C#, consultez Journalisation structurée dans le guide du développeur de la bibliothèque de classes .NET.

Invocations de la fonction de requête

Chaque appel de fonction se voit attribuer un ID unique. InvocationId est inclus dans la dimension personnalisée et peut être utilisé pour mettre en corrélation tous les journaux d’une exécution de fonction particulière.

traces
| project customDimensions["InvocationId"], message

Corrélation des données de télémétrie

Les journaux de différentes fonctions peuvent être mis en corrélation à l’aide de operation_Id. Utilisez la requête suivante pour retourner tous les journaux d’activité d’une opération logique spécifique.

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

Pourcentage d’échantillonnage

La configuration de l’échantillonnage peut être utilisée pour réduire le volume des données de télémétrie. Utilisez la requête suivante pour déterminer si l’échantillonnage est opérationnel ou non. Si vous constatez que RetainedPercentage pour n’importe quel type est inférieur à 100, c’est que ce type de télémétrie est échantillonné.

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

Interroger les journaux de contrôleur d’échelle

Cette fonctionnalité est en préversion.

Une fois que vous avez activé la journalisation du contrôleur d’échelle et l’intégration à Application Insights, vous pouvez utiliser la recherche dans les journaux Application Insights pour interroger les journaux du contrôleur d’échelle émis. Les journaux du contrôleur d’échelle sont enregistrés dans la collection traces sous la catégorie ScaleControllerLogs.

La requête suivante peut être utilisée afin de rechercher tous les journaux du contrôleur d’échelle pour l’application de fonction actuelle dans le délai spécifié :

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

La requête suivante complète la requête précédente pour montrer comment obtenir uniquement les journaux indiquant une modification d’échelle :

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

Mesures spécifiques au plan Consommation

Dans le cadre d’un plan Consommation, le coût d’exécution d’une fonction unique se mesure en Go-secondes. Le coût d’exécution est calculé en combinant l’utilisation de sa mémoire et sa durée d’exécution. Pour en savoir plus, consultez Estimation des coûts d’un plan Consommation.

Les requêtes de télémétrie suivantes sont spécifiques aux métriques qui ont un impact sur le coût d’exécution des fonctions dans le plan Consommation.

Déterminer l’utilisation de la mémoire

Sous Supervision, sélectionnez Logs (Analytics), puis copiez la requête de télémétrie suivante et collez-la dans la fenêtre de requête, puis sélectionnez Exécuter. Cette requête retourne l’utilisation totale de la mémoire pour chaque durée échantillonnée.

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

Les résultats sont semblables à l’exemple qui suit :

Horodatage [UTC] name value
12/09/2019, 01:05:14.947 Octets privés 209 932 288
12/09/2019, 01:06:14.994 Octets privés 212 189 184
12/09/2019, 01:06:30.010 Octets privés 231 714 816
12/09/2019, 01:07:15.040 Octets privés 210 591 744
12/09/2019, 01:12:16.285 Octets privés 216 285 184
12/09/2019, 01:12:31.376 Octets privés 235 806 720

Déterminer la durée

Azure Monitor effectue le suivi des métriques au niveau de la ressource, qui, pour Functions, correspond à l’application de fonction. L’intégration à Application Insights émet des métriques par fonction. Voici un exemple de requête analytique pour obtenir la durée moyenne d’une fonction :

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name averageDurationMilliseconds
QueueTrigger AvgDurationMs 16,087
QueueTrigger MaxDurationMs 90,249
QueueTrigger MinDurationMs 8,522

Étapes suivantes

En savoir plus sur la supervision dans Azure Functions :