我正在尝试设置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代码执行此操作;例如调用多个查询并自己组合结果。
有什么建议吗?
谢谢!