首页 > 解决方案 > 如何在容器内获取 BLOCK I/O 和 NET I/O

问题描述

我想在容器中获取 docker stats。我们不能在容器内使用 docker stats 命令。所以,我想使用 cat /sys/fs/cgroup。如何获取 BLOCK I/O 和 NET I/O 值。

标签: docker

解决方案


测量块 I/O

docker文档描述了如何执行此操作。本质上,在容器内部,我们可以访问我们的 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}'

我已经验证这可以在容器内部工作。


推荐阅读