Почему загрузка ЦП рассчитывается с использованием скорости или скорости в Prometheus? - PullRequest
1 голос
/ 07 апреля 2019

Я знаю, что загрузка ЦП дается в процентах от времени простоя по отношению к общему времени ЦП. В Prometheus функции rate или irate рассчитывают скорость изменения в векторном массиве.

Люди часто вычисляют загрузку ЦП с помощью следующего выражения PrmoQL:

(100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100))

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

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Здесь можно развернуть несколько вещей.

Сначала rate против irate. Ни связанный вопрос, ни сообщение в блоге не обращаются к этому (но ответ Эйтана не затрагивает его). Разница в том, что rate оценивает среднюю скорость в запрошенном диапазоне (в вашем случае - 1 минуту), а irate вычисляет скорость только на основе двух последних выборок. Оставляя в стороне часть «оценки» (см. этот ответ , если вам интересно) практическое различие между двумя заключается в том, что rate сгладит результат, тогда как irate вернет выборку ЦП. использование, которое, скорее всего, покажет крайности в использовании процессора, но также более склонно к псевдонимам .

например. если вы посмотрите на загрузку ЦП Прометея, вы заметите, что он имеет довольно постоянную базовую линию, и каждый раз при оценке большой группы правил наблюдается скачок. Учитывая временной интервал, который был по крайней мере таким же, как интервал оценки Прометея, если бы вы использовали rate, вы бы получили более или менее постоянное использование ЦП с течением времени (то есть плоская линия). С irate (при условии интервала очистки 5s) вы получите одну из 2 вещей:

  1. если ваше разрешение (то есть шаг) не было выровнено с интервалом оценки Prometheus (например, разрешение было 1m, а интервал оценки был 13s), вы бы получили случайную выборку использования ЦП и, надеюсь, увидели бы значения близко к максимальному и наименьшему использованию ЦП во времени на графике;
  2. если ваше разрешение было выровнено с интервалом оценки Prometheus (например, 1m разрешение и 15s интервал оценки), то вы бы везде увидели базовое использование ЦП (потому что вы случайно посмотрели на интервалы 5s, установленные 1 с интервалом в одну минуту, когда оценка правил не происходит) или пиковое использование ЦП везде (потому что вы случайно видите интервалы в 5s с интервалом в 1 минуту, каждый из которых охватывает оценку правил).

Что касается второго пункта, кажущейся путаницы в том, что представляет собой метрика node_cpu_seconds_total, это счетчик . То есть это число, которое непрерывно увеличивается и, по сути, измеряет количество времени, в течение которого процессор простаивал с момента запуска экспортера. Абсолютное значение не так уж и полезно (поскольку оно зависит от того, когда был запущен экспортер, и будет падать до 0 при каждом перезапуске). Что интересно, так это то, насколько он увеличился за определенный период времени: из этого вы можете рассчитать для заданного периода времени скорость увеличения в секунду (среднее значение с rate; мгновенное с irate) или абсолютный прирост (с increase). Таким образом, rate(node_cpu_seconds_total{mode="idle"}[1m]) и irate(node_cpu_seconds_total{mode="idle"}[1m]) дадут вам соотношение (между 0.0 и 1.0) того, сколько ЦП не использовалось (за последнюю минуту и ​​соответственно между последними 2 выборками).

0 голосов
/ 07 апреля 2019

Похоже, что здесь уже дан ответ: Prometheus - конвертировать cpu_user_seconds в использование ЦП%? Глядя на предоставленную ссылку в ответах: https://www.robustperception.io/understanding-machine-cpu-usage вы можете увидеть объяснение.Лично я думаю, что гнев в этом контексте имеет больше смысла, так как он покажет вам среднее значение по последним активным точкам (в сравнении со скоростью, которая усреднит весь выбранный временной интервал).

...