• /
  • EnglishEspañolFrançais日本語한국어Português
  • Se connecterDémarrer

Cette traduction automatique est fournie pour votre commodité.

En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.

Créer un problème

Python et GraphQL

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

graphql.operation.type

requête ou mutation

graphql.operation.name

Nom donné à l'opération ou < anonymous >

graphql.operation.query

Nom donné à la requête ou < anonymous >

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

graphql.field.name

Nom du champ résolu

graphql.field.returnType

Type de retour du champ résolu (par exemple, Book!, [String])

graphql.field.parentType

Type du parent de ce champ (par exemple, [Book])

graphql.field.path

Chemin de résolution complet du champ (par exemple, libraries.books)

Droits d'auteur © 2025 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.