如何使用刻度脚本(Kapacitor)更改标签名称?

时间:2017-09-18 20:51:56

标签: influxdb kapacitor

假设我在我的Influx数据库中有一个名为'cpu'的测量值:

name: cpu
time                  host   app             org          usage_idle                                                     ----                  -----  ------------    ------------  ----------       
1505758901462105873  serverA  applicationA    org1           23
1505758901462106873  serverB  applicationA    org2           42

我写了一个tick脚本来查询来自这个测量的数据:

var data = batch
        |query('''select 100-min(usage_idle) as used_percent from "application"."autogen"."cpu"''')
            .period(1m)
            .every(10s)
            .groupBy(time(1s), 'app', 'org', 'host')
            .align()

// Here I want to write Lambda? to change tag names

    data|influxDBOut()
            .database('someDataBase')
            .measurement('someMeasurement')
            .precision('s')

我希望此查询的结果包含而不是'app' - 'app_name',而不是'org' - 'app_group'。我应该在tick脚本中包含什么才能更改标签名称? 注意!作为一种解决方法,我可以在结果中插入名为“app_name”和“app_group”的新列,但我不想在其中添加更多列并且具有重复数据。

寻找一些建议。谢谢

1 个答案:

答案 0 :(得分:2)

这是解决方案! 我们的想法是添加一个新标签并删除旧标签(而不是重命名)。上面的tick脚本如下所示:

var data = batch
        |query('''select 100-min(usage_idle) as used_percent from "application"."autogen"."cpu"''')
            .period(1m)
            .every(10s)
            .groupBy(time(1s), 'app', 'org', 'host')
            .align()

|eval(lambda: "app") .as('app_name') .keep('used_percent') .tags('app_name') |delete() .tag('app') |eval(lambda: "org") .as('app_group') .keep('used_percent') .tags('app_group') |delete() .tag('org') data|influxDBOut() .database('someDataBase') .measurement('someMeasurement') .precision('s')