Transactions
Les transactions sont capturées sous forme de Web de transactions qui sont nommées en fonction des opérations GraphQL exécutées. Les détails suivants sont utilisés pour regrouper les représentations de requête uniques : type d’opération, nom de l’opération et chemin unique le plus profond.
La représentation brute d’une transaction ressemble à ce qui suit : {operation_type}/{operation_name}/{deepest_unique_path}
En utilisant cet exemple de requête :
query { libraries { books { title author { name } } }}
La transaction dans l'UI s'affichera finalement de la manière suivante : query/<anonymous>/libraries.books
Détails
Type d'opération
Indique si l'opération était une requête ou une mutation.
Nom de l'opération
Le nom de l'opération lorsqu'il est fourni, ou <anonymous>
.
query { libraries }
aurait un nom d'opération vide car aucun nom n'a été fourni.
Une requête avec un nom tel que query GetLibraries { libraries }
utiliserait le nom d'opération 'GetLibraries'
.
Le chemin unique le plus profond
Le chemin le plus profond inclus dans l'ensemble de sélection d'une requête où un seul champ a été sélectionné à chaque niveau. Étant donné que les noms d’opération peuvent être réutilisés, cela permet de déterminer plus précisément le caractère unique d’une opération donnée.
Nous utilisons le chemin unique le plus profond (au lieu du chemin le plus profond comme précédemment) pour éviter de prendre des décisions arbitraires en matière de dénomination, ce qui peut impliquer ou masquer des détails sur ce qui pourrait entraîner une lenteur d'une application.
Pour la requête :
query { libraries { branch booksInStock { isbn title author } magazinesInStock { issue title } }}
Nous sélectionnerons un chemin unique le plus profond de « bibliothèque » lorsque nous sélectionnerons plusieurs champs au-delà de ce point. Tout résolveur exécuté au-delà de ce point peut contribuer aux caractéristiques de performance de la transaction.
Si la requête ne sélectionnait qu'un seul champ par résolveur, nous sélectionnons le chemin complet car chaque ensemble de sélection est unique.
La requête :
query { libraries { booksInStock { title } }}
Cela donnera le chemin unique le plus profond : 'libraries.booksInStock.title'
.
id
et les champs __typename
sont automatiquement exclus de la décision de dénomination.
Par exemple, une requête de sous-graphe :
query { libraries { branch __typename id }}
Cela donnerait lieu au chemin unique le plus profond de : libraries.branch
.
Types d'union et fragments en ligne
Pour les types d'Union qui utilisent des fragments en ligne, le nom de transaction utilisera des crochets < ... >
pour indiquer le champ sélectionné sous-jacent pour la requête Union si un seul résultat est spécifié dans la requête.
Pour le schéma suivant :
union SearchResult = Book | Author
type Book { title: String!}
type Author { name: String!}
type Query { search(contains: String): [SearchResult!]}
et la requête suivante :
query example { search(contains: "author") { __typename ... on Author { name } }}
Cela donnerait lieu au nom de transaction suivant :
query/example/search<Author>.name
Cependant, si la requête renvoie à la fois Livre et Auteur :
query example { search(contains: "author") { __typename ... on Author { name } ... on Book { title } }}
Le nom de la transaction résultant serait query/example/search
Dénomination en cas d'erreur
Les erreurs lors de la validation ou de l'analyse d'une requête GraphQL peuvent avoir un impact sur la dénomination des transactions.
Exceptions
Si une erreur est rencontrée dans le middleware ou dans le résolveur, le nom de la transaction sera simplement le nom du middleware ou du résolveur dans lequel l'échec s'est produit.
Erreurs de validation
Si une opération demandée a pu être analysée mais pas validée, le nom de transaction suivant sera généré :
Dans GraphQL2 : graphql.validation.validation:validate
Dans GraphQL3 : graphql.validation.validate.validate
Erreurs d'analyse
Si une opération demandée ne peut pas être analysée, le nom de transaction suivant sera généré :
graphql.language.parser:parse
Métriques
L'agent Python génère des rapports sur la résolution de champs GraphQL et les métriques d'opération pour vous permettre de comprendre et d'analyser les tendances à long terme.
Opérations métriques
Les métriques d'opération sont rapportées en utilisant le format suivant :
GraphQL/operation/GraphQL/{operation_type}/{operation_name}/{deepest_unique_path}
Type d'opération : spécifie le type d'opération à exécuter. Ce sera soit query
, mutation
ou <unknown>
si le type d’opération ne peut pas être déterminé.
Nom de l'opération : le nom de l'opération s'il est fourni ou <anonymous>
.
Chemin unique le plus profond: le chemin le plus profond inclus dans l'ensemble de sélection d'une requête où un seul champ est sélectionné à chaque niveau. Cela permet de déterminer plus précisément l’unicité d’une opération donnée puisque les noms d’opération peuvent être réutilisés.
Résolveur de champs métriques
Les métriques du résolveur de champ sont signalées à l'aide du format suivant :
GraphQL/resolve/GraphQL/{field_name}
Les métriques du résolveur capturent la durée passée à résoudre un élément particulier de données GraphQL demandées. Ils peuvent être utilisés pour trouver des résolveurs spécifiques qui peuvent contribuer à ralentir les requêtes entrantes.
Portées et attributs
Les étendues sont capturées pour les opérations GraphQL, les résolutions de champ et le travail supplémentaire qui se produit dans le cadre d'une résolution de champ, comme l'exécution d'une requête dans une base de données.
Les étendues d’opération incluent le type d’opération, le nom de l’opération et le chemin unique le plus profond. Ils représentent la durée individuelle et l'attribut d'une invocation spécifique au sein d'une transaction ou trace.
GraphQL/operation/GraphQL/{operation_type}/{operation_name}/{deepest_unique_path}
Operation span attributes
Name | Description |
---|---|
| requête ou mutation |
| Nom donné à l'opération ou |
| Nom donné à la requête ou |
Le résolveur de champ couvre
Les résolveurs exploitent le chemin de résolution du champ individuel pour mieux différencier une trace ou une transaction donnée. Par exemple, libraries.books
pourrait être utilisé à la place de simplement livres. Ils représentent la durée individuelle et l'attribut d'un champ spécifique résolu dans le cadre de l'opération GraphQL .
GraphQL/resolve/GraphQL/{path}
Resolver span attributes
Name | Description |
---|---|
| Nom du champ résolu |
| Type de retour du champ résolu (par exemple, |
| Type du parent de ce champ (par exemple, |
| Chemin de résolution complet du champ (par exemple, |