Les métriques au niveau des requêtes offrent une visibilité approfondie sur chaque invocation de fonction et vous aident à comprendre les performances de vos fonctions. Exploitez ces métriques pour détecter et localiser rapidement les problèmes, ainsi que pour analyser les goulots d'étranglement de vos applications. Activez les métriques au niveau des requêtes afin de mieux gérer et optimiser vos applications de fonctions.
Présentation des métriques au niveau des requêtes
Les métriques au niveau des requêtes résument l'état d'exécution de chaque requête de fonction. Une fois activées, le système collecte des métriques pour chaque exécution de fonction (performances, exceptions et traçage) et les transmet au Logstore sélectionné lors de la configuration des journaux.
Métriques de performance : utilisation de la mémoire, durée d'exécution de la fonction, temps d'initialisation, informations sur le démarrage à froid, etc.
Métriques d'exception : échec ou non de l'exécution et détails de l'erreur.
Métriques de traçage : durée d'exécution du chemin critique, activation ou non de l'échantillonnage du traçage distribué, et pour les fonctions HTTP, le chemin, le code de statut et l'adresse IP du client.
Après l'activation des métriques au niveau des requêtes, Function Compute transmet les métriques d'exécution de chaque requête à votre Logstore selon le format suivant.
activeInstances: 0
activeInstancesPerFunction: 0
durationMs: 1.56
functionName: sync-clone
hasFunctionError: false
hostname: sr-65a76c74-1224f354965f43a...
instanceID: c-65a77eb0-15416274-ff5addb...
invocationStartTimestamp: 1705476027407
invocationType: Sync
invokeFunctionLatencyMs: 2.92
invokeFunctionStartTimestamp: 1705476027406
ipAddress: 21.0
isColdStart: false
memoryMB: 512
memoryUsageMB: 8.99
operation: InvokeFunction
qualifier: LATEST
requestId: 1-65a77fbb-157f3f32-e1ee24b17e49
resourceMode: OnDemand
Cas d'usage
-
Consultez les détails d'exécution des fonctions, les métriques de performance et les informations d'erreur grâce aux métriques de requête.
La console fournit une liste de requêtes basée sur les métriques au niveau des requêtes. Cette interface permet de consulter les informations détaillées de chaque requête, notamment l'état d'exécution, l'ID d'instance, la durée d'exécution, l'utilisation de la mémoire et les journaux de requête.
Dans l'onglet Logs de la page de détails de la fonction, sélectionnez le sous-onglet Invocation Requests pour afficher la liste des requêtes. Les filtres situés au-dessus de la liste incluent Show logs only for the current version or alias, Show only function errors, Show only client errors et Show only cold start requests.
RemarqueVous pouvez consulter la liste des requêtes sans activer les métriques au niveau des requêtes, mais elle peut s'avérer inexacte dans les scénarios suivants.
Lorsque plusieurs RequestIds identiques apparaissent de manière répétée (cas fréquent lors des tentatives de nouvelle invocation asynchrone), il est impossible de localiser les journaux d'une requête spécifique.
Dans les environnements d'exécution personnalisés ou d'image personnalisée, si votre code imprime à la fois
FC Invoke Start RequestId: xxxetFC Invoke End RequestId: xxx, une seule invocation apparaît deux fois dans la liste des requêtes.
-
Exploitez les métriques de requête pour effectuer des recherches personnalisées et créer des tableaux de bord sur mesure.
Les métriques de requête sont transmises à votre Logstore au format
key:val. Créez des tableaux de bord personnalisés en fonction de vos besoins métier. Pour plus d'instructions, consultez Créer un tableau de bord.
Remarques
-
Périmètre
Les journaux des métriques au niveau des requêtes constituent une configuration au niveau de la fonction. Une fois activés, ils s'appliquent à la fonction actuelle et chaque exécution génère une entrée de journal.
-
Coût
La transmission des journaux vers Simple Log Service entraîne des frais de stockage. Pour plus de détails sur les tarifs, consultez Tarification.
Activer les métriques au niveau des requêtes
Activer les métriques au niveau des requêtes dans la console
Prérequis
-
Function Compute
-
Simple Log Service (SLS)
Procédure
Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, sélectionnez .
Dans la barre de menu supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.
Sur la page de configuration de la fonction, sélectionnez l'onglet Configuration.
-
Localisez Advanced Settings et cliquez sur Modify à droite. Dans le panneau Advanced Configuration, accédez à la section Logging, activez Instance-level Metrics, puis cliquez sur Deploy.
Le tableau suivant décrit les éléments de configuration clés. Conservez les valeurs par défaut pour tous les autres paramètres.
Élément de configuration
Description
Exemple de valeur
Logging
Indique si les journaux d'invocation de fonction doivent être stockés dans Simple Log ServiceSLS. Pour plus d'informations, consultez Configurer la journalisation.
Enabled
Log project
Sélectionnez un projet de journal existant.
aliyun-fc-hangzhou-2238f0df-a742-524f-9f90-976ba*******
Logstore
Sélectionnez un Logstore existant.
function-log
Log segmentation rule
Indique si la segmentation des journaux doit être activée. Si cette option est activée, Function Compute divise les journaux en plusieurs segments selon la règle définie et écrit chaque segment dans SLS.
Enabled
Request-level metrics
Indique si les métriques au niveau des requêtes doivent être collectées. Si cette option est activée, les métriques de chaque invocation de fonction sont collectées et transmises au Logstore spécifié dans la configuration des journaux.
Enabled
Instance-level metrics
Indique si les métriques au niveau des instances doivent être activées. Si cette option est activée, les métriques d'instance sont transmises au Logstore spécifié dans la configuration des journaux.
Enabled
Activer les métriques au niveau des requêtes avec Serverless Devs
Prérequis
Procédure
-
Créez un répertoire de code avec la structure suivante.
. ├── code │ └── index.js └── s.yamlDans cet exemple, le champ enableRequestMetrics configure les métriques au niveau des requêtes. Avant de l'activer, assurez-vous d'abord d'activer la journalisation et de définir logstore et project sur un Logstore et un projet de journal existants dans votre compte.
edition: 3.0.0 name: hello-world-app access: "default" vars: # Global variables region: "cn-hangzhou" resources: hello_world: component: fc3 # Component name props: region: ${vars.region} functionName: "start-nodejs-****" description: 'hello world by serverless devs' runtime: "nodejs16" code: ./code handler: index.handler memorySize: 128 timeout: 30 logConfig: # Update logstore and project to match your setup. Alternatively, use logConfig:auto to auto-create them. enableInstanceMetrics: true enableRequestMetrics: true # Enable request-level metrics to collect execution metrics for every invocation logBeginRule: DefaultRegex logstore: 'your-logstore' project: 'your-project' -
Exécutez la commande suivante pour déployer l'application.
sudo s deploy -yUne fois le déploiement réussi, connectez-vous à la console Function Compute pour confirmer que les métriques au niveau des requêtes sont bien activées pour votre fonction déployée.
Interrogation des journaux
Format des journaux
Les journaux des métriques au niveau des requêtes utilisent le format de sujet : FCRequestMetrics:/functionName. Dans Simple Log Service, utilisez la condition de requête __topic__: "FCRequestMetrics:/functionName" pour filtrer tous les journaux des métriques au niveau des requêtes. Pour plus d'informations, consultez Guide rapide d'interrogation et d'analyse.
Champs de métriques
Les métriques au niveau des requêtes enregistrent les informations suivantes.
|
Nom de la métrique |
Description |
Exemple de valeur |
Enregistré pour chaque invocation ? |
|
functionName |
Nom de la fonction. |
my-function |
Oui |
|
versionId |
Nom de la version. |
12 |
Oui |
|
qualifier |
Alias du service. La valeur par défaut est LATEST. |
prod |
Oui |
|
requestId |
ID de la requête. |
db72ce53-ccbe-4216-af55-642622e01494 |
Oui |
|
operation |
Nom de l'action. |
InvokeFunction |
Oui |
|
invocationType |
Deux types d'appels existent. Sync : appel synchrone Async : invocation asynchrone |
Sync |
Oui |
|
memoryMB |
Limite de mémoire de la fonction. |
512 |
Oui |
|
memoryUsageMB |
Mémoire consommée lors de l'exécution de la fonction. |
410 |
Oui |
|
durationMs |
Temps d'exécution de la requête. |
20.20 |
Oui |
|
isColdStart |
Indique s'il s'agit d'un démarrage à froid. Remarque
Un démarrage à froid se produit lorsque Function Compute reçoit une requête mais ne dispose d'aucune instance de fonction prête à la traiter. Le système doit alors créer une nouvelle instance, télécharger le code et initialiser l'environnement d'exécution. Une requête de démarrage à froid est définie comme une requête qui suit l'intégralité du processus de création d'instance, de téléchargement du code et d'initialisation de l'environnement d'exécution. Function Compute optimise les démarrages à froid en préchauffant les instances. Si une requête arrive pendant la création d'une instance et trouve une instance préchauffée disponible, elle n'est pas considérée comme un démarrage à froid. |
false |
Oui |
|
instanceEvent |
Événement d'instance. Actuellement limité à ColdStart, enregistré uniquement pour les requêtes de démarrage à froid. |
ColdStart |
Non |
|
hasFunctionError |
Indique si l'exécution de la fonction a rencontré une erreur. |
false |
Oui |
|
errorType |
Les erreurs de fonction se classent en trois types :
|
FunctionUnhandledError |
Non. Enregistré uniquement lorsque |
|
invokeFunctionLatencyMs |
Temps d'exécution de la fonction. |
99.00 |
Oui. Enregistré pour chaque invocation. |
|
traceContext |
Contexte de traçage distribué. |
371d3ff242fcee9:371d3ff242fcee9:0:1 |
Non. Enregistré uniquement lorsque le traçage distribué est configuré. |
|
isSampled |
Indique si la requête a été échantillonnée pour le traçage distribué. |
true |
Non. Enregistré uniquement lorsque le traçage distribué est configuré. |
|
resourceMode |
Type d'instance utilisé pour la requête :
|
OnDemand |
Oui |
|
instanceID |
ID de l'instance. |
c-65603d8c-37e1bf7123054a77**** |
Oui |
|
hostname |
Nom d'hôte de l'instance. |
c-65603d8c-37e1bf7123054a77**** |
Oui |
|
ipAddress |
Adresse IP de l'instance. Remarque : Il s'agit de l'adresse IP interne utilisée pour distinguer les instances, et non de l'adresse IP publique. |
21.0.XX.XX |
Oui |
|
activeInstances |
Nombre d'instances actives. |
1 |
Oui |
|
activeInstancesPerFunction |
Nombre d'instances actives pour cette fonction. |
1 |
Oui |
|
scheduleLatencyMs |
Latence de planification. Plus élevée lors des démarrages à froid. |
10.07 |
Oui |
|
coldStartStartTimestamp |
Horodatage de début du démarrage à froid. |
1700806029167 |
Non. Enregistré uniquement lors des démarrages à froid. |
|
coldStartLatencyMs |
Durée du démarrage à froid. |
487.65 |
Non. Enregistré uniquement lors des démarrages à froid. |
|
prepareCodeStartTimestamp |
Horodatage de début du téléchargement du code. Horodatage UNIX à 13 chiffres, précision en millisecondes. |
1700806029167 |
Non. Enregistré uniquement lors des démarrages à froid. |
|
prepareCodeLatencyMs |
Durée du téléchargement du code. |
0.18 |
Non. Enregistré uniquement lors des démarrages à froid. |
|
runtimeInitializationStartTimestamp |
Horodatage de début de l'initialisation de l'environnement d'exécution. |
1700806029168 |
Non. Enregistré uniquement lors des démarrages à froid. |
|
runtimeInitializationMs |
Durée de l'initialisation de l'environnement d'exécution. |
487.37 |
Non. Enregistré uniquement lors des démarrages à froid. |
|
asyncAttemptStartTimestamp |
Pour les invocations asynchrones, les exécutions ayant échoué font l'objet de 3 tentatives par défaut. Ce paramètre correspond à l'horodatage de début de la ${retryCount}-ième tentative. |
1700806028084 |
Non. Enregistré uniquement pour les invocations asynchrones. |
|
asyncAttemptLatencyMs |
Pour les invocations asynchrones, les exécutions ayant échoué font l'objet de 3 tentatives par défaut. Ce paramètre correspond à la durée de la ${retryCount}-ième tentative. |
1688.74 |
Non. Enregistré uniquement pour les invocations asynchrones. |
|
asyncMode |
Mode d'invocation asynchrone :
|
Stateful |
Non. Enregistré uniquement pour les invocations asynchrones. |
|
retryCount |
Nombre de tentatives. |
0 |
Non. Enregistré uniquement pour les invocations asynchrones. |
Récupérer les journaux
La récupération des journaux nécessite des index. La console Function Compute configure automatiquement ces index pour vous. Une fois l'indexation terminée, utilisez des instructions SQL dans la console Simple Log Service pour rechercher et filtrer les requêtes dans votre Logstore. Spécifiez le sujet pour limiter les résultats aux journaux des métriques au niveau des requêtes.
Par exemple, pour trouver les requêtes dont le temps d'exécution dépasse 1 seconde, utilisez cette instruction SQL.
__topic__: "FCRequestMetrics:/f1" AND qualifier: q1 and operation: InvokeFunction and durationMs>1000
Pour plus d'informations sur la syntaxe de requête avancée, consultez Guide rapide d'interrogation et d'analyse.
Créer un tableau de bord personnalisé
Pour créer un graphique avec le temps (t) sur l'axe des abscisses et les valeurs de métriques sur l'axe des ordonnées, utilisez une instruction SQL similaire à celle-ci.
__topic__: "FCRequestMetrics:/f1" AND qualifier: q1 and operation: InvokeFunction | select __time__ - __time__ % 60 as t, count(*) as invocations, avg(durationMs) as avgDurationMs group by t order by t
Pour plus d'informations sur la création de tableaux de bord personnalisés, consultez Créer un tableau de bord.