Select

Influxdb 和 Grafana 結合多個 SELECT

  • December 10, 2019

我在 Influx 中有一些用 Grafana 繪製的網路計數器。

我正在嘗試結合來自幾個乙太網介面的統計數據並將它們結合起來以顯示聚合頻寬。

這兩個單獨的查詢單獨工作,但我不知道如何編寫它來組合這兩個。

SELECT 8 * non_negative_derivative(mean("value"), 1s ) 
FROM "inoctets" 
WHERE "host" = 'myhost1' AND $timeFilter 
GROUP BY time(1s) fill(null)

SELECT 8 * non_negative_derivative(mean("value"), 1s ) 
FROM "inoctets" 
WHERE "host" = 'myhost4' AND $timeFilter 
GROUP BY time(1s) fill(null)

編輯:FWIW 我正在執行 Influx 1.1.1 和 Grafana 4.1.1

將不同標籤下的聚合測量組合起來有點棘手。我設法找到了這個有答案的文章。

關鍵是使用子查詢(InfluxDB 1.2+)分別擷取每個標籤的測量值。然後,由於欄位名稱相同,因此需要重命名。最後,您可以根據需要操作它們。這是您的範例:

SELECT 8 * (non_negative_derivative(mean("inoctets1"), 1s )
         + non_negative_derivative(mean("inoctets4"), 1s ))
AS "inbytestotal"
FROM (
   SELECT "value"
   AS "inoctets1"
   FROM "inoctets"
   WHERE "host" = 'myhost1' AND $timeFilter
), (
   SELECT "value"
   AS "inoctets4"
   FROM "inoctets"
   WHERE "host" = 'myhost4' AND $timeFilter
)
GROUP BY time(1s) fill(null)

經過數週的反複試驗後想通了。我試圖使用 AND 而不是 OR。但是在我將 SUM 添加到組合中之前,OR 不會給我正確的值。

所以對於未來的搜尋者來說,這行得通..

SELECT 8 * non_negative_derivative(sum("value"), 1s) 
FROM "inoctets" 
WHERE "host" = 'myhost1' OR "host" = 'myhost4' AND $timeFilter 
GROUP BY time($interval)

引用自:https://dba.stackexchange.com/questions/162436