Как мы можем получить процент использования ЦП контейнера из разрешенного ядра ЦП с помощью любой команды докера? Например. Из 50% одного ядра ЦП используется 99%.
В Docker есть команда docker stats
, которая показывает использование ЦП/памяти и некоторые другие статистические данные:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
c43f085dea8c foo_test.1.l5haec5oyr36qdjkv82w9q32r 0.00% 11.15MiB / 100MiB 11.15% 7.45kB / 0B 3.29MB / 8.19kB 9
Хотя он показывает использование памяти в отношении ограничения по умолчанию, для ЦП такой функции пока нет. Это можно решить с помощью скрипта, который вычислит значение на лету, но я бы предпочел второй вариант.
Есть ли способ получить его с помощью cadvisor или prometheus?
Да, есть:
irate(container_cpu_usage_seconds_total[2m]) / ignoring(cpu) (container_spec_cpu_quota/container_spec_cpu_period)
Левая сторона представляет собой обычную функцию irate
, которая вычисляет, сколько секунд процессорного ядра машины использовал контейнер. Он идет с меткой cpu="total"
, которой нет на правой стороне, поэтому там ignoring(cpu)
.
В правой части вычисляется, сколько ядер процессора разрешено использовать контейнеру. Есть две метрики:
container_spec_cpu_quota
- фактическое значение квоты. Значение вычисляется из доли ядер ЦП, которую вы установили в качестве предела, и умножается на container_spec_cpu_period
.
container_spec_cpu_period
— исходит из планировщика CFS и похож на единицу от стоимости квоты.
Я знаю, что это может быть трудно понять поначалу, позвольте мне объяснить на примере:
Учтите, что для container_spec_cpu_period
установлено значение по умолчанию, равное 100 000 микросекунд, а ограничение ЦП контейнера равно половине ядра (0,5). В таком случае:
container_spec_cpu_period 100,000
container_spec_cpu_quota 50,000 # =container_spec_cpu_period*0.5
С ограничением ЦП, установленным на два ядра, у вас будет это:
container_spec_cpu_quota 200,000
И таким образом, разделив одно на другое, мы получаем долю ядер ЦП обратно, которая затем используется в другом делении для расчета того, сколько из лимита используется.
person
anemyte
schedule
01.07.2021