Как получить разницу между текущим значением и предыдущим значением в притоке? - PullRequest
0 голосов
/ 05 июля 2019

я использую collectd для мониторинга системной метрики .... Для сетевой метрики мне нужно знать, какой будет входящий и исходящий трафик в минуту ... Но Rx (общее количество переданных пакетов) и Tx (общее количествополученных пакетов) пакеты отдают данные с момента последней перезагрузки машины ...

Поэтому мне нужно запросить InfBox, чтобы получить разницу между текущим значением и предыдущим значением. Как запросить, чтобы получить разницу .....

Я использую запрос как

select difference(last("value")) from interface_rx WHERE  "type" = 'if_octets' > now() - 1h group by time(10s)

Пожалуйста, помогите мне .. Я не получаю точный вывод, как мне нужно

введите описание изображения здесь

Получаю следующую ошибку при использовании запроса

Select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m)

введите описание изображения здесь

введите описание изображения здесь

1 Ответ

0 голосов
/ 05 июля 2019

Это должно быть примерно так

select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m)

Этот запрос должен возвращать около 60 значений; 1 разница в минуту за прошедший час. last в этом случае означает, что для каждого 1-минутного периода используется последнее значение (если их больше одного)

Отличия к вашему запросу: and time > now() - 1h отсутствует - возможно, это ошибка редактирования, но она не показалась действительной. если вы хотите статистику в минуту, тогда вам нужно group by time(1m). Вы группировали по 10 секунд, поэтому результатом была бы разница каждые 10 секунд.

Что вы также можете захотеть сделать, это заполнить пропущенные значения предыдущим доступным значением (и соответственно вы получите ноль за этот период) select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m) fill(previous) РЕДАКТИРОВАТЬ: fill(previous), вероятно, не то, что вы хотите, потому что, если самые последние значения еще не записаны, они будут заменены более старыми, и вы получите разницу = 0 в качестве самого последнего значения.

Если вы хотите только самое последнее значение, вы можете сделать что-то вроде select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m) fill(previous) order by time DESC limit 1

...