Kapacitor / InfluxDB:如何计算标签/节点?

时间:2018-10-31 18:06:25

标签: influxdb kapacitor

我正在尝试设置kapacitor和influxdb以处理应用程序的某些特定用例。

我只有一项基本测量:

Measurement Healthz:
  fields: status(int), msg(string)
  tags: player_id

状态字段表示玩家可以向系统报告的某些状态:0表示健康,1表示不健康。每个唯一的玩家都将尝试每分钟至少一次报告其状态。

默认保留策略持续31天,因此我无法从该时间序列构造两个公开列表;最好在TICK脚本中:

清单1:显示唯一的玩家ID的数量,这些ID一直报告到该时间点之前的任何状态。例如:

[   
  { time: 2018-10-01T12:00:00.000Z, count: 2382 },   
  { time: 2018-10-01T13:00:00.000Z, count: 2422 },
  .
  .
  .
  { time: 2018-10-31T14:00:00.000Z, count: 7535 }   
]

清单2:包含过去一个小时内所有唯一的player_id及其报告的最高状态,或者IFF不存在这种状态,请将该player_id的最新报告状态使用。

我已经尝试了两天,但无济于事。我设法通过使用以下代码(NodeJS)解决了第一个列表:

await influx.createRetentionPolicy('1h', { duration: '1h', replication: 1, isDefault: true });
await influx.createRetentionPolicy('31d', { duration: '31d', replication: 1, isDefault: false });

await influx.createContinuousQuery('cq_1m_healthz', `
  select max(status) as status, msg
  into "31d"."healthz"
  from healthz
  group by player_id, time(1h)
`);

await influx.createContinuousQuery('cq_1m_registered', `
  select count(status)
  into "31d"."registered"
  from (
    select last(status) as status
    from "31d"."registered"
    group by player_id
  )

  group by time(1h)
`);

但是,如果可能的话,我想在kapacitor中这样做,第二个我不知道从哪里开始。我想避免通过普通的NodeJS代码执行此操作;例如调用多个查询并自己组合结果。

有什么建议吗?

谢谢!

0 个答案:

没有答案