Contexto
Tenho um sistema no qual preciso verificar periodicamente o uso:
- relativo (porcentagens) para
CPU
- e absoluto (GB) para
memory
.
Como está implementado atualmente
A linguagem que estamos usando é python
.
No âmbito do sistemapsutil
Para estatísticas de todo o sistema, é trivial, pois podemos usar psutil.cpu_percent()
e psutil.virtual_memory()
.
cgroup
(v1)
O problema é que às vezes o script é executado dentro do contêiner e gostaríamos de monitorar o uso de estatísticas específicas cgroup
em vez de estatísticas de todo o sistema.
Já existe implementação cgroups
em nosso sistema que se baseia em:
- para CPU:
cpu.cfs_period_us
cpu.cfs_quota_us
cpuacct.usage
- para memória:
memory.usage_in_bytes
memory.limit_in_bytes
O que eu preciso
Aqui preciso de uma resposta para duas perguntas:
- A implementação atual é baseada na leitura de valores diretamente de arquivos
cgroup
? - Caso contrário, existem ferramentas que apoiem a obtenção fácil desse tipo de informação.
- Se sim, como posso adaptar esta solução
cgroup2
?
Por que a solução atual não funciona paracgroup2
O principal problema que tenho agora é a falta de suporte, cgroup2
já que a implementação atual é baseada na estrutura de arquivos aninhados.
cgroup
sobreUbuntu 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
sobreUbuntu 22.04
$ cat /proc/mounts | grep cgroup
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0