Рассчитать разницу между первым и последним элементом в векторе диапазона счетчиков - PullRequest
0 голосов
/ 08 января 2020

Я использую запрос PromQL для вычисления совокупного трафика c, отправленного / полученного через некоторые интерфейсы на любом узле за последние 60 минут. С метриками Prometheus Node Exporter:

delta(node_network_receive_bytes_total{device=~"ens.*"}[60m])*8

И это прекрасно , поскольку узел не перезагружается в этом интервале , значение - это просто разница между кончиком вектора и его хвостом , Когда система перезагружается и счетчик сбрасывается, значение функции перестает отражать упомянутый результат.

Например, если этот график для node_network_transmit_bytes_total:

IPv6 traffic

... функция вернет -9MiB вместо 10.2 MiB.

Я думаю, я могу поиграть с rate() s, чтобы получить оценку, также используя время. Но есть ли лучшая функция / способ получить фактическую вещь ?

1 Ответ

2 голосов
/ 09 января 2020

Как указано в документации delta () :

delta следует использовать только с датчиками.

Вы должны использовать увеличение () функция, которая задается от c до счетчики .

Перерывы в монотонности (например, сброс счетчика из-за перезапуска цели) автоматически корректируются for.

Это одна из основных причин различения guish между датчиками и счетчиками. См. этот ответ о разнице .

Счетчики можно идентифицировать одним из следующих способов:

  • тип в выводе текстового файла (например: # TYPE http_requests_total counter)
  • значение монотонно увеличивается (графана предлагает функцию, связанную со счетчиком, когда обнаруживает ее)
  • имя должно заканчиваться _total (если экспортер соблюдает рекомендации )
...