我想在容器内获取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/

10-16 13:59