如何获取到宿主机上某一个Docker容器的磁盘IO?


RT。如何获取到宿主机上某一个Docker容器的磁盘IO?
已邀请:

xds2000 - 数人科技CTO

赞同来自: shlallen 渐行渐远 田浩浩 CDocer


Docker的容器是有block metrics的。所以获得磁盘IO的指标在官方文档是有记载的。

第一个技巧看业界的监控软件是如何做的:
https://github.com/DataDog/docker-dd-agent

第二个,基于Zabbix的收集:
http://www.labouisse.com/how-t ... rt-1/

第三种,自个找,所有的信息都在cgroup里面。比如我的环境是mac + boot2docker,
所以我要boot2docker ssh登录到主机上,然后cd /sys/fs/cgroup/blkio/docker
这里面就是容器里的指标了。你可以直接:
docker run --name test-metrics -h `hostname` -v /var/run/docker.sock:/var/run/docker.sock -
v /sys/fs/cgroup/:/sys/fs/cgroup --privileged docker.cn/docker/ubuntu bash

挂在完之后,直接看
cd /sys/fs/cgroup/blkio/
docker@boot2docker:/sys/fs/cgroup/blkio$ ls
blkio.reset_stats      cgroup.procs           docker/                release_agent
cgroup.clone_children  cgroup.sane_behavior   notify_on_release      tasks

这是你看到的就是你需要的。

许四两 - 北京数字安全公司运维工程师

赞同来自: DockOne wangzi19870227


docker1.5 docker stats 已经有这个数值了而且还有api

shlallen - DaoCloud软件工程师,合伙人

赞同来自:


目前,cgroup支持的blkio限制模式有两种:
1. throttle,限制每个进程能使用的IOPS或者吞吐量。
2. weight,现在每个进程能使用的IOPS的能力的比例,必须通过CFQ调度器来实现。
引自http://blog.yufeng.info/archives/2001

位置的话,都在cgroups文件系统中,如楼上xds2000的回复哈

渐行渐远 - 默默奋斗的苦逼运维一枚

赞同来自:


在这篇文章中看到有关于io的描述。https://blog.docker.com/2013/1 ... rics/
blkio.io_service_bytes_.jpg

但是在我宿主机上的查看到对应的container的这个文件是空的:
cat /cgroup/blkio/lxc/759c78f0c336adbfbd3288ee54e472908aebc042eec36676331d03a532adcb20/blkio.io_service_bytes
Total 0

不知道您说的是不是读这个文件中的数值。

xds2000 - 数人科技CTO

赞同来自:


@渐行渐远 我目前没这方面的需求,所以没机会做这方面的梳理。另外,我看到你的目录路径是lxc,不是docker。我想告诉你的是,Docker虽然提供了标准的接口,但由于基础操作系统仍然有很大的不同,所以需要自己来测。

你可以看看这个视频,希望给你一些启发:
http://www.infoq.com/cn/presen ... ocker

对于视频中的功能,其实是点评的工程师做的Patch,这些Patch都是非主流的,用的话需要你自己维护。
https://github.com/dianping/do ... 1.0.0

zjumoon - 蘑菇街-牧白 mubai@mogujie.com

赞同来自:


看一下你的 /cgroup/blkio/lxc/759c78f0c336adbfbd3288ee54e472908aebc042eec36676331d03a532adcb20/ 下面的tasks文件, 里面记录着进程的ID,只有在这里被记录的ID才会被cgroup/blkio统计到和管理到。 一般情况会把容器的pid和容器里面进程的Pid(容器进程是他们的父进程)都记录进去的。 如果用docker-enter进入的话

执行IO操作的进程的pid可能不会在tasks里

icebolt - Docker爱好者暗黑

赞同来自:


docker-enter进入的是同一容器,为什么不会记录进去?

wangzi19870227 - sina攻城狮,docker爱好者

赞同来自:


docker-enter其实是调用nsenter进入container的。
这种方式进入后启动一个前台进程,此进程其实是host上普通nsenter进程的子进程,而不是container进程的子进程,所以不会进task。
可通过pstree查看。

jamlee - keep me alone

赞同来自:


最简单的方法:

docker stats $(docker ps | awk '{if(NR>1) print $NF}')

ahjdzx1990 - 男,直.

赞同来自:


大家有没有看到问题的重点是磁盘IO!!! 磁盘IO怎么统计?

要回复问题请先登录注册