запрос InfxDB для графана с сгруппированными данными - PullRequest
0 голосов
/ 16 мая 2018

Я использую infxdb для хранения некоторых метрик обслуживания. Это простые метрики, такие как считанные байты или активные соединения. Затем с графаной я сочиняю несколько визуализаций поверх этого.

Отображение чего-либо в виде «прочитанных байтов» довольно просто, это в основном суммирование значений, сгруппированных по временному интервалу.

SELECT sum("value") FROM "bytesReceived" WHERE $timeFilter GROUP BY time($__interval) fill(0)

Именно из-за «активных соединений» у меня возникают проблемы с выяснением. Это сокеты tcp, подключенные к услуге, где измерением является количество подключенных сокетов; это обновляется всякий раз, когда сокет подключается или отключается.

Если бы у меня был только один экземпляр службы, это было бы легко, я бы просто сделал что-то вроде

SELECT last("value") FROM "activeConnections" WHERE $timeFilter GROUP BY time($__interval) fill(0)

Дело в том, что существует несколько экземпляров службы, которые создаются динамически. Измерение записывается с дополнительным тегом «host», который заполняется идентификатором для службы времени выполнения.

Итак, давайте перейдем к точкам данных.

select * from activeConnections where time > '2018-05-16T16:00:00Z' and time < '2018-05-16T16:10:00Z'

Это выплевывает что-то вроде

time                host         value
----                ----         -----
1526486436041433600 58e5bd04a313 5
1526486438158741000 58e5bd04a313 4
1526486438712713000 58e5bd04a313 3
1526486811218129000 29b39780fd7b 4

Итак, как вы можете заметить, у нас получается 3 соединения на одном хосте и 4 на другом. Проблема в том, что ... отображение данных, объединенных в единое целое, где последней строкой должно быть, например, 7.

Я попытался сгруппировать данные по хосту

select last(value) from activeConnections where time > '2018-05-16T16:00:00Z' and time < '2018-05-16T16:10:00Z' group by host

, что дает мне последнее значение для каждой группы

name: activeConnections
tags: host=29b39780fd7b
time                last
----                ----
1526486811218129000 4

name: activeConnections
tags: host=58e5bd04a313
time                last
----                ----
1526486706993942700 3

Также попытался использовать подзапрос

select * from ( select last(value) from activeConnections where time > '2018-05-16T16:00:00Z' and time < '2018-05-16T16:10:00Z' group by host )

Но у меня та же проблема, когда я не знаю, как правильно сгруппировать вещи для графаны с временным интервалом.

Есть ли какие-либо комментарии и помощь? Буду очень признателен.

1 Ответ

0 голосов
/ 22 мая 2018

Хорошо,

Кажется, я нашел решение.Жаль, что Grafana не поддерживает подзапросы, поэтому запрос должен быть вставлен вручную с необработанным представлением.Здесь открыта проблема .

Итак, мне нужен был способ сгруппировать все значения хостов в одну сюжетную линию.Это может быть достигнуто с помощью следующего запроса:

SELECT sum("value") FROM (SELECT last("value") as "value" FROM "activeConnections" WHERE $timeFilter GROUP BY time($__interval), "host") GROUP BY time($__interval) fill(previous)

Я был близок раньше, но не заметил, что во внутреннем выборе, если вы не дадите имя полученному выбору, оно будет выглядеть как"последний" по умолчанию.Поэтому я пытался суммировать «значение», но поле не существовало из подзапроса.

Надеюсь, это кому-нибудь поможет.Спасибо Юрий, за ваш комментарий.Это указало мне в правильном направлении.

...