Docker + cgroups — точный мониторинг ресурсов контейнера

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

dockercgroupsмониторинг

ℹ️ Обычно инженеры используют встроенные метрики Docker или сторонние инструменты вроде Prometheus для мониторинга контейнеров. Однако есть менее очевидный, но мощный способ — прямой доступ к cgroups. Это позволяет получить более точные данные о потреблении ресурсов, минуя абстракции Docker.

🔥 Что нужно сделать?

  1. 📂 1. Найдите путь cgroups для контейнера. Используйте docker inspect:

    docker inspect <container_id> --format '{{ .State.Pid }}'

    ❕ Это выдаст PID процесса контейнера.

  2. 🐳 2. Зайдите в /sys/fs/cgroup и найдите нужную группу:

    cd /sys/fs/cgroup/cpu/docker/<container_id>/
  3. 📈 3. Откройте файл cpu.stat, чтобы посмотреть точные данные о потреблении CPU:

    cat cpu.stat
  4. ℹ️ Описание:

    nr_periods — количество проверок CPU-quota.
    nr_throttled — сколько раз процесс "тормозили" из-за превышения лимита.
    throttled_time — общее время (в наносекундах), которое процесс был в состоянии throttle.

  5. 📉 4. Для памяти аналогично:

    cd /sys/fs/cgroup/memory/docker/<container_id>/
    cat memory.usage_in_bytes

🐧 Пример использования

Создайте простенький Bash-скрипт для быстрой проверки:

#!/bin/bash
container_id=$1
pid=$(docker inspect "$container_id" --format '{{ .State.Pid }}')
cgroup_path="/sys/fs/cgroup"

echo "CPU stats:"
cat "$cgroup_path/cpu/docker/$container_id/cpu.stat"

echo "Memory usage:"
cat "$cgroup_path/memory/docker/$container_id/memory.usage_in_bytes"

Запускайте:

./monitor_cgroup.sh <container_id>

✳️ Теперь у вас есть инструмент для глубокой диагностики контейнеров без необходимости поднимать сложные мониторинговые системы.

tags: #полезно #мониторинг #docker

🧭 @recura_tech

Скриншот терминала с примером Bash-скрипта для мониторинга Docker-контейнера через cgroups: вывод cpu.stat и memory.usage_in_bytes в окне терминала.
Терминал с примером скрипта мониторинга cgroups для Docker.

Читайте так же