如何在 docker 内部监控某个 container 的上行流量?

2020-04-28 16:42:57 +08:00
 tomari

sys 里面似乎只能用eth0/tx_bytes来监控整个网卡的上行流量
或者用docker0/tx_bytes监控所有 container 的上行流量
如果想要在容器内部监控这一个容器的上行流量,要怎么查找呢?

2069 次点击
所在节点    问与答
7 条回复
qoo2019
2020-04-28 16:46:03 +08:00
ctop 可以试下满足需求不
tomari
2020-04-28 16:51:52 +08:00
@qoo2019 ctop 好像是在宿主机上监控,有在 container 内部监控的嘛
joyme
2020-04-28 17:10:08 +08:00
cadvisor 应该能满足你的需求。https://github.com/google/cadvisor
jybox
2020-04-28 17:14:54 +08:00
可以加 iptables 规则来匹配从某个容器出去的流量,然后可以从 iptables 的计数器里查到被这个规则匹配的流量。
tomari
2020-04-29 02:43:46 +08:00
@joyme 感谢分享!我看了它的底层实现,是通过读取 /sys/class/net/eth0/statistics/tx_bytes 文件来获取当前的上传字节数的,但是我没记错的话 docker 内部 sys 文件夹是没有隔离的,这个访问的难道不是宿主机的 tx_bytes 吗?
joyme
2020-04-29 11:07:51 +08:00
容器是用 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 这个容器的信息了。
joyme
2020-04-29 11:08:06 +08:00
@tomari 忘记 @你了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666986

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX