Почему в Prometheus есть и счетчики, и датчики, если датчики могут действовать как счетчики? - PullRequest
1 голос
/ 02 ноября 2019

При выборе между Counter и Gauge, Документация Prometheus гласит, что

Для выбора между счетчиком и датчиком существует простое эмпирическое правило: еслизначение может снизиться, это мера. Счетчики могут только увеличиваться (и сбрасываться, например, при перезапуске процесса).

Кажется, они покрывают перекрывающиеся варианты использования: вы можете использовать датчик, который только увеличивается. Так зачем вообще создавать метрический тип Counter? Почему бы вам просто не использовать Gauges для обоих?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2019

С концептуальной точки зрения датчик и счетчик имеют разные цели

  • датчик обычно представляет состояние, обычно с целью обнаружения насыщения.
  • абсолютное значениесчетчик на самом деле не имеет смысла, реальная цель - скорее вычислить эволюцию (обычно использование) с такими функциями, как irate/rate(), increase() ...

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

Технически счетчик имеет два важных свойства:

  1. он всегда начинается с 0
  2. он всегда увеличивается (т.е. увеличивается в коде)

Если приложение перезапускается между двумя соскобами Прометея, значение второго соскоба, вероятно, будет меньше, чем предыдущий, и увеличение может быть восстановлено (отчасти потому, что вы всегда потеряете увеличение между последним соскобом исброс).

Простой алгоритм для вычисления увеличения счетчика между скрепами от t1 до t2:

  • , если counter(t2) >= counter(t1), то increase=counter(t2)-counter(t1)
  • , еслиcounter(2) < counter(t1) затем increase=counter(t2)

В заключение, с технической точки зрения, вы можете использовать датчик вместо счетчика при условии, что вы сбрасываете его в 0 при запуске и увеличиваете его только, но ненарушение контракта приведет к неправильным значениям.

В качестве примечания, я также ожидаю, что реализация счетчика будет использовать целочисленное представление без знака, в то время как gauge будет использовать плавающую точкупредставление. Это имеет некоторые незначительные последствия для кода, такие как возможность автоматического переполнения до 0 и лучшая поддержка атомарных операций на текущем процессоре.

0 голосов
/ 03 ноября 2019

Для счетчиков вы заботитесь о том, насколько быстро он увеличивается, тогда как для датчиков вы заботитесь о фактическом значении. В то время как могут быть датчики, которые (в теории) только повышаются, это не делает их счетчиками.

...