Kapacitor/InfluxDB: Как считать теги / узлы?

Я пытаюсь настроить kapacitor и influenxdb для обработки некоторых конкретных случаев использования приложения.

У меня есть только одно основное измерение:

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

Поле статуса представляет некоторый статус, о котором игрок может сообщить системе: 0 - здоров, 1 - нездоров. Каждый уникальный игрок будет пытаться сообщать о своем статусе хотя бы раз в минуту.

Политика сохранения по умолчанию длится 31 день, и я не могу построить два открытых списка из этой временной серии; желательно в сценарии TICK:

Список 1: показывает количество уникальных идентификаторов игроков, которые сообщали о каком-либо статусе до этого момента времени. Пример:

[   
  { 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 и их самый высокий зарегистрированный статус за последний час. ИЛИ если такой статус не существует, используйте последний сообщенный статус для этого 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; ex вызывает несколько запросов и объединяет результаты сам.

Есть идеи, как это сделать?

Спасибо!

0 ответов

Другие вопросы по тегам