Verwendung von Abfrageparametern in Ihren DataPrime Abfragen
Mit der Variable IBM® Cloud Logs DataPrime $p können Sie Variablen in Ihre DataPrime Abfragen für benutzerdefinierte Dashboards und zeitbezogene Parameter einbinden.
Diese Funktion externalisiert Variablen, als ob sie direkt in eine Abfrage geschrieben würden. Dies erhöht die Flexibilität beim Filtern, Berechnen und Visualisieren, da benutzerdefinierte Eingaben und kontextbezogene Datenverarbeitung möglich sind.
Wie funktioniert $p ?
-
$pstellt Abfrageparameter dar, die in Widgets, Abfragen und externen Filtern, wie z. B. einem Dashboard-Zeitpicker, verwendet werden können. -
$permöglicht dynamische Filterung und andere Aktionen, ohne dass manuelle Abfrageänderungen erforderlich sind. -
Die Benutzer können diese Parameter im Dashboard übergeben und manipulieren.
Definieren von Abfrageparametern
Sie können die Variable $p beim Konfigurieren von benutzerdefinierten Dashboards und beim Erstellen von Abfragen in der Ansicht " Protokolle" verwenden.
Benutzerdefinierte Dashboards
Sobald eine Variable in benutzerdefinierten Dashboards erstellt wurde, werden die vom Benutzer ausgewählten Variablenwerte als Abfrageparameter in einer DataPrime-Abfrage mit $p.<variable_name> wiedergegeben.
Variablen in benutzerdefinierten Dashboards werden als String- oder Multi-String-Werte behandelt, was bedeutet, dass numerische Variablen nicht direkt definiert werden können. Numerische Variablen können in Abfragen verwendet werden, z. B.
filter duration > $p.minDuration.
Protokolle
In der Ansicht " Protokolle" können Sie in Ihrer Abfrage DataPrime Zeitberechnungen durchführen, indem Sie $p.timeRange.* verwenden. $p ermöglicht es Ihnen, Daten aus dem Zeitfenster zu
beziehen, das durch die Zeitauswahl der Benutzeroberfläche bestimmt wird.
Zeitbezogene Parameter
Zeitbezogene Parameter werden automatisch erstellt. In benutzerdefinierten Dashboards und in der Ansicht " Protokolle" können Sie mit timeRange Daten aus einem Zeitfenster beziehen, das durch die Zeitauswahl
der Benutzeroberfläche bestimmt wird.
Zu den zeitbezogenen Parametern gehören:
$p.timeRange.startTime- Die Startzeit des UI Time Picker (z. B. 2024-03-06T08:00:00Z )
$p.timeRange.endTime- Die Endzeit des UI Time Picker (z. B. 2024-03-06T12:00:00Z )
Beispiele für die Verwendung von Abfrageparametern
In den folgenden Abschnitten finden Sie $p Anwendungsbeispiele.
Arbeiten mit einer einwertigen Variablen
Das folgende Abfragebeispiel enthält eine einwertige Variable, die durch die Verwendung von == gekennzeichnet ist.
source logs
| filter cluster_name == $p.cluster
Damit werden Protokolle gefiltert, bei denen cluster_name mit der benutzerdefinierten Einzelwertvariablen $p.cluster übereinstimmt.
Die Benutzer können diesen Wert über die Benutzeroberfläche der benutzerdefinierten Dashboards dynamisch ändern.
Arbeiten mit Mehrfachauswahl-Variablen
Mit Mehrfachauswahlvariablen können Benutzer mehrere mögliche Werte in einem einzigen Parameter übergeben.
Handhabung der Auswahl "beliebiger Wert"
Wenn ein Benutzer "einen beliebigen Wert" auswählt, behandelt das System dies als null, was bedeutet, dass der Filter ignoriert wird.
source logs
| filter $p.clusters == null || $p.clusters.arrayContains($d.clusterId)
Wählt der Benutzer für $p.clusters einen "beliebigen Wert" aus, wird dieser als Null behandelt und der Filter entfernt. Andernfalls stellt der Filter sicher, dass $d.clusterId innerhalb der ausgewählten
Werte von $p.clusters existiert.
Statische Liste von Werten
Erstellen Sie eine Variable minDurationSeconds mit einer statischen Liste von Werten (z. B. 1, 5, 10, 30, 60). Diese Werte werden als Zeichenketten behandelt, können aber in der Abfrage wie folgt als Zahl verwendet werden:
source logs
| filter duration ≥ $p.minDuration:number
Definition eines dynamischen groupby Feldes unter Verwendung einer Variablen
Durch die Verwendung dynamischer Variablen ermöglicht groupby die Anpassung von Abfragen auf der Grundlage benutzerdefinierter Kriterien und damit eine flexiblere Datenaggregation und -analyse. Die folgende Abfrage gruppiert Daten
auf der Grundlage des durch die Variable $p.myGroupByVar angegebenen Feldes und aggregiert dann die Ergebnisse durch Zählen der Anzahl der Vorkommen in jeder Gruppe.
groupby $d[$p.myGroupByVar] calculate count()
Dies unterscheidet sich von groupby $p.my_group_by_variable calculate count(). Da es sich bei der Variablen um eine Zeichenkette handelt, wäre die Ausführung dieser Abfrage praktisch identisch mit groupby 'my_value' calculate count(),
was bedeutet, dass sie eine groupby auf eine statische Zeichenkette ausführt und alle Ergebnisse in einer einzigen Gruppe namens my_value zusammenfasst.
Filtern von Protokollen innerhalb eines bestimmten Zeitraums
Damit werden Protokolle innerhalb des angegebenen Zeitraums gefiltert, wobei sichergestellt wird, dass das Feld Dauer größer oder gleich $p.minDuration ist.
source logs between $p.timeRange.startTime and $p.timeRange.endTime
| filter duration >= $p.minDuration
Abrundung auf die nächste Stunde
In diesem Beispiel wird der Zeitbereich auf die nächste volle Stunde angepasst, bevor die Protokolle auf der Grundlage der Dauer gefiltert werden. Jede Zeitberechnung kann mit $p.timeRange.* durchgeführt werden.
source logs between $p.timeRange.startTime/1h and $p.timeRange.endTime/1h+1h
| filter duration >= $p.minDuration
Zusammenführung der Daten der letzten Woche für den gleichen Zeitraum
Die folgende Abfrage vergleicht mit dem Befehl join die Anzahl der Protokolle pro Subsystem von heute mit denen von vor genau einer Woche.
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
Dieses ausführliche Beispiel bietet eine Möglichkeit, bei Bedarf mehr Kontrolle über den Zeitbereich zu erhalten.
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