Nous espérons que voir des exemples de requêtes et des explications dans le contexte de vos propres données vous aidera à mieux comprendre comment transformer les données avec des concepts plus avancés tels que le taux de changement et l'agrégation. Dans ce didacticiel, vous développerez les concepts trouvés dans les bases de l'utilisation de NRQL et du contrôle de vos données avec NRQL avec des concepts plus avancés.
Vous apprendrez à améliorer votre dashboard en utilisant le facettage par cas, les fonctions d'agrégation avancées, le mot-clé EXTRAPOLATE
, les fonctions d'agrégation de filtrage et le remplacement de valeurs. Plus précisément, vous apprendrez à utiliser :
- Fonctions d'agrégation avancées telles que
filter()
,apdex()
,rate()
,funnel()
,histogram()
. - Les clauses
EXTRAPOLATE
. FACET CASES()
, y compris comment utiliser les valeurs de correspondance d'attributs et de groupes.filter()
pour combiner les types d'événements.- Remplacer les valeurs, si nécessaire.
Vous n’utiliserez peut-être pas ces fonctions et fonctionnalités sur chaque dashboard, mais elles seront certainement utiles pour résoudre des problèmes et des exigences spécifiques. C'est parti !
Utiliser l'agrégateur avancé
Calcul du taux
Commençons par la fonction rate()
. Il vous permet de visualiser la fréquence des événements au fil du temps, ce qui permet de voir la fréquence des événements pendant de petites périodes dans des fenêtres temporelles plus grandes.
Dans l'exemple ci-dessous, vous pouvez voir la fréquence moyenne des requests toutes les 5 minutes pour la dernière heure par rapport à la fréquence moyenne de 5 minutes de l'heure précédente. Notez que la requête utilise SINCE 1 hour ago
. Il s’agit de la fenêtre temporelle globale dans laquelle vous calculez le taux.
Vous pouvez utiliser rate()
pour calculer requests par minute ou requests par seconde en définissant l'intervalle de temps sur 1 minute ou 1 seconde.
Comprendre le comportement final de l'utilisateur avec les graphiques entonnoirs
Les graphiques entonnoirs suivent l'occurrence d'une valeur d'attribut dans plusieurs enregistrements, et de nombreuses personnes les utilisent pour comprendre le comportement final de l'utilisateur. Vous pouvez souvent les utiliser pour visualiser la progression réussie de l'utilisateur à travers des chemins définis, et en particulier lors de l'utilisation d'attributs personnalisés.
Vous pouvez utiliser la fonction d'agrégateur funnel()
pour visualiser combien d'utilisateurs visitent une page spécifique avant de passer à une autre page. Le premier paramètre est l’attribut d’identification des entrées uniques que vous comptez. Dans ce cas, New Relic attribue et conserve un attribut session ID
pour chaque utilisateur de votre site (sous réserve que les cookies soient activés). Vous pouvez également définir votre propre identifiant de session en utilisant l'attribut personnalisé.
Les paramètres restants déterminent comment chaque étape des entonnoirs est calculée, écrite au format , WHERE attr OP value
. Dans ce cas, vous en avez deux : un qui montre combien de sessions d'utilisateurs ont visité la page d'accueil, puis un autre qui montre combien d'entre eux ont également navigué vers d'autres pages. Essayez une requête comme celle-ci sur vos propres données et voyez ce que vous obtenez !
agrégateur de filtres
filter()
est un outil puissant qui vous permet d'agréger plusieurs points de données dans une seule requête, offrant plus de contrôle sur l'événement renvoyé par le résultat de la fonction. Dans cet exemple, vous utilisez filter()
pour renvoyer les valeurs distinctes pour le total des transactions, le total des transactions Web et le total des transactions non Web :
SELECT count(*) AS 'All Transactions', filter(count(*), WHERE awsAPI = 'dynamodb') AS 'DynamoDB', filter(count(*), WHERE awsAPI = 'sqs') AS 'SQS' FROM Public_APICall SINCE 1 day ago

Comme il renvoie un nombre, vous pouvez également effectuer des opérations mathématiques sur les résultats de la requête. Par exemple, vous pouvez diviser le total des appels d'API par tous les appels d'API pour voir quel pourcentage d'entre eux étaient DynamoDB :
histogramme
L'histogramme vous permet de mieux visualiser la distribution de vos données. Cela vous aide à comprendre le regroupement des points de données par fréquence, pas seulement par moyennes. La fonction histogram()
prend trois arguments :
L'attribut que vous souhaitez tracer (comme la durée).
La valeur maximale de la plage que vous souhaitez prendre en compte (par exemple « 1 » pour 1 seconde ou moins).
Le nombre de compartiments dans lesquels vous souhaitez regrouper les données. Dans cet exemple, vous créez un graphique
histogram()
pour toutes les valeurs de durée comprises entre 0 et 1 seconde, en les regroupant dans des tranches de 50 ms. Pour ce faire, spécifiez « 20 » comme nombre de buckets. Toutes les durées supérieures à 1 seconde sont regroupées dans le dernier compartiment.
Apdex
La fonction apdex()
calcule un score Apdex sur n'importe quelle valeur numérique (comme la durée). Vous pouvez calculer l'Apdex pour une ou plusieurs transactions spécifiques afin de tenir compte des valeurs d'attributs personnalisées. Vous pouvez même fournir votre propre valeur Apdex-T sans interférer avec les paramètres de l'application. Dans cet exemple, vous fournissez à la fonction un attribut de « durée » et une valeur Apdex-T de 0,01, en la signalant comme « Apdex de durée » :
SELECT apdex(duration, 0.1) AS 'Apdex Of Duration' FROM Public_APICall SINCE 1 week ago

Vous pouvez également ajouter l'opérateur TIMESERIES
pour représenter graphiquement les données au fil du temps. Notez que ceci trace également le seuil Apdex satisfait, toléré et frustré.
Vous avez maintenant exploré un tout nouvel ensemble de visualisations avec funnel()
et histogram()
. Vous avez également appris comment filter()
peut vous aider à être plus précis dans une requête avec des clauses WHERE
et comment rate()
peut afficher le taux d'un attribut au fil du temps.
Ces requêtes améliorent encore davantage votre capacité NRQL . Apdex est une norme industrielle et s'applique à de nombreux scénarios. Les entonnoirs permettent de suivre la progression à travers les chemins souhaités tandis que l'histogramme visualise la distribution claire des données. Enfin, les filtres vous permettent d'obtenir des valeurs extrêmement précises. Ensuite, vous en apprendrez davantage sur EXTRAPOLATE
.
Utiliser l'extrapolation pour de grandes quantités de données
La base de données New Relic (NRDB) reçoit et traite chaque jour de grandes quantités de données à une vitesse fulgurante ! Lorsque APM enregistre une grande quantité de données d'événement, les agents New Relic implémentent une technique d'échantillonnage pour continuer à collecter des données significatives tout en réduisant l'impact potentiel sur vos applications. Cela ne se produit généralement que lorsqu'un seul événement dans une application ou un service gère des volumes extrêmement élevés de requests.
Si vous disposez de plusieurs agents répartis sur plusieurs instances à charge équilibrée d'un service, vous risquez de ne jamais respecter cette limite. Découvrons ce que vous pouvez faire lorsque cela se produit. L'opérateur EXTRAPOLATE
indique à New Relic de compenser mathématiquement les effets de l'échantillonnage, renvoyant ainsi des résultats qui représentent plus fidèlement l'activité de votre système. Vous pouvez stocker une valeur supplémentaire pour enregistrer le nombre d'événements similaires survenus au-delà de la limite, ce qui vous permet de fournir des résultats statistiquement précis.
SELECT count(*) FROM Transaction SINCE 60 minutes ago FACET appName TIMESERIES 1 minute EXTRAPOLATE

Vous pourriez penser que vous pourriez atteindre la limite en faisant cela. Essayez de supprimer EXTRAPOLATE
de la requête et voyez si votre décompte change. Si ce n’est pas le cas, vous n’avez probablement pas atteint la limite.
Lorsque vous incluez EXTRAPOLATE
dans une requête, nous calculons le ratio entre l'événement signalé et l'événement total. Nous utilisons ensuite ce ratio pour extrapoler une approximation des données non échantillonnées. Gardez à l’esprit que seules certaines requêtes prennent en charge cette utilisation. Lorsqu'il est inclus dans une requête NRQL qui ne le prend pas en charge ou n'utilise pas de données échantillonnées, il n'a aucun effet.
Les données homogènes telles que le débit tirent le meilleur parti de la fonction EXTRAPOLATE
. Cela a moins d’effet lorsqu’on tente d’extrapoler un nombre de choses distinctes (comme uniqueCount()
ou uniques()
). Ainsi, EXTRAPOLATE
ne fonctionne qu'avec les requêtes NRQL qui utilisent l'une des fonctions d'agrégation suivantes :
apdex
average
count
histogram
sum
percentage
rate
stddev
Maintenant que EXTRAPOLATE
est terminé, passons à l’utilisation des cas de facettes.
Cas d'utilisation de facettes
Comme vous l'avez appris précédemment, FACET
segmente vos données et vous aide à les comprendre à partir de perspectives différentes (par exemple, en visualisant le temps de réponse moyen en fonction de différents codes de réponse). Lorsque vous utilisez FACET
, NRDB organise les données en groupes en fonction des valeurs de l'attribut fourni. Mais que faire si vous souhaitez regrouper différentes valeurs, telles que les codes de réponse HTTP 200 et 201.
FACET CASES()
résout ce problème en vous permettant de choisir la manière dont les compartiments à facettes sont répartis. L'opérateur prend n'importe quel nombre de paramètres au format WHERE attr OP value
. Dans l'exemple ci-dessous, vous catégorisez toutes les transactions avec http.url
commençant par « amazon », « google » et « microsoft » dans un compartiment. Vous pouvez également le faire pour des éléments tels que les codes de réponse d'erreur afin de regrouper nos données de manière à augmenter la lisibilité et à nous aider à comprendre ce qui se passe dans notre/nos application(s).
SELECT count(*) FROM Public_APICall FACET CASES(WHERE http.url LIKE '%amazon%', WHERE http.url LIKE '%google%', WHERE http.url LIKE '%microsoft%')

Comme vous pouvez le constater, ces regroupements ont de la valeur, mais vous pourriez avoir du mal à les lire. Nettoyons-les en utilisant quelque chose que nous avons appris dans un tutoriel précédent:
SELECT count(*) FROM Public_APICall FACET CASES(WHERE http.url LIKE '%amazon%' AS 'Amazon', WHERE http.url LIKE '%google%' AS 'Google', WHERE http.url LIKE '%microsoft%' AS 'Microsoft')

FACET CASES()
vous permet de faire correspondre et de regrouper des attributs avec des valeurs différentes que vous souhaitez combiner. Cette fonctionnalité a de nombreuses utilisations et elle est encore plus puissante lorsque vous tag des données personnalisées sur vos données de transaction. Cela vous permet plus de granularité et de contrôle dans la navigation et le regroupement des données. Ensuite, vous examinerez plus en détail le filtrage, cette fois par type d’événement.
Filtrer par type d'événement
Vous allez maintenant découvrir quelque chose que peu de clients New Relic connaissent : le filtrage par types d'événements ! Jusqu’à présent, vous avez créé une requête qui extrait des données d’une seule source. Mais que faire si vous souhaitez tracer 2 points de données stockés sous deux types d’événements différents ? L'interrogation des données NRDB n'a pas de limites sur un seul type d'événement, et vous pouvez interroger différents types d'événements en les séparant par des virgules.
Pour rendre cela encore plus utile, la fonction eventType()
vous indique de quel type d’événement provient l’enregistrement. Vous pouvez l'utiliser pour contrôler votre sortie de données. Dans cet exemple, vous pouvez voir le nombre total d'événements Transaction
et PageView
combinés, ainsi que les totaux pour Transaction
et PageView
uniquement.
SELECT count(*) AS 'Combined Events', filter(count(*), WHERE eventType() = 'PageView') AS 'Page Views', filter(count(*), WHERE eventType()='Transaction') AS 'Transactions' FROM Transaction, PageView SINCE 1 day ago

Regardons cela plus en détail : count(*)
affiche le nombre total d'événements Transaction
et PageView
. Cependant, vous pouvez utiliser la fonction agrégateur filter()
que vous avez récemment apprise pour faire quelque chose d'unique. La requête contient WHERE eventType()='PageView'
, qui appelle la fonction de filtre pour observer le type d'événement dans le cadre de l'ensemble de résultats total. Il filtre ensuite pour afficher uniquement ces événements spécifiques. Vous pouvez même ajouter TIMESERIES
pour visualiser 2 points de données directement comparables sur un graphique linéaire.
SELECT count(*) AS 'Combined Events', filter(count(*), WHERE eventType() = 'PageView') AS 'Page Views', filter(count(*), WHERE eventType()='Transaction') AS 'Transactions'FROM TransactionSINCE 1 day ago TIMESERIES max

Vous avez maintenant localisé, renvoyé et représenté graphiquement les données de deux types d'événements différents. Cet exemple montre comment NRQL peut vous permettre de parcourir rapidement et succinctement toutes les données nécessaires ; aucune jointure complexe ni instruction de jointure n'est requise ! Ensuite, nous allons apprendre à utiliser les valeurs de remplacement.
Remplacer les valeurs
Compter les valeurs NULL
Parfois, les données ne parviennent tout simplement pas au format souhaité. Par instance, les entiers sont parfois renvoyés sous forme de chaînes, mais vous en avez besoin sous forme d'entiers pour effectuer des opérations mathématiques. Ou peut-être obtenez-vous un résultat NULL
, mais dans votre cas, NULL
signifie en fait 0. Ne vous inquiétez pas ! Nous vous entendons et nous avons ajouté des fonctionnalités pour vous aider à résoudre ce problème.
NULL
les valeurs d'un attribut peuvent apparaître à la fois sur les données prêtes à l'emploi et sur les données personnalisées. Lorsque vous utilisez des agrégateurs tels que count()
et average()
, NRQL supprime automatiquement les valeurs NULL
du calcul, exécutant uniquement la fonction sur les événements sans valeurs NULL
. NRQL vous permet de prendre en compte les valeurs NULL
inattendues dans les calculs en utilisant la clause OR value
. Par exemple, si vous souhaitez vous assurer que les valeurs NULL
pour un attribut cartValue
comptent comme 0, vous pouvez utiliser cartValue OR 0
dans votre requête.
Dans cet exemple, exécuter count()
sur « http.url » ne compte que le nombre de fois où "http.url" a une valeur. Mais si vous ajoutez OR 'Null'
à la requête, vous pouvez compter toutes les transactions où « http.url » existe, et aussi ceux qui ont une valeur NULL
.
SELECT count(duration) AS 'Events With Durations', count(http.url OR 'Null') AS 'Events With and Without URL' FROM Public_APICall SINCE 1 day ago

Vous avez presque appris tout ce dont vous avez besoin pour vous aider à faire progresser votre dashboard ! Ensuite, vous apprendrez à utiliser la coercition.
Coercition
NRQL n’applique pas automatiquement la coercition. Cela signifie que nous traitons un float stocké sous forme de chaîne comme nous le ferions pour n'importe quelle autre chaîne, et vous ne pouvez pas les utiliser avec des fonctions mathématiques comme sum()
ou average()
. Pour remplacer ce comportement, utilisez boolean()
ou numeric()
pour convertir les arguments en valeurs booléennes ou numériques. Dans cet exemple, une fonction average()
sur « durée » ne fournit aucune valeur puisque cet attribut est une chaîne. Mais si vous convertissez l'attribut en nombre en utilisant numeric(duration)
, vous pouvez utiliser la fonction average()
avec succès.
SELECT average(numeric(duration)) AS 'Ensuring stored value is treated as numeric', average(duration) AS 'Non-Converted Attribute' FROM Public_APICall SINCE 1 day ago

Un autre exemple courant est celui des valeurs BOOLEAN
(VRAI ou FAUX), qui sont souvent formatées de manière incorrecte sous forme de chaînes. Lorsque cela se produit, vous pouvez modifier la manière dont la source envoie les données pour en faire un booléen approprié. Ou, vous pouvez utiliser la fonction boolean()
. L'exemple de requête ci-dessous renvoie le même résultat, mais uniquement parce que vous utilisez une valeur envoyée par l'agent en tant que BOOLEAN
. Si votre attribut était une chaîne « TRUE », boolean()
la convertirait dans un format booléen approprié, permettant à la requête de s'exécuter comme prévu.
SELECT count(boolean(sampleDataSet)), count(sampleDataSet) FROM Public_APICall SINCE 24 hours ago

Vous pouvez également convertir des valeurs booléennes et numériques en chaînes en utilisant la fonction string()
. Avec des valeurs numériques sous forme de nombres à virgule flottante, vous pouvez utiliser l'argument facultatif precision
pour limiter le nombre de décimales de la chaîne. Cette requête renvoie la valeur de durée sous forme de chaîne limitée à trois décimales.
SELECT string(duration, precision: 3) FROM Public_APICall SINCE 24 hours ago

Ici, nous vous avons donné le pouvoir de contrôler vos formats de données et de dire à NRQL comment vous voulez qu'il agisse. NRQL fonctionne de la manière que nous jugeons la plus logique, mais si cela ne convient pas à votre scénario unique, vous pouvez utiliser les fonctions explorées dans cette leçon pour remplacer ces valeurs. Il ne vous reste plus qu’une chose à apprendre : la concaténation de chaînes.
Utiliser la concaténation de chaînes pour ajouter des arguments
Il peut y avoir des cas où vous devez ajouter et/ou préfixer du texte à la valeur renvoyée d'un attribut. Vous pouvez y parvenir en utilisant la fonction concat()
. Vous pouvez fournir jusqu'à 20 arguments pour que la fonction concat()
les concaténe dans une chaîne.
SELECT concat('The duration of ', http.url, ' is ', duration, ' seconds') FROM Public_APICall

Vous pouvez limiter le nombre de décimales que vous utilisez pour tous les nombres à virgule flottante dans les valeurs de l'attribut concaténé. Pour ce faire, vous utilisez l’argument facultatif precision:
comme dernière valeur. Dans cet exemple, vous ajoutez « s » pour indiquer les secondes et limitez la valeur à 3 décimales.
SELECT http.url, concat(duration, 's', precision: 3) FROM Public_APICall

Les valeurs commençant par http(s)
sont automatiquement affichées sous forme de liens sur lesquels vous pouvez cliquer pour ouvrir une nouvelle page, ce qui signifie que vous pouvez créer une intégration avec des solutions où une URL dynamique peut ouvrir une page associée à une entité. L'exemple suivant montre un exemple d'URL dans lequel vous définissez les valeurs des paramètres de requête par les valeurs d'attribut.
SELECT http.url, concat('https://www.example.com/?appId=', api, '&error=', error) AS 'URL' FROM Public_APICall

Vous pouvez utiliser la fonction concat()
pour combiner des valeurs, telles qu'une ville et un pays pour l'emplacement, et ajouter ou préfixer des chaînes supplémentaires pour présenter les données selon vos besoins.
Dans ce didacticiel, vous avez exploré des fonctionnalités NRQL spécifiques et puissantes. Ces compétences vous seront utiles la prochaine fois que vous travaillerez avec NRQL, en plongeant dans le vif du sujet de vos données.
Vous avez maintenant terminé le troisième didacticiel NRQL ! Lorsque vous serez prêt, nous aurons encore plus de fonctionnalités et de fonctions que nous souhaitons présenter dans le prochain et dernier tutoriel de cette série : Fonctions avancées NRQL .