“docker stats”命令提供了一些关于容器的基本信息。例如:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
2c73c2e10c53 container_name 0.46% 1.422GiB / 31.39GiB 4.53% 350MB / 227MB 534MB / 1.42GB 63
我正在用一个程序收集这些信息(https://github.com/nagylzs/pysysinfo_influxdb) 并将其发送到 InfluxDb 数据库。我需要使用此设置在多台服务器上运行性能测试并分析结果:查找所有服务器上可能的瓶颈(CPU/网络速度/内存/磁盘 IO 等)。“docker stats”提供的信息非常粗略。以下是问题:
- 每 30 秒进行一次测量。块读/写和网络读/写值不断增加。一旦达到 1GB,它们就无法用于性能分析,因为它们太粗略了。例如,如果我现在测量的是 29.1GB,30 秒后测量的是 29.2GB,那么实际数量可能在 1MB 到 149MB 之间。
- 我想知道 busy_time %(I/O 所用时间)值。除非我知道最大值,否则原始块读取/写入不会提供太多信息。但由于我需要监控多台服务器,并且它们的最大性能各不相同,因此无法(轻松地)使用原始块值来识别瓶颈。
我也尝试使用“docker inspect”获取信息,但没有看到任何可用的价值。
对于网络接口,我可以想象这是可以工作的(尽管很难实现):
- 使用“docker inspect”列出每个容器的网络接口
- 然后查看“ifconfig”的输出并收集“RX 字节”和“TX 字节”值
- 每 30 分钟收集一次这些信息本身就是一个问题
如何对磁盘 I/O 执行相同操作?如何获取 I/O 繁忙时间?此信息必须可用,因为“docker stats”会显示它们。只是格式不是最好的。有什么想法吗?
答案1
Docker 容器基于 Linux cgroup,因此请从 cgroup 文件中读取指标。例如:请参阅 cgroup v1 文档中的 Block IO Controller -https://www.kernel.org/doc/Documentation/cgroup-v1/blkio-controller.txt
来自我的操作系统的示例:
[root@dockerhost c2241e5663e04cbf0154b06ecb4fe7f31f67918748c3123ea7104ac8db004dae]# ls
blkio.io_merged blkio.io_serviced_recursive blkio.reset_stats blkio.throttle.write_bps_device cgroup.event_control
blkio.io_merged_recursive blkio.io_service_time blkio.sectors blkio.throttle.write_iops_device cgroup.procs
blkio.io_queued blkio.io_service_time_recursive blkio.sectors_recursive blkio.time notify_on_release
blkio.io_queued_recursive blkio.io_wait_time blkio.throttle.io_service_bytes blkio.time_recursive tasks
blkio.io_service_bytes blkio.io_wait_time_recursive blkio.throttle.io_serviced blkio.weight
blkio.io_service_bytes_recursive blkio.leaf_weight blkio.throttle.read_bps_device blkio.weight_device
blkio.io_serviced blkio.leaf_weight_device blkio.throttle.read_iops_device cgroup.clone_children
[root@dockerhost c2241e5663e04cbf0154b06ecb4fe7f31f67918748c3123ea7104ac8db004dae]# cat blkio.throttle.io_service_bytes
253:4 Read 1540096
253:4 Write 0
253:4 Sync 0
253:4 Async 1540096
253:4 Total 1540096
Total 1540096
blkio.throttle.io_service_bytes 文件的文档:
- blkio.throttle.io_service_bytes
- Number of bytes transferred to/from the disk by the group. These
are further divided by the type of operation - read or write, sync
or async. First two fields specify the major and minor number of the
device, third field specifies the operation type and the fourth field
specifies the number of bytes.
不要指望任何好的 % 指标值。它们只是计数器,所以您必须根据计数器值计算 % 。只需找到对您有用的计数器(我猜是 *等待* 指标),您就能检测到 IO 瓶颈。
您还可以应用类似的概念: