1. Blog
  2. Golang
  3. kubernetes
  4. Rust
  5. 关于作者

容器监控

容器监控

OCI 制定了容器运行时规范,但是未指定容器的运行指标信息。

CPU 内存

由于 cgroups 对容器的资源占用进行了限制,那 cgroups 一定对内存和 cpu 等使用信息进行了统计,对于容器的监控指标,直接从该容器的 cgroups 中获取即可。

以 memory 为例:

$ tree /sys/fs/cgroup/memory/ -L 1
/sys/fs/cgroup/memory/
├── cgroup.clone_children
├── cgroup.event_control
├── cgroup.procs
├── cgroup.sane_behavior
├── docker
├── init.scope
├── machine.slice
├── memory.failcnt
├── memory.force_empty
├── memory.kmem.failcnt
├── memory.kmem.limit_in_bytes
├── memory.kmem.max_usage_in_bytes
├── memory.kmem.slabinfo
├── memory.kmem.tcp.failcnt
├── memory.kmem.tcp.limit_in_bytes
├── memory.kmem.tcp.max_usage_in_bytes
├── memory.kmem.tcp.usage_in_bytes
├── memory.kmem.usage_in_bytes
├── memory.limit_in_bytes
├── memory.max_usage_in_bytes
├── memory.move_charge_at_immigrate
├── memory.numa_stat
├── memory.oom_control
├── memory.pressure_level
├── memory.soft_limit_in_bytes
├── memory.stat
├── memory.swappiness
├── memory.usage_in_bytes
├── memory.use_hierarchy
├── notify_on_release
├── release_agent
├── system.slice
├── tasks
├── user
└── user.slice

在 memory group 中,可以通过文件 memory.usage_in_bytes memory.stat 等文件获取到当前 group 下的内存使用。

在容器实现时,对每个容器均创建一个 group,则可以获取到仅该容器的资源占用。

网络

网络 IO 在 cgroups 中也有进行限制,但对于无限制的或者未设置网络限制的 runtime 来说,网络监控信息就需要从实际的网卡中进行获取了。

在 linux 系统中,可通过内核文件系统 /proc/net/dev 查看网络流量的使用情况。