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.
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.
Notes
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.
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.
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.
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.
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 :
Accédez à votre application de fonction dans le portail.
Sélectionnez Application Insights sous Paramètres dans la page de gauche.
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.
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.
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.
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. Pour l’hébergement du plan de consommation flexible, traces inclut également les journaux créés pendant le déploiement du code. |
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
Interroger les journaux de déploiement de code de Consommation flexible
Important
Le Plan de consommation flexible est actuellement en préversion.
La requête suivante peut être utilisée pour rechercher tous les journaux de déploiement de code pour l’application de fonction actuelle au cours de la période spécifiée :
traces
| extend deploymentId = customDimensions.deploymentId
| where deploymentId != ''
| project timestamp, deploymentId, message, severityLevel, customDimensions, appName
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 :