Как рассчитать использование процессора контейнеров в кубернетах с прометеем в качестве мониторинга?

Я хочу рассчитать использование процессора всеми модулями в кластере кубернетов. Я нашел две метрики в прометее, которые могут быть полезны:

container_cpu_usage_seconds_total: Cumulative cpu time consumed per cpu in seconds.
process_cpu_seconds_total: Total user and system CPU time spent in seconds.

Cpu Usage of all pods = increment per second of sum(container_cpu_usage_seconds_total{id="/"})/increment per second of sum(process_cpu_seconds_total)

Однако я обнаружил, что каждый второй приращение container_cpu_usage{id="/"} больше, чем приращение sum(process_cpu_seconds_total). Таким образом, использование может быть больше 1...

Ответ 1

Это я использую для получения использования ЦП на уровне кластера:

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

Я также отслеживаю использование ЦП для каждого модуля.

sum (rate (container_cpu_usage_seconds_total{image!=""}[1m])) by (pod_name)

У меня есть полное решение kubernetes-prometheus на GitHub, возможно, может помочь вам с большей метрикой: https://github.com/camilb/prometheus-kubernetes

введите описание изображения здесь

введите описание изображения здесь

Ответ 2

Ну, вы также можете использовать запрос ниже:

avg (rate (container_cpu_usage_seconds_total{id="/"}[1m]))

Ответ 3

Я создал свой собственный экспортер prometheus (https://github.com/google-cloud-tools/kube-eagle), в первую очередь, чтобы получить лучший обзор использования моих ресурсов для каждого узла. Но он также предлагает более интуитивно понятный способ мониторинга ресурсов процессора и оперативной памяти. Запрос на загрузку ЦП в кластере будет выглядеть так:

sum(eagle_pod_container_resource_usage_cpu_cores)

Но вы также можете легко получить использование процессора по пространству имен, узлу или пулу узлов.