2017-11-07 10 views
0

私はtelegrafからのデータを、kapacitorに流入させる前に集計したいと思っています。そして私は、私が50パーセンタイルのための唯一の値を持っている、と私はevalの中で「パーセンタイル」を使用するので、私はそれに驚いていないのですが、それでも、私は見つけることができない私のデータベースでテスト複数の百分位数を持つKapacitorタスク

var firstPerc = stream 
    |from() 
     .measurement('my_tmp_measurement_from_telegraf') 
var secondPerc = stream 
    |from() 
     .measurement('my_tmp_measurement_from_telegraf') 
firstPerc 
    |join(secondPerc) 
     .as('fp', 'sp') 
     |percentile('fp.myAggVal', 50.0) 
     |eval(lambda: "percentile") 
      .as('50p') 
     |percentile('sp.myAggVal', 90.0) 
     |eval(lambda: "percentile") 
      .as('90p') 
     |window() 
      .period(60s) 
      .every(60s) 
      .align() 
     |influxDBOut() 
      .database('myDBInInflux') 
      .retentionPolicy('autogen') 

のためのシンプルな目盛りを書きました私が必要とする結果を得る方法についてのKapacitorのドキュメントの手がかり。

time 50p 90p someOtherP's otherDataICanPropablyHandle 

HALP:ここ

あなたは私が切望する "視覚的な" 結果を持っています!

答えて

0

同じ測定ストリーム(およびその中の同じデータ)を2回使用しているため、データがポップされます。まず、測定ストリームを保存する必要があります。

var myStream = stream 
    |from() 
     .measurement('my_tmp_measurement_from_telegraf') 

保存された測定値を使用してストリームを定義します。あなたはここになど、適切なグループ化、評価を、定義する必要があります。:

var firstPerc = myStream 
    |percentile('myAggVal', 50.0) 
    |eval(lambda: "percentile") 
     .as('percentile') 
    |window() 
     .period(60s) 
     .every(60s) 
     .align() 
var secondPerc = myStream 
    |percentile('myAggVal', 90.0) 
    |eval(lambda: "percentile") 
     .as('percentile') 
    |window() 
     .period(60s) 
     .every(60s) 
     .align() 

をFinaly、それはストリーム結合を定義してみましょう:

var joinedStreams = firstPerc 
    |join(secondPerc) 
     .as('50', '90') 
     .tolerance(1s) 
     .streamName('measurementName') 
     |influxDBOut() 
      .database('myDBInInflux') 
      .retentionPolicy('autogen') 
      .create() 

出力:私は強く使用することをお勧め

time    50.percentile 90.percentile 

を。 tolerance()は、同じ許容期間内に測定値をグループ化します。

関連する問題