我想在容器内获取docker stats。我们不能在container中使用docker stats命令。所以,我想使用cat / sys / fs / cgroup。如何获取块I / O和NET I / O值。
最佳答案
测量块I / O
docker documentation描述了如何执行此操作。本质上,在容器内部,我们可以访问cgroup。 cgroups可用于跟踪完成了多少块I / O。
您阅读了文件/sys/fs/cgroup/blkio/blkio.throttle.io_service_bytes
。该文件如下所示:
8:0 Read 20201472
8:0 Write 14065664
8:0 Sync 21794816
8:0 Async 12472320
8:0 Discard 0
8:0 Total 34267136
253:0 Read 20201472
253:0 Write 14065664
253:0 Sync 21794816
253:0 Async 12472320
253:0 Discard 0
253:0 Total 34267136
Total 68534272
我发现底部的总数对完成的块I / O进行了双重计数,但是您可以使用顶部的两行来计算总的读/写。我已验证这可以从容器内部进行。
测量NET I / O
您可以使用
/proc/net/dev
来获取容器内的网络统计信息。该文件如下所示:Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
eth0: 9620619 6480 0 0 0 0 0 0 253570 3808 0 0 0 0 0 0
您需要解析“接收字节”和“发送字节”字段。这是有关如何在Awk中执行此操作的示例:cat /proc/net/dev | awk '/eth0/{print "RX Bytes " $2 "\nTX Bytes " $10}'
我已经验证这可以从容器内部进行。关于docker - 如何在容器内获取BLOCK I/O和NET I/O,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63216668/