Comment configurer l’analyse pour Azure Functions
Azure Functions s’intègre à Application Insights pour vous permettre de mieux analyser vos applications de fonction. Application Insights, fonctionnalité d’Azure Monitor, est un service extensible de gestion des performances des applications (APM) qui collecte les données générées par votre application de fonction, notamment 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 n’a pas de clé d’instrumentation définie, vous devez d’abord activer l’intégration d’Application Insights.
Vous pouvez utiliser Application Insights sans en personnaliser la configuration. Toutefois, la configuration par défaut peut engendrer d’importants volumes de données. Si vous utilisez un abonnement Azure Visual Studio, vous risquez d’atteindre votre plafond de données pour Application Insights. Pour plus d’informations sur les coûts d’Application Insights, consultez Facturation d’Application Insights. Pour plus d’informations, consultez Solutions avec un volume élevé de télémétrie.
Dans cet article, vous allez découvrir comment configurer et personnaliser les données que vos fonctions envoient à Application Insights. Vous pouvez définir des configurations de journalisation courantes dans le fichier host.json. Par défaut, ces paramètres régissent également les journaux personnalisés émis par votre code. Toutefois, dans certains cas, vous pouvez désactiver ce comportement en faveur d’options vous donnant plus de contrôle sur la journalisation. Pour plus d’informations, consultez Journaux des applications personnalisés.
Remarque
Vous pouvez utiliser des paramètres d’application spécialement configurés pour représenter des paramètres spécifiques dans un fichier host.json pour un environnement particulier. De cette façon, vous pouvez modifier efficacement les paramètres host.json sans avoir à republier le fichier host.json dans votre projet. Pour plus d’informations, consultez Substituer les valeurs de host.json.
Journaux des application personnalisés
Par défaut, les journaux des applications personnalisés que vous écrivez sont envoyés à l’hôte Functions, qui les envoie ensuite à Application Insights sous la catégorie Worker. Certaines piles de langage vous permettent d’envoyer les journaux directement à Application Insights, ce qui vous donne un contrôle total sur la façon dont les journaux que vous écrivez sont émis. Dans ce cas, le pipeline de journalisation passe de worker -> Functions host -> Application Insights
à worker -> Application Insights
.
Le tableau suivant résume les options de configuration disponibles pour chaque pile :
Pile de langages | Où configurer des journaux personnalisés |
---|---|
.NET (modèle in-process) | host.json |
.NET (modèle isolé) | Par défaut (envoyer les journaux personnalisés à l’hôte Functions) : host.json Pour envoyer les journaux directement à Application Insights, consultez Configurer Application Insights dans HostBuilder. |
Node.JS | host.json |
Python | host.json |
Java | Par défaut (envoyer les journaux personnalisés à l’hôte Functions) : host.json Pour envoyer les journaux directement à Application Insights, consultez Configurer l’agent Java Application Insights. |
PowerShell | host.json |
Quand vous configurez des journaux d’application personnalisés pour les envoyer directement, l’hôte ne les émet plus et host.json
ne contrôle plus leur comportement. De même, les options exposées par chaque pile s’appliquent uniquement aux journaux personnalisés et ne modifient pas le comportement des autres journaux d’exécution décrits dans cet article. Dans ce cas, pour contrôler le comportement de tous les journaux, vous devrez peut-être modifier les deux configurations.
Configurer des catégories
L’enregistreur d’événements d’Azure Functions inclut une catégorie par journal. La catégorie indique quelle partie du code d’exécution ou de votre code de fonction a écrit le journal. Les catégories diffèrent entre la version 1.x et les versions ultérieures.
Les noms de catégorie dans Functions ne sont pas attribués de la même façon que dans d’autres frameworks .NET. Par exemple, quand vous utilisez ILogger<T>
dans ASP.NET, la catégorie est le nom du type générique. Les fonctions C# utilisent également ILogger<T>
, mais au lieu de définir le nom du type générique comme catégorie, le runtime attribue des catégories en fonction de la source. Par exemple :
- Les entrées liées à l’exécution d’une fonction se voient attribuer la catégorie
Function.<FUNCTION_NAME>
. - Les entrées créées par le code utilisateur à l’intérieur de la fonction, par exemple lors de l’appel de
logger.LogInformation()
, se voient attribuer la catégorieFunction.<FUNCTION_NAME>.User
.
Le tableau suivant décrit les principales catégories de journaux créés par le runtime :
Category | Table de charge de travail | Description |
---|---|---|
Function |
traces | Inclut les journaux des fonctions démarrées et terminées pour toutes les exécutions de fonctions. Pour les exécutions ayant réussi, ces journaux d’activité sont de niveau Information . Les exceptions sont journalisées au niveau Error . Le runtime crée également des journaux de niveau Warning , par exemple lorsque des messages de la file d’attente sont envoyés à la file d’attente de messages incohérents. |
Function.<YOUR_FUNCTION_NAME> |
dependencies | Les données de dépendance sont collectées automatiquement pour certains services. Pour les exécutions ayant réussi, ces journaux d’activité sont de niveau Information . Pour plus d’informations, consultez Dépendances. Les exceptions sont journalisées au niveau Error . Le runtime crée également des journaux de niveau Warning , par exemple lorsque des messages de la file d’attente sont envoyés à la file d’attente de messages incohérents. |
Function.<YOUR_FUNCTION_NAME> |
customMetrics customEvents |
Les SDK C# et JavaScript vous permettent de collecter des métriques personnalisées et de journaliser des événements personnalisés. Pour plus d’informations, consultez Données de télémétrie personnalisées. |
Function.<YOUR_FUNCTION_NAME> |
traces | Inclut les journaux des fonctions démarrées et terminées pour des exécutions de fonctions spécifiques. Pour les exécutions ayant réussi, ces journaux d’activité sont de niveau Information . Les exceptions sont journalisées au niveau Error . Le runtime crée également des journaux de niveau Warning , par exemple lorsque des messages de la file d’attente sont envoyés à la file d’attente de messages incohérents. |
Function.<YOUR_FUNCTION_NAME>.User |
traces | Les journaux générés par l’utilisateur, qui peuvent être de n’importe quel niveau de journalisation. Pour plus d’informations sur l’écriture dans les journaux à partir de vos fonctions, consultez la page sur les écritures dans des journaux. |
Host.Aggregator |
customMetrics | Ces journaux d’activité générés par le runtime fournissent des nombres et des moyennes d’appels de fonction sur une période de temps configurable. La période par défaut est 30 secondes ou 1 000 résultats, selon la première de ces éventualités. Le nombre d’exécutions, le taux de réussite et la durée en sont des exemples. Tous ces journaux sont écrits au niveau Information . Si vous filtrez sur le niveau Warning ou un niveau supérieur, vous ne voyez aucune de ces données. |
Host.Results |
requests | Ces journaux générés par le runtime indiquent la réussite ou l’échec d’une fonction. Tous ces journaux sont écrits au niveau Information . Si vous filtrez sur le niveau Warning ou un niveau supérieur, vous ne voyez aucune de ces données. |
Microsoft |
traces | Catégorie de journal complète qui reflète un composant du runtime .NET appelé par l’hôte. |
Worker |
traces | Journaux générés par le processus de traitement des langages pour les langages autres que .NET. Les journaux de processus de traitement des langages peuvent également être journalisés dans une catégorie Microsoft.* , telle que Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcFunctionInvocationDispatcher . Ces journaux sont écrits au niveau Information . |
Remarque
Pour les fonctions de la bibliothèque de classes .NET, ces catégories partent du principe que vous utilisez ILogger
et non ILogger<T>
. Pour plus d’informations, consultez la documentation relative à Functions ILogger.
La colonne Table indique dans quelle table Application Insights le journal est écrit.
Configurer des niveaux de journaux
Un niveau de journal est affecté à chaque journal. La valeur est un entier qui indique l’importance relative :
LogLevel | Code | Description |
---|---|---|
Trace | 0 | Journaux contenant les messages les plus détaillés. Ces messages peuvent contenir des données d’application sensibles. Ils sont désactivés par défaut et ne doivent jamais être activés dans un environnement de production. |
Débogage | 1 | Journaux utilisés pour l’investigation interactive durant le développement. Ils doivent principalement contenir des informations utiles pour le débogage et n’ont pas d’intérêt à long terme. |
Information | 2 | Journaux utilisés pour suivre le flux général de l’application. Ils ont généralement une utilité à long terme. |
Avertissement | 3 | Les journaux qui mettent en évidence un événement anormal ou inattendu dans le workflow de l’application, mais ne provoquent pas l’arrêt de l’exécution de l’application. |
Error | 4 | Les journaux qui surveillent le moment où le flux actuel de l’exécution est arrêté en raison d’un échec. Ces erreurs doivent indiquer un échec dans l’activité en cours, et non un échec sur l’ensemble de l’application. |
Critique | 5 | Journaux qui décrivent un plantage irrécupérable de l’application ou du système, ou une défaillance catastrophique nécessitant une attention immédiate. |
None | 6 | Désactive la journalisation pour la catégorie spécifiée. |
La configuration du fichier host.json détermine la quantité de journalisation qu’une application de fonction envoie à Application Insights.
Pour chaque catégorie, vous indiquez le niveau de journal minimal à envoyer. Les paramètres host.json varient en fonction de la version du runtime Functions.
Les exemples suivants définissent la journalisation en fonction des règles suivantes :
- Le niveau de journalisation par défaut est défini sur
Warning
pour éviter une journalisation excessive pour les catégories non anticipées. Host.Aggregator
etHost.Results
sont définis sur des niveaux inférieurs. La définition de niveaux de journalisation trop élevés, en particulier des niveaux supérieurs àInformation
, peut entraîner la perte de métriques et de données de performances.- La journalisation des exécutions de fonction est définie sur
Information
. Si nécessaire, vous pouvez remplacer ce paramètre dans le développement local parDebug
ouTrace
.
{
"logging": {
"fileLoggingMode": "debugOnly",
"logLevel": {
"default": "Warning",
"Host.Aggregator": "Trace",
"Host.Results": "Information",
"Function": "Information"
}
}
}
Si host.json inclut plusieurs journaux qui commencent par la même chaîne, les journaux les plus définis sont traités en priorité. Prenons l’exemple suivant qui journalise tout dans le runtime, à l’exception de Host.Aggregator
, au niveau de Error
:
{
"logging": {
"fileLoggingMode": "debugOnly",
"logLevel": {
"default": "Information",
"Host": "Error",
"Function": "Error",
"Host.Aggregator": "Information"
}
}
}
Vous pouvez utiliser un paramètre de niveau de journalisation None
pour empêcher l’écriture de journaux pour une catégorie.
Attention
Azure Functions s’intègre à Application Insights en stockant les événements de télémétrie dans les tables Application Insights. Si vous définissez un niveau de journalisation de catégorie sur une valeur différente de Information
, les données de télémétrie ne peuvent pas être acheminées vers ces tables, ce qui vous empêche de voir les données associées sous les onglets Application Insights et Moniteur de fonction.
Par exemple, pour les exemples précédents :
- Si vous définissez la catégorie
Host.Results
sur le niveau de journalisationError
, Azure collecte uniquement les événements de télémétrie d’exécution de l’hôte dans la tablerequests
pour les exécutions de fonctions ayant échoué, empêchant ainsi l’affichage des détails des exécutions de l’hôte ayant réussi sous les onglets Application Insights et Moniteur de fonction. - Si vous définissez la catégorie
Function
sur le niveau de journalisationError
, elle cesse de collecter les données de télémétrie des fonctions liées àdependencies
,customMetrics
etcustomEvents
pour toutes les fonctions, ce qui vous empêche de voir ces données dans Application Insights. Azure rassemble uniquement lestraces
journalisés au niveauError
.
Dans les deux cas, Azure continue de collecter les données des erreurs et des exceptions sous les onglets Application Insights et Moniteur de fonction. Pour plus d’informations, consultez Solutions avec un volume élevé de télémétrie.
Configurer le paramètre d’agrégation
Comme indiqué dans la section précédente, le runtime agrège les données sur les exécutions de fonction sur une période de temps. La période par défaut est 30 secondes ou 1 000 exécutions, selon la première de ces éventualités. Vous pouvez configurer ce paramètre dans le fichier host.json. Par exemple :
{
"aggregator": {
"batchSize": 1000,
"flushTimeout": "00:00:30"
}
}
Configurer l’échantillonnage
Application Insights présente une fonctionnalité d’échantillonnage qui peut vous éviter de produire une quantité excessive de données de télémétrie portant sur les exécutions terminées aux heures de forte activité. Lorsque le taux d'exécutions entrantes dépasse un seuil spécifié, Application Insights commence à ignorer de manière aléatoire certaines exécutions entrantes. Par défaut, le nombre maximal d’exécutions par seconde est fixé à 20 (cinq dans la version 1.x). Vous pouvez configurer l’échantillonnage dans host.json. Voici un exemple :
{
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"maxTelemetryItemsPerSecond" : 20,
"excludedTypes": "Request;Exception"
}
}
}
}
Vous pouvez exclure certains types de données de télémétrie de l’échantillonnage. Dans cet exemple, les données de type Request
et Exception
sont exclues de l’échantillonnage. Cela garantit que toutes les exécutions de fonction (requêtes) et les exceptions sont journalisées, les autres types de données de télémétrie restant soumis à l’échantillonnage.
Si votre projet utilise une dépendance sur le kit de développement logiciel (SDK) Application Insights pour effectuer un suivi télémétrique manuel, vous constaterez peut-être un comportement inhabituel si votre configuration d’échantillonnage diffère de celle dans votre application de fonction. Dans ce cas, utilisez la même configuration d’échantillonnage que l’application de fonction. Pour plus d’informations, consultez l’article Échantillonnage dans Application Insights.
Activer la collection de requêtes SQL
Application Insights collecte automatiquement des données sur les dépendances pour les requêtes HTTP, les appels de base de données et pour plusieurs liaisons. Pour plus d’informations, consultez Dépendances. Pour les appels SQL, le nom du serveur et de la base de données est toujours collecté et stocké, mais le texte de requête SQL n’est pas collecté par défaut. Vous pouvez utiliser dependencyTrackingOptions.enableSqlCommandTextInstrumentation
pour activer la journalisation du texte des requêtes SQL en utilisant les paramètres suivants (au minimum) dans votre fichier host.json :
"logging": {
"applicationInsights": {
"enableDependencyTracking": true,
"dependencyTrackingOptions": {
"enableSqlCommandTextInstrumentation": true
}
}
}
Pour plus d’informations, consultez Suivi SQL avancé pour obtenir une requête SQL complète.
Configurer les journaux de contrôleur d’échelle
Cette fonctionnalité est en préversion.
Vous pouvez faire en sorte que le contrôleur d’échelle Azure Functions émette des journaux vers Application Insights ou vers le stockage Blob pour mieux comprendre les décisions prises par ce contrôleur pour votre application de fonction.
Pour activer cette fonctionnalité, ajoutez un paramètre d’application nommé SCALE_CONTROLLER_LOGGING_ENABLED
à vos paramètres d’application de fonction. La valeur suivante du paramètre doit être au format <DESTINATION>:<VERBOSITY>
. Pour plus d’informations, voir le tableau suivant :
Propriété | Description |
---|---|
<DESTINATION> |
Destination à laquelle les journaux sont envoyés. Les valeurs valides sont AppInsights et Blob .Quand vous utilisez AppInsights , assurez-vous qu’Application Insights est activé dans votre application de fonction.Quand vous affectez Blob comme destination, les journaux sont créés dans un conteneur d’objets blob nommé azure-functions-scale-controller dans le compte de stockage par défaut défini dans le paramètre d’application AzureWebJobsStorage . |
<VERBOSITY> |
Spécifie le niveau de journalisation. Les valeurs prises en charge sont None , Warning et Verbose .Quand il est défini sur Verbose , le contrôleur de mise à l’échelle enregistre une raison pour chaque modification du nombre de Workers, et des informations sur les déclencheurs pris en compte dans ces décisions. Les journaux détaillés incluent les avertissements de déclencheur et les hachages utilisés par les déclencheurs avant et après l’exécution du contrôleur de mise à l’échelle. |
Conseil
Gardez à l’esprit que, lorsque vous laissez l’option de journalisation du contrôleur de mise à l’échelle activée, cela a un impact sur les coûts potentiels de surveillance de votre application de fonction. Envisagez d’activer la journalisation jusqu’à ce que vous ayez collecté suffisamment de données pour comprendre le comportement du contrôleur de mise à l’échelle, puis de la désactiver.
Par exemple, la commande Azure CLI suivante active la journalisation détaillée à partir du contrôleur de mise à l’échelle pour Application Insights :
az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:Verbose
Dans cet exemple, remplacez <FUNCTION_APP_NAME>
et <RESOURCE_GROUP_NAME>
par le nom de votre application de fonction et le nom du groupe de ressources, respectivement.
La commande Azure CLI suivante désactive la journalisation en définissant le niveau de détail sur None
:
az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:None
Vous pouvez également désactiver la journalisation en supprimant le paramètre SCALE_CONTROLLER_LOGGING_ENABLED
à l’aide de la commande Azure CLI suivante :
az functionapp config appsettings delete --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--setting-names SCALE_CONTROLLER_LOGGING_ENABLED
Une fois la journalisation du contrôleur d’échelle activée, vous pouvez interroger vos journaux de contrôleur d’échelle.
Activer l’intégration à Application Insights
Pour qu’une application de fonction envoie des données à Application Insights, elle doit se connecter à la ressource Application Insights à l’aide d’un seul de ces paramètres d’application :
Nom du paramètre | Description |
---|---|
APPLICATIONINSIGHTS_CONNECTION_STRING |
Ce paramètre est recommandé et obligatoire lorsque votre instance Application Insights s’exécute dans un cloud souverain. La chaîne de connexion prend en charge d’autres nouvelles fonctionnalités. |
APPINSIGHTS_INSTRUMENTATIONKEY |
Paramètre hérité, déconseillé par Application Insights en faveur du paramètre de chaîne de connexion. |
Lorsque vous créez votre application de fonction dans le Portail Azure, à partir de la ligne de commande avec Azure Functions Core Tools, ou Visual Studio Code, l’intégration d’Application Insights est activée par défaut. La ressource Application Insights porte le même nom que votre application de fonction et est créée dans la même région ou la région la plus proche.
Exiger l’authentification Microsoft Entra
Vous pouvez utiliser le paramètre APPLICATIONINSIGHTS_AUTHENTICATION_STRING
pour activer les connexions à Application Insights à l’aide de l’authentification Microsoft Entra. Cela crée une expérience d’authentification cohérente dans tous les pipelines Application Insights, notamment Profiler et Débogueur de capture instantanée, ainsi qu’à partir de l’hôte Functions et des agents spécifiques à une langue.
Remarque
Il n’existe aucune prise en charge de l’authentification Entra pour le développement local.
La valeur contient Authorization=AAD
pour une identité managée affectée par le système ou ClientId=<YOUR_CLIENT_ID>;Authorization=AAD
pour une identité managée affectée par l’utilisateur. L’identité managée doit déjà être disponible pour l’application de fonction avec un rôle affecté équivalent à Éditeur d’indicateurs de performance d’analyse. Pour plus d’informations, consultez Authentification Microsoft Entra pour Application Insights.
Le paramètre APPLICATIONINSIGHTS_CONNECTION_STRING
est encore obligatoire.
Remarque
Lorsque vous utilisez APPLICATIONINSIGHTS_AUTHENTICATION_STRING
pour vous connecter à Application Insights au moyen de l’authentification Microsoft Entra, vous devez également désactiver l’authentification locale pour Application Insights. Cette configuration nécessite une authentification Microsoft Entra pour une ingestion de la télémétrie dans votre espace de travail.
Nouvelle application de fonction dans le portail
Pour examiner la ressource Application Insights en cours de création, sélectionnez-la de manière à développer la fenêtre Application Insights. Vous pouvez modifier le Nouveau nom de ressource ou sélectionner un autre Emplacement dans une Zone géographique Azure où vous souhaitez stocker vos données.
Lorsque vous sélectionnez Créer, une ressource Application Insights est créée avec votre application de fonction, et APPLICATIONINSIGHTS_CONNECTION_STRING
est défini dans les paramètres de l’application. Tout est prêt.
Ajouter à une application de fonction existante
Si une ressource Application Insights n’a pas été créée avec votre application de fonction, procédez comme suit pour créer la ressource. Vous pouvez ensuite ajouter la chaîne de connexion de cette ressource en tant que paramètre d’application dans votre application de fonction.
Dans le Portail Azure, recherchez et sélectionnez Application de fonction, puis sélectionnez votre application de fonction.
Sélectionnez la bannière Application Insights n'est pas configuré en haut de la fenêtre. Si vous ne voyez pas cette bannière, cela signifie que votre application a probablement déjà Application Insights activé.
Développez Changer votre ressource et créez une ressource Application Insights en utilisant les paramètres spécifiés dans le tableau suivant :
Paramètre Valeur suggérée Description Nouveau nom de la ressource Nom d’application unique Il est plus facile d’utiliser le même nom que celui de votre application de fonction, qui doit être unique dans votre abonnement. Lieu Europe Ouest Si possible, utilisez la même région que celle de votre application de fonction ou une région proche. Sélectionnez Appliquer.
La ressource Application Insights est créée dans le même groupe de ressources et le même abonnement que votre application de fonction. Une fois la ressource créée, fermez la fenêtre Application Insights.
Dans votre application de fonction, développez Paramètres, puis sélectionnez Variables d’environnement. Sous l’onglet Paramètres de l’application, si vous voyez un paramètre d’application nommé
APPLICATIONINSIGHTS_CONNECTION_STRING
, cela signifie que l’intégration d’Application Insights est activée pour votre application de fonction s’exécutant dans Azure. S ce paramètre n’existe pas, ajoutez-le en utilisant votre chaîne de connexion Application Insights comme valeur.
Remarque
Les applications de fonction plus anciennes peuvent utiliser APPINSIGHTS_INSTRUMENTATIONKEY
à la place de APPLICATIONINSIGHTS_CONNECTION_STRING
. Si possible, mettez à jour votre application pour utiliser la chaîne de connexion au lieu de la clé d’instrumentation.
Désactiver la journalisation intégrée
Les premières versions de Functions utilisaient la surveillance intégrée, ce qui n’est plus recommandé. Lorsque vous activez Application Insights, désactivez la journalisation intégrée qui utilise le Stockage Azure. La journalisation intégrée permet de tester des charges de travail légères, mais n'a pas vocation à être utilisée en production avec des charges importantes. Nous recommandons Application Insights à des fins de surveillance de la production. Si vous utilisez la journalisation intégrée en production, l’enregistrement de journalisation peut être incomplet en raison d’une limitation sur Stockage Azure.
Pour désactiver la journalisation intégrée, supprimez le paramètre d’application AzureWebJobsDashboard
. Pour plus d’informations sur la suppression de paramètres d’application dans le Portail Azure, consultez la section Paramètres de l’application dans Comment gérer une application de fonction dans le Portail Azure. Avant de supprimer le paramètre d’application, assurez-vous qu’aucune fonction existante dans la même application de fonction ne l’utilise pour les déclencheurs ou les liaisons du Stockage Azure.
Solutions avec un volume élevé de télémétrie
Les applications de fonction constituent une partie essentielle des solutions pouvant engendrer des volumes élevés de données de télémétrie. Citons par exemple les solutions IoT, les solutions rapides pilotées par les événements, les systèmes financiers à haute charge et les systèmes d’intégration. Dans ce cas, vous devez envisager une configuration supplémentaire pour réduire les coûts tout en conservant l’observabilité.
Les données de télémétrie générées peuvent être consommées dans des tableaux de bord en temps réel, des alertes, des diagnostics détaillés, et ainsi de suite. En fonction de la manière dont les données de télémétrie générées sont consommées, vous devez définir une stratégie pour réduire le volume des données générées. Cette stratégie vous permet de monitorer, d’exploiter et de diagnostiquer correctement vos applications de fonction en production. Considérez les options suivantes :
Utiliser l’échantillonnage : comme indiqué précédemment, l’échantillonnage permet de réduire considérablement le volume d’événements de télémétrie ingérés tout en conservant une analyse statistiquement correcte. Il peut arriver que, même en utilisant l’échantillonnage, vous obteniez quand même un volume élevé de télémétrie. Inspectez les options que vous fournit l’échantillonnage adaptatif. Par exemple, définissez
maxTelemetryItemsPerSecond
sur une valeur qui équilibre le volume généré avec vos besoins de supervision. Gardez à l’esprit que l’échantillonnage de télémétrie est appliqué par hôte exécutant votre application de fonction.Niveau de journalisation par défaut : utilisez
Warning
ouError
comme valeur par défaut pour toutes les catégories de télémétrie. Plus tard, vous pourrez choisir les catégories à définir au niveauInformation
pour monitorer et diagnostiquer correctement vos fonctions.Régler la télémétrie de vos fonctions : si le niveau de journalisation par défaut est défini sur
Error
ouWarning
, aucune information détaillée de chaque fonction n’est collectée (dépendances, métriques personnalisées, événements personnalisés et traces). Pour les fonctions essentielles au monitoring de la production, définissez une entrée explicite pour la catégorieFunction.<YOUR_FUNCTION_NAME>
et affectez-lui la valeurInformation
afin de pouvoir collecter des informations détaillées. Pour éviter de collecter les journaux générés par les utilisateurs au niveauInformation
, définissez la catégorieFunction.<YOUR_FUNCTION_NAME>.User
sur le niveau de journalisationError
ouWarning
.Catégorie Host.Aggregator : comme décrit dans la section Configurer des catégories, cette catégorie fournit des informations agrégées sur les appels de fonction. Les informations de cette catégorie sont collectées dans la table
customMetrics
d’Application Insights et sont affichées sous l’onglet Vue d’ensemble de la fonction dans le Portail Azure. Selon le mode de configuration de l’agrégateur, considérez qu’il peut y avoir un retard, déterminé par le paramètreflushTimeout
, dans la télémétrie collectée. Si vous définissez cette catégorie sur une valeur différente deInformation
, la collecte des données dans la tablecustomMetrics
est arrêtée et les métriques ne sont pas affichées sous l’onglet Vue d’ensemble de la fonction.La capture d’écran suivante montre les données de télémétrie
Host.Aggregator
affichées sous l’onglet Vue d’ensemble de la fonction :La capture d’écran suivante montre les données de télémétrie
Host.Aggregator
dans la tablecustomMetrics
d’Application Insights :Catégorie Host.Results : comme décrit dans Configurer des catégories, cette catégorie fournit les journaux générés par le runtime qui indiquent la réussite ou l’échec d’un appel de fonction. Les informations de cette catégorie sont collectées dans la table
requests
d’Application Insights et affichées sous l’onglet Moniteur de la fonction et dans différents tableaux de bord Application Insights (Performances, Défaillances, etc.). Si vous définissez cette catégorie sur une valeur différente deInformation
, vous collectez uniquement les données de télémétrie générées au niveau du journal défini (ou supérieur). Par exemple, le fait de le définir surerror
génère des données de suivi des demandes uniquement pour les exécutions ayant échoué.La capture d’écran suivante montre les données de télémétrie
Host.Results
affichées sous l’onglet Moniteur de la fonction :La capture d’écran suivante montre les données de télémétrie
Host.Results
affichées dans le tableau de bord Performances d’Application Insights :Host.Aggregator et Host.Results : les deux catégories fournissent de bons insights sur les exécutions de fonction. Si nécessaire, vous pouvez supprimer les informations détaillées de l’une de ces catégories, afin de pouvoir utiliser l’autre pour la supervision et les alertes. Voici un exemple :
{
"version": "2.0",
"logging": {
"logLevel": {
"default": "Warning",
"Function": "Error",
"Host.Aggregator": "Error",
"Host.Results": "Information",
"Function.Function1": "Information",
"Function.Function1.User": "Error"
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"maxTelemetryItemsPerSecond": 1,
"excludedTypes": "Exception"
}
}
}
}
Avec cette configuration :
La valeur par défaut pour toutes les catégories de fonctions et de télémétrie est définie sur
Warning
(dont les catégories Microsoft et Worker). Ainsi, par défaut, toutes les erreurs et avertissements générés par le runtime et la journalisation personnalisée sont collectés.Le niveau de journalisation de la catégorie
Function
est défini surError
. Ainsi, pour toutes les fonctions, seuls les exceptions et les journaux d’erreurs sont collectés par défaut. Les dépendances, métriques générées par l’utilisateur et événements générés par l’utilisateur sont ignorés.Pour la catégorie
Host.Aggregator
, étant donné qu’elle est définie sur le niveau de journalisationError
, les informations agrégées provenant des appels de fonction ne sont pas collectées dans la tablecustomMetrics
d’Application Insights, et les informations sur le nombre d’exécutions (total, réussies et ayant échoué) ne sont pas affichées dans le tableau de bord Vue d’ensemble de la fonction.Pour la catégorie
Host.Results
, toutes les informations d’exécution de l’hôte sont collectées dans la tablerequests
d’Application Insights. Tous les résultats des appels sont affichés dans le tableau de bord Moniteur de la fonction et dans les tableaux de bord Application Insights.Pour la fonction appelée
Function1
, nous définissons le niveau de journalisation surInformation
. Pour cette fonction concrète, toute la télémétrie soit collectée (dépendance, métriques personnalisées, événements personnalisés). Pour la même fonction, nous définissons la catégorieFunction1.User
(traces générées par l’utilisateur) surError
, de sorte que seule la journalisation des erreurs personnalisée est collectée.Remarque
La configuration par fonction n’est pas prise en charge dans la version 1.x du runtime Functions.
L’échantillonnage est configuré pour envoyer un élément de télémétrie par seconde et par type, en excluant les exceptions. Cet échantillonnage se produit pour chaque hôte de serveur exécutant notre application de fonction. Par conséquent, si nous avons quatre instances, cette configuration émet quatre éléments de télémétrie par seconde et par type et toutes les exceptions qui peuvent se produire.
Remarque
Les données de mesure telles que le taux de demandes et le taux d’exceptions sont ajustées pour compenser le taux d’échantillonnage, afin qu’elles affichent des valeurs approximativement correctes dans Metrics Explorer.
Conseil
Faites des essais avec des configurations différentes pour vérifier que vous respectez vos exigences concernant la journalisation, la supervision et les alertes. Vérifiez également que vous disposez de diagnostics détaillés en cas d’erreurs inattendues ou de dysfonctionnements.
Remplacement de la configuration de la supervision au moment de l’exécution
Enfin, il peut arriver que vous deviez modifier rapidement le comportement de journalisation d’une certaine catégorie en production et que vous ne vouliez pas effectuer un déploiement complet uniquement pour un changement apporté au fichier host.json. Dans ce cas, vous pouvez remplacer les valeurs host.json.
Pour configurer ces valeurs au niveau des paramètres de l’application (et éviter le redéploiement uniquement sur les changements apportés à host.json), vous devez remplacer des valeurs host.json
spécifiques en créant une valeur équivalente comme paramètre d’application. Quand le runtime trouve un paramètre d’application au format AzureFunctionsJobHost__path__to__setting
, il remplace le paramètre host.json
équivalent situé sur path.to.setting
dans le fichier code JSON. Quand il est exprimé sous la forme d’un paramètre d’application, un double trait de soulignement (__
) remplace le point (.
) utilisé pour indiquer la hiérarchie JSON. Par exemple, vous pouvez utiliser les paramètres d’application suivants pour configurer des niveaux de journalisation de fonctions individuels dans host.json
.
Chemin de host.json | Paramètre d’application |
---|---|
logging.logLevel.default | AzureFunctionsJobHost__logging__logLevel__default |
logging.logLevel.Host.Aggregator | AzureFunctionsJobHost__logging__logLevel__Host.Aggregator |
logging.logLevel.Function | AzureFunctionsJobHost__logging__logLevel__Function |
logging.logLevel.Function.Function1 | AzureFunctionsJobHost__logging__logLevel__Function.Function1 |
logging.logLevel.Function.Function1.User | AzureFunctionsJobHost__logging__logLevel__Function.Function1.User |
Vous pouvez remplacer les paramètres directement dans le panneau Configuration de l’application de fonction du Portail Azure ou à l’aide d’un script Azure CLI ou PowerShell.
az functionapp config appsettings set --name MyFunctionApp --resource-group MyResourceGroup --settings "AzureFunctionsJobHost__logging__logLevel__Host.Aggregator=Information"
Notes
Si vous remplacez host.json
en changeant les paramètres de l’application, votre application de fonction redémarre.
Les paramètres d’application qui contiennent une période ne sont pas pris en charge lorsqu’ils sont exécutés sur Linux dans un plan Elastic Premium ou un plan dédié (App Service). Dans ces environnements d’hébergement, vous devez continuer à utiliser le fichier host.json.
Superviser les applications de fonction en utilisant le contrôle d’intégrité
Vous pouvez utiliser la fonctionnalité Contrôle d’intégrité pour monitorer les applications de fonction dans le cadre des plans Premium (Elastic Premium) et Dédié (App Service). Le contrôle d’intégrité n’est pas une option pour le plan Consommation. Pour savoir comment le configurer, consultez Superviser des instances App Service à l’aide du contrôle d’intégrité. Votre application de fonction doit avoir une fonction de déclencheur HTTP qui répond avec un code d’état HTTP de 200 sur le même point de terminaison que celui configuré sur le paramètre Path
du contrôle d’intégrité. Vous pouvez également faire en sorte que cette fonction effectue des vérifications supplémentaires pour vous assurer que les services dépendants sont accessibles et fonctionnent.
Contenu connexe
Pour plus d'informations sur la surveillance, consultez :