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 ?

  • $p stellt Abfrageparameter dar, die in Widgets, Abfragen und externen Filtern, wie z. B. einem Dashboard-Zeitpicker, verwendet werden können.

  • $p ermö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