sys 里面似乎只能用eth0/tx_bytes
来监控整个网卡的上行流量
或者用docker0/tx_bytes
监控所有 container 的上行流量
如果想要在容器内部监控这一个容器的上行流量,要怎么查找呢?
1
qoo2019 2020-04-28 16:46:03 +08:00 via iPhone
ctop 可以试下满足需求不
|
3
joyme 2020-04-28 17:10:08 +08:00 1
cadvisor 应该能满足你的需求。https://github.com/google/cadvisor
|
4
jybox 2020-04-28 17:14:54 +08:00
可以加 iptables 规则来匹配从某个容器出去的流量,然后可以从 iptables 的计数器里查到被这个规则匹配的流量。
|
5
tomari OP @joyme 感谢分享!我看了它的底层实现,是通过读取 /sys/class/net/eth0/statistics/tx_bytes 文件来获取当前的上传字节数的,但是我没记错的话 docker 内部 sys 文件夹是没有隔离的,这个访问的难道不是宿主机的 tx_bytes 吗?
|
6
joyme 2020-04-29 11:07:51 +08:00 1
容器是用 namespace 做的隔离。所以它应该是先进入到容器的命名空间,比如这里你要先进入 mount namespace,再从这里路径读取就行。比如:
``` docker inspect mysql | grep Pid "Pid": 21853, "PidMode": "", "PidsLimit": null, nsenter --target 21853 --mount cat /sys/class/net/eth0/statistics/tx_bytes 6698 ``` 这样我拿到的就是 mysql 这个容器的信息了。 |