具有多个百分位数的 Kapacitor 任务
Kapacitor task with multiple percentiles
我想在将它们放入 influxdb 之前使用 kapacitor 聚合来自 telegraf 的最后一分钟的数据,我也需要计算几个百分位数。所以我为 test
写了一个简单的勾号
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')
在我的数据库中,我只有第 50 个百分位数的值,我对此并不感到惊讶,因为我在我的评估中使用 "percentile" 但是,我仍然无法在 Kapacitor 文档中找到任何关于如何获得的线索我需要的结果。
这里有 "visual" 我渴望得到的结果:
time 50p 90p someOtherP's otherDataICanPropablyHandle
哈尔普!
您两次使用相同的测量流(以及其中的相同数据),因此数据被弹出。首先你应该保存测量流:
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()
最后,是时候定义连接流了:
var joinedStreams = firstPerc
|join(secondPerc)
.as('50', '90')
.tolerance(1s)
.streamName('measurementName')
|influxDBOut()
.database('myDBInInflux')
.retentionPolicy('autogen')
.create()
输出:
time 50.percentile 90.percentile
我强烈建议使用 .tolerance(),它将在同一公差周期内对测量进行分组。
我想在将它们放入 influxdb 之前使用 kapacitor 聚合来自 telegraf 的最后一分钟的数据,我也需要计算几个百分位数。所以我为 test
写了一个简单的勾号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')
在我的数据库中,我只有第 50 个百分位数的值,我对此并不感到惊讶,因为我在我的评估中使用 "percentile" 但是,我仍然无法在 Kapacitor 文档中找到任何关于如何获得的线索我需要的结果。
这里有 "visual" 我渴望得到的结果:
time 50p 90p someOtherP's otherDataICanPropablyHandle
哈尔普!
您两次使用相同的测量流(以及其中的相同数据),因此数据被弹出。首先你应该保存测量流:
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()
最后,是时候定义连接流了:
var joinedStreams = firstPerc
|join(secondPerc)
.as('50', '90')
.tolerance(1s)
.streamName('measurementName')
|influxDBOut()
.database('myDBInInflux')
.retentionPolicy('autogen')
.create()
输出:
time 50.percentile 90.percentile
我强烈建议使用 .tolerance(),它将在同一公差周期内对测量进行分组。