在 DataPrime 查詢中使用查詢參數
IBM® Cloud Logs DataPrime $p 變數可讓您在 DataPrime 查詢中加入自訂儀表板和時間相關參數的變數。
此功能可將變數外部化,就像直接寫入查詢一樣。 透過允許使用者定義輸入和上下文資料處理,可提高篩選、計算和視覺化的彈性。
$p 如何運作?
-
$p代表可在 widget、查詢和外部篩選器(例如儀表板時間選擇器)中使用的查詢參數。 -
$p可進行動態過濾和其他動作,而不需要手動修改查詢。 -
使用者可以在儀表板中傳遞和操作這些參數。
定義查詢參數
設定自訂儀表板以及在日誌檢視中建立查詢時,可以使用 $p 變數。
自訂儀表板
在自訂儀表板中建立變數後,使用者選擇的變數值就會反映為 DataPrime 查詢中的查詢參數,使用 $p.<variable_name>。
自訂儀表板中的變數會被視為字串或多重字串值,這表示無法直接定義數字變數。 數值變數可在查詢中使用,例如 filter duration > $p.minDuration。
日誌
在日誌檢視中,您可以使用 $p.timeRange.* 在 DataPrime 查詢中進行時間計算,$p,讓您可以從 UI 時間選擇器所決定的時間視窗中取得資料來源。
時間相關參數
與時間相關的參數會自動建立。 您可以在自訂儀表板和日誌檢視中使用 timeRange,從 UI 時間選擇器決定的時間視窗取得資料來源。
與時間相關的參數包括
$p.timeRange.startTime- UI 時間選擇器的開始時間 (例如 2024-03-06T08:00:00Z )
$p.timeRange.endTime- UI 時間選擇器的結束時間 (例如 2024-03-06T12:00:00Z )
查詢參數使用範例
以下各節提供 $p 使用範例。
使用單值變數
下面的查詢範例包含一個單值變數,使用 == 表示。
source logs
| filter cluster_name == $p.cluster
這會過濾 cluster_name 與使用者定義的單值變數 $p.cluster 吻合的記錄。
使用者可以使用自訂儀表板使用者介面動態修改此值。
使用多重選擇變數
多重選擇變數可讓使用者在單一參數中傳遞多個潛在值。
處理「任何值」選擇
當使用者選擇「任何值」時,系統會將其視為 null,意即忽略篩選條件。
source logs
| filter $p.clusters == null || $p.clusters.arrayContains($d.clusterId)
如果使用者為 $p.clusters 選擇「任何值」,它會被視為 null,移除篩選條件。 否則,篩選程式會確保 $d.clusterId 存在於 $p.clusters 的選定值範圍內。
靜態值清單
建立 minDurationSeconds 變數,其中包含靜態的值清單 (例如:1、5、10、30、60)。 這些值會以字串形式處理,但可以在查詢中以數字形式使用,如下所示:
source logs
| filter duration ≥ $p.minDuration:number
使用變數定義動態 groupby 欄位
groupby 使用動態變數,可讓查詢根據使用者定義的條件進行調整,從而實現更靈活的資料聚合和分析。 下面的查詢根據 $p.myGroupByVar 變數指定的欄位對資料進行群組,然後計算每個群組中出現的次數,從而彙總結果。
groupby $d[$p.myGroupByVar] calculate count()
這與 groupby $p.my_group_by_variable calculate count() 不同。 由於變數是字串,因此執行此查詢實際上與 groupby 'my_value' calculate count() 相同,也就是在靜態字串上執行 groupby,將所有結果彙總為一組,稱為 my_value。
篩選特定時間範圍內的日誌
這會過濾指定時間範圍內的記錄,同時確保持續時間欄位大於或等於 $p.minDuration。
source logs between $p.timeRange.startTime and $p.timeRange.endTime
| filter duration >= $p.minDuration
四捨五入到最接近的小時
此範例先將時間範圍調整為最接近的整小時,然後再根據持續時間篩選記錄。 任何時間計算都可以使用 $p.timeRange.*。
source logs between $p.timeRange.startTime/1h and $p.timeRange.endTime/1h+1h
| filter duration >= $p.minDuration
結合上周相同時段的資料
使用 join 指令,以下查詢會連接並比較每個子系統從今天開始的日誌數量,以及剛好一周前的日誌數量。
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
如果需要,這個冗長的範例提供了一種方法,可以對時間範圍獲得更多控制。
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