Dans le premier didacticiel NRQL , nous avons exploré les principes fondamentaux de la création de requêtes. Nous avons abordé la structure de base des requêtes, la définition des fenêtres temporelles et la manière de sélectionner un attribut spécifique à observer. Nous avons également appris comment commencer à agréger et afficher des données à l’aide de graphiques et d’autres visualisations.
Dans ce didacticiel, nous allons approfondir un peu plus et explorer davantage de fonctions pour créer des agrégations utiles. Ici, vous apprendrez à comparer les données renvoyées avec les périodes précédentes et à regrouper les données dans des fenêtres temporelles spécifiques. Vous trouverez également encore plus de choses à faire avec les fonctionnalités SINCE
et UNTIL
et explorerez l'utilisation des caractères génériques dans les filtres. Plus précisément, vous apprendrez à :
- requête pour la valeur unique en utilisant
uniques(attributeName)
- Déterminez combien de valeurs uniques existent dans un attribut en utilisant
uniqueCount(attributeName)
- Récupérer les
earliest(attributeName)
etlatest(attributeName)
dans une fenêtre de temps spécifique - Calculez des pourcentages en fonction d'un qualificatif ou d'un autre point de données avec
percentile()
- Effectuer des calculs mathématiques de base à l'aide de fonctions d'attribut et d'agrégation, ou d'une combinaison des deux
- Convertissez les noms d'attributs en quelque chose de personnalisé et de plus lisible
- Rechercher pour inclure/exclure en utilisant des caractères génériques avec
LIKE
ouNOT LIKE
, ou limiter les résultats à ceuxIN
d'une liste ouNOT IN
qui répertorient - requête dans des fenêtres temporelles plus avancées utilisant des dates, des époques et
WITH TIMEZONE
- Regroupez les données dans des fenêtres temporelles intéressantes à l'aide de cohortes temporelles
C'est parti !
Fonctions d'agrégation
Après avoir terminé le premier didacticiel NRQL, vous avez utilisé count()
, average()
, sum()
, max()
et min()
pour transformer vos données de manière significative. Mais que faire si vous souhaitez trouver et compter la valeur unique ? Pour trouver le nombre de valeurs uniques enregistrées pour un attribut sur une plage de temps spécifiée, vous pouvez utiliser la fonction uniqueCount()
. Il vous suffit de fournir l’attribut que nous souhaitons inspecter comme argument. Par instance, voici une requête pour afficher tous les appels d'API publics uniques :
Pour optimiser les performances des requêtes, la fonction ci-dessus renvoie des résultats approximatifs pour les requêtes qui inspectent plus de 256 valeurs uniques. Pour renvoyer la liste réelle des valeurs uniques pour un attribut sur une plage de temps spécifiée, nous pouvons utiliser la fonction uniques()
.
SELECT uniques(http.url) FROM Public_APICall SINCE 1 day ago
Si vous souhaitez fournir un deuxième paramètre de limite pour spécifier une valeur limite différente de la valeur par défaut de 1 000. Vous pouvez le faire en utilisant uniques(attribute[,limit])
, qui modifiera la limite à la valeur souhaitée jusqu'à un maximum de 10 000.
Pour récupérer la valeur la plus récente d'un attribut sur une plage de temps spécifiée, utilisez la fonction latest()
. Dans cet exemple de requête, vous pouvez localiser les temps de réponse les plus récents pour un appel d'API au cours du dernier jour. Cela pourrait vous aider à localiser la valeur la plus récente d'une transaction ou d'un service signalé par intermittence.
À l’autre bout du spectre, vous pourriez utiliser la fonction earliest()
pour obtenir l’effet inverse. Il renverra la valeur la plus ancienne d'un attribut enregistré dans la plage de temps spécifiée. Dans cet exemple de requête, vous pouvez récupérer les temps de réponse les plus anciens pour un appel d'API au cours du dernier jour. Si les données sont rapportées de manière cohérente, cela signalera le point de données de l'événement le plus ancien au cours des dernières 24 heures.
Vous constaterez peut-être que vous avez besoin de pourcentages plutôt que de décomptes, de sommes ou de moyennes. L'utilisation de la fonction percentage()
vous permet de calculer le pourcentage d'une valeur dans l'ensemble de données qui correspond à une condition spécifiée. Cette fonction prend deux arguments : le premier est une fonction d'agrégation pour l'attribut souhaité, tel que count()
. La deuxième est une condition WHERE
pour spécifier le sous-ensemble de données que vous souhaitez interroger.
Dans cet exemple de requête, vous pouvez trouver le pourcentage d'appels d'API au cours du dernier jour qui ont eu une durée (ou temps de réponse) supérieure à 100 millisecondes.
Il est très courant de visualiser les performances des applications ou les données d'expérience client en utilisant des centiles plutôt que des moyennes. Vous pouvez utiliser la fonction percentile()
pour comprendre l’expérience du n-ième percentile.
Par exemple, disons que vous souhaitez savoir quelle a été la pire expérience (durée la plus élevée) de 98 % de vos clients au cours de la dernière journée. Vous pouvez demander à NRDB percentile(duration, 98)
des dernières 24 heures.
Comme vous pouvez le constater, l’agrégation peut manipuler les données de manière puissante. Vous pouvez utiliser uniqueCount()
pour compter les entrées uniques d’un attribut particulier. Mais vous pouvez également l'utiliser pour identifier un nombre de machines uniques, un conteneur de rapports ou même le nombre de points de données personnalisés envoyés à New Relic. Et, si vous voulez savoir quelles valeurs uniques sont disponibles pour la requête, vous pouvez toujours demander une liste en utilisant uniques()
.
Les fonctions latest()
et earliest()
ont une valeur particulière lorsqu'il s'agit de traiter des données éparses ou de rechercher le moment où quelque chose a commencé ou a cessé d'être signalé (en supposant que New Relic stocke toujours les données). La fonction percentage()
peut vous montrer quel pourcentage d'événements correspond à un qualificatif par rapport à l'ensemble des résultats globaux. Enfin, vous pouvez utiliser percentile()
comme indicateur de performance clé en définissant un objectif pour garantir que 90 % de toutes les transactions finales des utilisateurs dépassent la durée fournie.
À l’étape suivante, vous apprendrez à effectuer des mathématiques de base avec NRQL.
Utiliser les opérateurs mathématiques
NRQL prend en charge les opérateurs mathématiques de base. Vous pouvez effectuer une addition (+
), une soustraction (-
), une multiplication (*
) et une division (/
) sur des valeurs d'attributs numériques et sur les résultats des fonctions d'agrégation.
Par exemple, nous capturons à la fois le temps de réponse total (comme duration
) et le temps de réponse de la base de données (comme databaseDuration
) lorsque nous enregistrons un événement de transaction. Mais que faire si vous souhaitez connaître le temps moyen passé en dehors du traitement de la base de données ? Vous pouvez commencer par calculer cette valeur pour chaque événement de votre ensemble de données à l'aide d'une requête telle que celle-ci.
SELECT GigabytesIngestedBillable - GigabytesIngestedFree, metric FROM NrMTDConsumption WHERE productLine IS NOT NULL
Super! Vous venez d’effectuer quelques calculs mathématiques de base. Ceci est utile pour vous aider à répertorier les événements individuels. Mais que faire si vous souhaitez connaître la durée moyenne des transactions sans l'heure de la base de données ? De manière pratique, vous pouvez effectuer l'arithmétique dans la fonction :
SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) FROM NrMTDConsumption WHERE GigabytesIngestedBillable IS NOT NULL
Et maintenant, que se passerait-il si vous vouliez rendre les choses encore plus compliquées en soustrayant, divisant et multipliant dans la même requête pour déterminer la durée sans temps de base de données, en pourcentage du temps global ? Eh bien, vous pouvez ajouter les mathématiques :
SELECT average(GigabytesIngestedBillable - GigabytesIngestedFree) / unitPrice * 100 FROM NrMTDConsumption WHERE GigabytesIngestedBillable IS NOT NULL
New Relic signale les horaires dans le cadre de votre événement, afin que vous puissiez les utiliser pour calculer des points de données significatifs ou même générer des résultats en pourcentage. Vous pouvez encore maximiser la puissance des mathématiques de base en effectuant des tâches telles que la synchronisation d'actions ou d'événements personnalisés, ou l'envoi de données personnalisées. Par instance, une plateforme de commerce électronique qui fournit des données sur la taille des commandes et les méthodes de paiement pourrait utiliser les mathématiques pour calculer des éléments tels que le taux de conversion des commandes par rapport aux visites uniques des clients.
À l’étape suivante, vous apprendrez à utiliser NRQL pour étiqueter votre attribut.
Attribut d'étiquette
Lorsque vous commencez à exécuter des fonctions NRQL plus complexes, vous vous demandez peut-être si vous pouvez rendre les noms affichés pour l'attribut de requête plus utiles, en particulier pour les autres qui ne connaissent pas NRQL! Prenons un exemple utilisant ce que vous avez appris dans le didacticiel précédent.
SELECT average(duration-externalDuration) FROM Transaction
Vous pouvez utiliser la clause AS
après une fonction ou un attribut pour donner au résultat un nom plus lisible et significatif. Cela permet à vous et à votre équipe de comprendre plus facilement ce que représente exactement un graphique.
SELECT average(duration-externalDuration) AS 'Non-External Response Time' FROM Transaction
Cela peut sembler simplement esthétique, mais lorsque vous créez un dashboard détaillé, il est important d'étiqueter clairement vos données. Cela garantit une absence totale d'ambiguïté pour quiconque consulte votre widget, vos panneaux d'affichage, vos graphiques linéaires ou vos tableaux.
Nous y reviendrons dans une prochaine leçon sur le regroupement, pour découvrir comment AS
peut également créer des ensembles de résultats propres dans des scénarios plus avancés. Ensuite, vous apprendrez à comparer des données dans différentes fenêtres temporelles.
Comparer les fenêtres temporelles
Vous avez maintenant l’habitude d’utiliser des plages de temps avec les clauses SINCE
et UNTIL
. Mais que faire si vous souhaitez comparer des valeurs provenant de différentes plages de temps ? Vous pouvez y parvenir avec la clause COMPARE WITH
.
NRQL utilise SINCE
et UNTIL
pour définir une période d'intérêt. Ensuite, vous pouvez indiquer la période que vous souhaitez comparer en utilisant une clause COMPARE WITH [time period] AGO
contenant une valeur de décalage relative.
Par exemple, dans l'exemple de requête ci-dessous, vous pouvez comparer les données du dernier jour avec les données de la semaine précédente en utilisant un décalage relatif d'il y a 1 semaine.
Pour cartographier la comparaison des valeurs au fil du temps, ajoutez TIMESERIES
. Cela crée un graphique linéaire de la comparaison, vous permettant de visualiser comment cette période se compare aux données récentes et de la suivre au fil du temps.
SELECT average(duration) FROM Public_APICall SINCE 1 day ago COMPARE WITH 1 week ago TIMESERIES

Les comparaisons peuvent répondre rapidement aux questions sur ce qui se passe dans vos applications. Les différentes valeurs de ventes, de performances, de MTTR ou d’erreur sont-elles en hausse ou en baisse par rapport à la semaine dernière ? Et si vous enquêtez sur un problème, vous trouverez utile de comparer une période de performances problématiques à une période de performances normales.
Utiliser des filtres génériques
Vous savez maintenant comment utiliser une clause WHERE
pour filtrer les résultats de notre requête. Outre l'utilisation d'opérateurs de comparaison standard, vous pouvez également utiliser LIKE
et NOT LIKE
si vous souhaitez déterminer si un attribut contient ou non une sous-chaîne spécifiée. Pour ce faire, vous pouvez utiliser le symbole de pourcentage (%
) comme caractère générique n’importe où dans la chaîne.
Dans notre exemple de requête, vous pouvez obtenir le nombre de transactions avec le terme « amazonaws » n'importe où (début, milieu ou fin) dans le nom.
Vous pouvez utiliser %
comme caractère générique au début et à la fin, ce qui signifie que New Relic vérifie la valeur de l'attribut que vous avez choisi s'il contient le terme, tel que « Web », n'importe où dans le texte. De même, vous pouvez utiliser %Web
OU Web%
pour faire correspondre quelque chose qui se termine par « Web » ou commence par « Web », respectivement.
Vous pouvez également ajouter le caractère générique entre les chaînes pour une recherche plus précise. Cette requête recherche un nom de transaction qui contient le mot « amazon » suivi de n'importe quel texte, mais qui contient également le terme « .com » suivi d'un nombre quelconque de caractères. Ainsi, les résultats ne seront que des transactions avec « amazon » et « .com » dans le nom.
Que faire si vous avez besoin d'une spécificité extrême et que les noms n'ont pas de chaîne commune que vous pouvez faire correspondre à l'aide de caractères génériques ? Les opérateurs IN
et NOT IN
vous permettent de spécifier un ensemble de valeurs que vous souhaitez vérifier par rapport à un attribut. Au lieu de spécifier plusieurs clauses WHERE
avec les opérateurs AND
ou OR
, vous pouvez simplifier une condition en répertoriant les valeurs entre parenthèses séparées par des virgules.
Dans cet exemple de requête, vous pouvez compter le nombre de transactions dont le sous-type est « graph.microsoft.com » ou « s3.amazonaws.com ». Si vous modifiez la requête pour utiliser NOT IN
à la place, vous obtiendrez le nombre de transactions dont le sous-type n'est ni « graph.microsoft.com » ni "s3.amazonaws.com".
Vous pouvez désormais contrôler vos données et les manipuler pour faire ce dont vous avez besoin, ce qui vous permet de créer des tableaux de bord et des alertes puissants et significatifs. Ensuite, vous apprendrez à définir des plages horaires spécifiques à l’aide de NRQL.
Spécifier les plages horaires
Les clauses SINCE
et UNTIL
font plus que vous donner des informations sur des plages de temps relatives : vous pouvez également leur fournir une date ou une heure spécifique. Dans l'exemple de requête suivant, vous pouvez utiliser une date SINCE
au format YYYY-MM-DD
.
SELECT average(duration) FROM Public_APICall SINCE '2023-10-28' TIMESERIES MAX

Vous pouvez l'utiliser pour créer des rapports SLA pour une période spécifiée. Vous pouvez même inclure une heure spécifique avec le format YYYY-MM-DD HH:MM
. Dans cette requête, vous pouvez voir que les données sont définies à 18 heures.
SELECT average(duration) FROM Public_APICall SINCE '2023-10-28 18:00' TIMESERIES MAX

Parfois, vous pouvez recevoir une heure d'événement au format Epoch (Unix). De manière pratique, vous pouvez utiliser l'horodatage d'époque avec les clauses SINCE
et UNTIL
afin de ne pas avoir à traduire manuellement ces valeurs dans un autre format de date.
SELECT average(duration) FROM Public_APICall SINCE 1698525489519 UNTIL 1698698289519 TIMESERIES MAX

Lorsque NRDB affiche des données sur une période donnée, il suppose que vous souhaitez voir les données du point de vue de votre fuseau horaire. Mais avec des équipes internationales dispersées, votre aujourd'hui pourrait être le demain ou le hier d'un coéquipier, selon leur emplacement. Vous pouvez utiliser la clause WITH TIMEZONE
pour définir un fuseau horaire à partir duquel afficher les données. Cela affecte l'interprétation des valeurs dans les clauses SINCE
et UNTIL
.
Considérez les deux exemples de graphiques ci-dessous. Chaque requête a un fuseau horaire spécifié à l'aide de WITH TIMEZONE
. Les deux sont à 8 heures d'intervalle. Notez que le modèle de données est le même, mais décalé de 8 heures pour s'aligner sur chaque fuseau horaire respectif :
SELECT count(*) FROM Public_APICall SINCE yesterday UNTIL today WITH TIMEZONE 'America/Los_Angeles' TIMESERIES

SELECT count(*) FROM Public_APICall SINCE yesterday UNTIL today WITH TIMEZONE 'Europe/London' TIMESERIES

Avant cette leçon, tous vos mécanismes de contrôle du temps dépendaient des temps relatifs à partir de maintenant. Vous pouvez désormais ajuster la vue en fonction de l'emplacement d'une personne dans le monde. Il se peut qu’un client de la côte est des États-Unis signale un problème à votre équipe d’ingénierie située sur la côte ouest. Votre équipe peut créer un dashboard et traduire la vue pour cartographier le fuseau horaire comme le citeraient les clients. Ainsi, si un client vous informe d'un problème à 9 heures du matin sur la côte est, vous pouvez être sûr, à 9 heures du matin, que vous n'aurez pas à traduire mentalement la différence.
Lorsque vous devez concentrer vos données sur des dates spécifiques d'un incident et que vous souhaitez étudier les données sans fenêtre temporelle mobile par rapport à l'heure actuelle, cela vous aidera à obtenir des données dans une fenêtre temporelle statique. Dans la prochaine et dernière leçon, vous continuerez à apprendre comment utiliser le temps dans vos rapports avec la cohorte basée sur le temps.
Utilisation de la cohorte basée sur le temps
Même si cela peut paraître complexe, la cohorte basée sur le temps signifie simplement un moyen d'organiser les données en groupes basés sur le temps tels que minuteOf
, hourOf
, weekOf
, etc.
Lorsque vous utilisez la clause SINCE
pour les durées, vous récupérez la durée totale de la requête. Mais ces données ne racontent pas toujours toute l’histoire ! Que faire si vous avez besoin d’analyser plus en détail les performances sur une période donnée ? Grâce au regroupement basé sur le temps, vous pouvez trier davantage les données en groupes logiques basés sur le temps.
En utilisant une combinaison de FACET
et l'une des nombreuses fonctions basées sur le temps (telles que hourOf(timestamp)
), vous pouvez prendre une semaine de données et comprendre les performances en fonction de l'heure spécifique à laquelle elles se sont produites. Cela révèle les tendances et identifie les moments les plus critiques pour vos applications :
SELECT average(duration) FROM Public_APICall FACET hourOf(timestamp) SINCE 1 week ago

Après avoir exécuté la requête ci-dessus, vous pouvez voir le temps de réponse le plus lent en fonction de l’heure de la journée. New Relic propose de nombreuses options différentes à adapter en fonction du temps. L'exemple précédent regroupe par heure, mais vous pouvez également regrouper par jour de la semaine pour déterminer quels jours ont les meilleurs et les pires temps de réponse.
SELECT average(duration) FROM Public_APICall FACET weekdayOf(timestamp) SINCE 1 week ago

Vous pouvez désormais voir les périodes les plus lentes de vos applications à un jour précis. Vous pouvez l'utiliser pour répondre à des questions essentielles pour l'entreprise, telles que « Quand vendons-nous le plus de produits ? », ou "Quand avons-nous le plus d'inscriptions ou de connexions ?".
Vous pouvez également regrouper les résultats par une date spécifique. Cela est utile lors de l'examen des rapports SLA ou de l'analyse des changements de performances sur une période donnée.
SELECT average(duration) FROM Public_APICall FACET dateOf(timestamp) SINCE 1 week ago

Les cohortes basées sur le temps exposent les problèmes qui se produisent à des minutes, des heures, des jours ou des semaines spécifiques. Quelles que soient les données que vous envoyez à New Relic, NRQL vous permet de les découper, de les organiser et de les visualiser comme vous le souhaitez.
Il existe également de nombreuses autres options disponibles pour regrouper, notamment la semaine, le mois et l'année en fonction de votre conservation des données. Pour voir la liste complète, rendez-vous sur notre page de documentation Résultats de groupe au fil du temps.
Quelle est la prochaine étape ?
Grâce aux connaissances que vous avez acquises ici, vous pouvez créer des visualisations dashboard et contrôler les aspects de vos données qui vous intéressent le plus. Vous pouvez utiliser ces techniques puissantes pour affiner la mise au point afin d'obtenir des alertes plus granulaires et spécifiques et produire des visualisations beaucoup plus intéressantes. Lorsque vous êtes prêt, vous pouvez passer à notre troisième didacticiel, où vous apprendrez des compétences NRQL plus intéressantes, notamment les filtres, les cas de facettes, l'histogramme, l'apdex, le filtrage sur les types d'événements, le remplacement des valeurs et l'extrapolation.