Как получить процент использования ЦП для пространства имен из Prometheus?

Наш продукт находится в кластере Kubernetes на нашем сервере. Он еще не запущен в производство, поэтому в кластере работает несколько экземпляров для разных целей, каждый в своем собственном пространстве имен. Мне нужно запустить несколько нагрузочных тестов в одном из пространств имен, а тем временем мне нужно отслеживать использование ЦП. У нас есть Прометей и Графана для мониторинга.
Одна из целей этих тестов - узнать, какая нагрузка приводит к максимальному использованию ЦП.

Итак, я ищу способ запросить использование ЦП пространства имен в процентах.

Вот что я положил вместе на основе примеров:

sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"}) * 100

Однако что-то должно быть не так с этим решением, потому что иногда на приборной панели отображаются значения, превышающие 100%. Подумав, что единицы должны быть разными, я попытался найти точную спецификацию этих показателей, но мне это не удалось.

(К сожалению, я даже не знаю, как рассчитывается загрузка ЦП и что на самом деле 100% означает.)

Я искал показатели, которые можно было бы использовать для решения этой проблемы, с помощью нескольких экспортеров: cAdvisor , Узел , kube-state-metrics и Больше. Даже в этой , казалось бы, исчерпывающей статье, которая была доведена до моего сведения, утверждается, что метрика, которую я ищу, является важной, но не предоставляется никакого способа ее запросить.

Любая помощь будет буду признателен, спасибо.

1
задан 12 August 2019 в 18:15
2 ответа

Вы можете проверить использование ЦП пространства имен, используя произвольные метки с Prometheus. В этой статье вы полностью описали, что вам нужно делать. Формула будет выглядеть примерно так:

namespace:container_cpu_usage_seconds_total:sum_rate =
   sum(rate(container_cpu_usage_seconds_total{image!=""}[5m])) by (namespace)

namespace:container_memory_usage_bytes:sum =
   sum(container_memory_usage_bytes{image!=""}) by (namespace)

Также другой подход заключается в использовании экспортера Prometheus , который позволяет легко получить данные об использовании ЦП по пространству имен, узлу или пулу узлов.

0
ответ дан 4 December 2019 в 02:46

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

Итак,

sum(kube_pod_container_resource_limits{resource="cpu", unit="core", namespace="$Namespace"})

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

Однако, я узнал, что теоретически пространство имён может использовать все ресурсы, делегированные узлам кластера. Также я узнал, что наш продукт, скорее всего, будет работать на машинах, очень похожих на этот тестовый сервер в производстве. Поэтому, чтобы получить использование CPU в процентах, в моем счастливом случае можно вычислить использование/доступность CPU в кластере.

Вот как я это делаю:

sum (rate (container_cpu_usage_seconds_total{namespace="$Namespace"}[1m])) / sum(machine_cpu_cores) * 100

где $Namespace - это имя пространства имен.

(То же самое относится и к использованию памяти.)

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

.
0
ответ дан 4 December 2019 в 02:46

Теги

Похожие вопросы