что такое avg без выполнения здесь

#prometheus #promql

#prometheus #promql

Вопрос:

Я вижу PromQL, который был запущен против экспортера узлов в системе Linux, как показано ниже:

 avg without(cpu, mode)(rate(node_cpu_seconds_total{mode="idle"}[1m]))
  

Я могу легко понять, что делает следующее :

 rate(node_cpu_seconds_total{mode="idle"}[1m]
  

Но я не понял, что

 avg without(cpu, mode)
  

выполняет. Какая польза от
без (процессор, режим)

Можете ли вы, пожалуйста, помочь с этим?

Спасибо

Ответ №1:

В документации здесь содержится подробная информация об этом without предложении:

without удаляет перечисленные метки из результирующего вектора`

В вашем случае запрос действительно должен быть avg (rate(node_cpu_seconds_total{mode="idle"}[1m])) without (cpu, mode) ( without идет после avg() ).

Он удалит обе метки cpu и mode (кстати, режим всегда idle в любом случае) и вычислит среднее количество незанятого процессора, доступное для каждого экземпляра.

к вашему сведению, то же самое также может быть достигнуто с помощью by (instance) вместо использования without(cpu, mode) .

Комментарии:

1. without может находиться между avg (или чем бы ни было агрегирование) и его круглой скобкой. Некоторые люди (включая меня) предпочитают именно так. И вот как Prometheus форматирует его при выводе (например, на своей /rules странице): count without(instance) (up) .

2. by (instance) эквивалентно только without(cpu, mode) if instance , cpu и mode являются единственными присутствующими метками. Если какая-либо метка добавлена с помощью конфигурации очистки (например, env="prod" ), то они больше не эквивалентны, и используете ли вы ту или иную, зависит от того, чего вы хотите достичь: агрегировать только по экземпляру или агрегировать только cpu метку (и удалять mode в процессе).