2017-08-01 82 views
0

我試圖產生與Kapacitor批次基線|通過查詢從InfluxDB 1,2,3和相同的間隔3周前,那麼它前進換檔和像這樣接合在一起的查詢:Kapacitor LAMBDA平均數

var w1 = batch 
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""') 
     .offset(1w).period(period).every(1m).align().groupBy(time(1m)) 
    |shift(1w) 

var w2 = batch 
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""') 
     .offset(2w).period(period).every(1m).align().groupBy(time(1m)) 
    |shift(2w) 

var w3 = batch 
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""') 
     .offset(3w).period(period).every(1m).align().groupBy(time(1m)) 
    |shift(3w) 

var w4 = batch 
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""') 
     .offset(4w).period(period).every(1m).align().groupBy(time(1m)) 
    |shift(4w) 

var bj = w1 
    |join(w2, w3, w3) 
     .as('w1', 'w2', 'w3', 'w4') 
     .fill('null') 

var b = bj 
    |eval(lambda: (""w1.mean"" + ""w2.mean"" + ""w3.mean"" + ""w4.mean"")/float(4.0)) 
     .as('avg') 

我正在使用Full Outer Join,因爲某些周可​​能缺少一個值,在這種情況下,我會將基線計算爲3個當前值的平均值。

但是看起來lambda不支持Mean()或任何這樣的數學函數。它似乎也不支持檢查空值。

有沒有像這樣計算基線的方法?

同樣,一旦基線計算完畢,如何保持緩存,以便可以根據基線檢查傳入流數據?

任何幫助表示讚賞!謝謝

+0

只是在這裏大聲思考。如果一個特定的數據丟失了,你可以對它進行「線性插值」嗎?這樣你就可以確保總是有4個值,你可以用4來除。讓我知道。謝謝 –

回答

0

首先,嘗試使用批量var而不是shift的偏移量。

偏移將值從X以前分鐘,小時,天...

的轉變節點應在連接過程,當然可以使用:

previous 
    |shift(1w) 
    |join(current) 
    ...... 

這裏有一個例子: https://github.com/influxdata/kapacitor/issues/746

關於加入4個不同的流,不同的時間,因爲我以前的評論,我想這不會工作...也許與工會,而不是加入節點的作品,但不知道!

你總是可以有3個刻度,檢查目前到過去的一週,2周等......