Contexto
Tengo un sistema en el que tengo que comprobar periódicamente el uso:
- relativo (porcentajes) para
CPU
- y absoluto (GB) para
memory
.
Cómo se implementa actualmente
El lenguaje que estamos usando es python
.
todo el sistemapsutil
Para estadísticas de todo el sistema es trivial ya que podemos usar psutil.cpu_percent()
y psutil.virtual_memory()
.
cgroup
(v1)
El problema es que a veces el script se ejecuta dentro del contenedor y luego nos gustaría monitorear el uso de estadísticas particulares cgroup
en lugar de estadísticas de todo el sistema.
Ya existe una implementación cgroups
en nuestro sistema que se basa en:
- para CPU:
cpu.cfs_period_us
cpu.cfs_quota_us
cpuacct.usage
- para memoria:
memory.usage_in_bytes
memory.limit_in_bytes
Lo que necesito
Aquí necesito una respuesta para dos preguntas:
- ¿Está bien la implementación actual basada en la lectura de valores directamente de archivos
cgroup
? - En caso negativo, ¿existen herramientas que permitan obtener ese tipo de información fácilmente?
- En caso afirmativo, ¿cómo puedo adaptar esta solución
cgroup2
?
¿Por qué la solución actual no funciona?cgroup2
El principal problema que tengo ahora es la falta de soporte, cgroup2
ya que la implementación actual se basa en una estructura de archivos anidados.
cgroup
enUbuntu 20.04
$ cat /proc/mounts | grep cgroup
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,name=systemd 0 0
cgroup /sys/fs/cgroup/rdma cgroup rw,nosuid,nodev,noexec,relatime,rdma 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup2
enUbuntu 22.04
$ cat /proc/mounts | grep cgroup
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0