Как получить разницу между текущим значением и предыдущим значением в influxdb?

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

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

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

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)

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

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


person Shwettha RR    schedule 05.07.2019    source источник
comment
В правом верхнем углу Grafana, где написано «последние 5 минут»; Вы можете изменить его на последний 1 час? Также вы можете навести курсор мыши на красный индикатор в верхнем левом углу, чтобы увидеть сообщение об ошибке?   -  person Nikolay Manolov    schedule 08.07.2019
comment
@NikolayManolov Я добавил изображение выше ... пожалуйста, помогите мне   -  person Shwettha RR    schedule 09.07.2019
comment
Хм, как называется поле (столбец таблицы), для которого вы хотите вычислить разницу? Вроде не value. В difference(last("value")) часть value должна быть именем фактического поля, которое вам нужно. И это должно быть поле, а не тег.   -  person Nikolay Manolov    schedule 09.07.2019
comment
@NikolayManolov Я прикрепил приведенное выше изображение моих данных influxdb ... Мое имя файла - значение .... мне нужно, чтобы каждая минута отличалась от предыдущего значения.   -  person Shwettha RR    schedule 09.07.2019


Ответы (1)


Это должно быть что-то вроде этого

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

person Nikolay Manolov    schedule 05.07.2019
comment
Пожалуйста, смотрите вышеупомянутый отредактированный мой вопрос... чтобы увидеть мою ошибку - person Shwettha RR; 08.07.2019