Utilisation de paramètres de requête dans vos requêtes DataPrime

La variable IBM® Cloud Logs DataPrime $p vous permet d'incorporer des variables dans vos requêtes DataPrime pour des tableaux de bord personnalisés et des paramètres temporels.

Cette fonction externalise les variables comme si elles étaient écrites directement dans une requête. Cela améliore la flexibilité du filtrage, des calculs et des visualisations en permettant des entrées définies par l'utilisateur et un traitement contextuel des données.

Comment fonctionne le site $p ?

  • $p représente les paramètres de requête qui peuvent être utilisés dans les widgets, les requêtes et les filtres externes, tels que le sélecteur de temps du tableau de bord.

  • $p permet un filtrage dynamique et d'autres actions sans qu'il soit nécessaire de modifier manuellement les requêtes.

  • Les utilisateurs peuvent passer et manipuler ces paramètres dans le tableau de bord.

Définition des paramètres de la requête

Vous pouvez utiliser la variable $p lors de la configuration de tableaux de bord personnalisés et lors de la création de requêtes dans la vue Logs.

Tableaux de bord personnalisés

Une fois qu'une variable est créée dans les tableaux de bord personnalisés, les valeurs de la variable choisies par l'utilisateur sont reflétées en tant que paramètres de requête dans une requête DataPrime à l'aide de $p.<variable_name>.

Les variables dans les tableaux de bord personnalisés sont traitées comme des valeurs de chaînes ou de multi-chaînes, ce qui signifie que les variables numériques ne peuvent pas être définies directement. Les variables numériques peuvent être utilisées dans les requêtes, par exemple filter duration > $p.minDuration.

Journaux

Dans la vue Logs, vous pouvez effectuer des calculs de temps dans votre requête DataPrime à l'aide de $p.timeRange.*, $p vous permettant d'obtenir des données à partir de la fenêtre temporelle déterminée par le sélecteur de temps de l'interface utilisateur.

Paramètres temporels

Les paramètres temporels sont automatiquement créés. Vous pouvez obtenir des données à partir d'une fenêtre temporelle déterminée par le sélecteur de temps de l'interface utilisateur en utilisant timeRange dans les tableaux de bord personnalisés et la vue Logs.

Les paramètres liés au temps sont les suivants

$p.timeRange.startTime
L'heure de début du sélecteur de temps de l'interface utilisateur (par exemple, 2024-03-06T08:00:00Z )
$p.timeRange.endTime
L'heure de fin du sélecteur de temps de l'interface utilisateur (par exemple, 2024-03-06T12:00:00Z )

Exemples d'utilisation des paramètres de requête

Les sections suivantes présentent des exemples d'utilisation du site $p.

Travailler avec une variable à valeur unique

L'exemple de requête suivant intègre une variable à valeur unique, comme l'indique l'utilisation de ==.

source logs
| filter cluster_name == $p.cluster

Cela permet de filtrer les journaux dans lesquels cluster_name correspond à la variable à valeur unique définie par l'utilisateur $p.cluster.

Les utilisateurs peuvent modifier dynamiquement cette valeur à l'aide de l'interface utilisateur des tableaux de bord personnalisés.

Travailler avec des variables de multi-sélection

Les variables à sélection multiple permettent aux utilisateurs de passer plusieurs valeurs potentielles dans un seul paramètre.

Gestion de la sélection "toute valeur

Lorsqu'un utilisateur sélectionne "n'importe quelle valeur", le système considère qu'il s'agit de null, ce qui signifie que le filtre est ignoré.

source logs
| filter $p.clusters == null || $p.clusters.arrayContains($d.clusterId)

Si l'utilisateur sélectionne "n'importe quelle valeur" pour $p.clusters, cette valeur est considérée comme nulle, ce qui supprime le filtre. Dans le cas contraire, le filtre garantit que $d.clusterId existe à l'intérieur des valeurs sélectionnées de $p.clusters.

Liste statique de valeurs

Créez une variable minDurationSeconds avec une liste statique de valeurs (par exemple 1, 5, 10, 30, 60). Ces valeurs sont traitées comme des chaînes de caractères, mais peuvent être utilisées comme des nombres dans la requête comme suit :

source logs
| filter duration ≥ $p.minDuration:number

Définition d'un champ dynamique groupby à l'aide d'une variable

Grâce à des variables dynamiques, groupby permet d'adapter les requêtes en fonction de critères définis par l'utilisateur, ce qui permet une agrégation et une analyse plus souples des données. La requête suivante regroupe les données en fonction du champ spécifié par la variable $p.myGroupByVar, puis agrège les résultats en comptant le nombre d'occurrences dans chaque groupe.

groupby $d[$p.myGroupByVar] calculate count()

Cela diffère de groupby $p.my_group_by_variable calculate count(). La variable étant une chaîne de caractères, l'exécution de cette requête serait en fait identique à celle de groupby 'my_value' calculate count(), ce qui signifie qu'elle effectuerait une requête groupby sur une chaîne de caractères statique, en regroupant tous les résultats dans un seul groupe appelé my_value.

Filtrage des journaux dans une plage de temps spécifique

Cela permet de filtrer les journaux dans la plage de temps spécifiée tout en s'assurant que le champ de la durée est supérieur ou égal à $p.minDuration.

source logs between $p.timeRange.startTime and $p.timeRange.endTime
| filter duration >= $p.minDuration

Arrondissement à l'heure la plus proche

Cet exemple ajuste l'intervalle de temps à l'heure complète la plus proche avant de filtrer les journaux en fonction de leur durée. Tout calcul de temps peut être effectué à l'aide de $p.timeRange.*.

source logs between $p.timeRange.startTime/1h and $p.timeRange.endTime/1h+1h
| filter duration >= $p.minDuration

Rejoignant les données de la semaine dernière pour la même période

À l'aide de la commande join, la requête suivante regroupe et compare le nombre de journaux par sous-système d'aujourd'hui à ceux d'il y a exactement une semaine.

source logs
| groupby $l.subsystemname calculate count() as cnt
| join (source logs timeshifted -7d
        | groupby $l.subsystemname calculate count() as cnt) using subsystemname into a_week_before

Cet exemple verbeux permet de mieux contrôler l'intervalle de temps, si nécessaire.

source logs
| groupby $l.subsystemname calculate count() as cnt
| join (source logs between $p.timeRange.startTime-7d and $p.timeRange.endTime-7d
        | groupby $l.subsystemname calculate count() as cnt) using subsystemname into a_week_before