2015-10-28 41 views
4

尽管我相信答案是否定的,但我仍然应该问:是否可以从Docker容器内监控主机系统?为了简化部署和升级,我希望我可以在容器中放置一些监控工具。具体来说,我正在考虑像atop,sar等工具。来自码头集装箱的主机监控

想法?

谢谢。

回答

6

Docker的隔离理念可以通过将主机目录挂载到容器中(例如Datadog客户端所做的)或在“privileged”容器模式下运行容器来规避。这可以防止pid/network/ipc/disk/uts命名空间,允许访问所有设备并有效地启动进程,就好像它在主机上一样。

这些工具在不可变主机系统(如CoreOS)上运行时具有无法估量的价值。

但是,如果您只想访问主机的某些部分,则不需要特权模式。例如Datadog目前推出的这些标志agent(“监管集装箱”)(具体到它的监测要求):

docker run -d --name dd-agent -h `hostname` \ 
    -v /var/run/docker.sock:/var/run/docker.sock -v /proc/:/host/proc/:ro \ 
    -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -e API_KEY={your_api_key_here} \ 
    datadog/docker-dd-agent 

(注意音量坐骑给予只读访问主机proccgroup目录,如还有搬运工插座[监视后台驻留程序]

Sysdig云需要特权模式),因为它具有更深系统自省能力,同时也安装装置,过程,启动,模块和用户目录:

docker run --name sysdig-agent --privileged --net host --pid host \ 
    -e ACCESS_KEY=[ACCESS_KEY] -e TAGS=[TAGS] \ 
    -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev \ 
    -v /proc:/host/proc:ro -v /boot:/host/boot:ro \ 
    -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro sysdig/agent 

使用--cap-add--cap-drop也可能对add and revoke individual capabilities

CoreOS提供toolbox脚本(从新docker-toolbox不同)推出容器的这种风格你使用systemd-nspawn,而不是docker的 - 它们都运行容器。

systemd-nspawn有不同的语法来泊坞窗,但效果还是一样 - 主机系统与容器(source)共享:

sudo systemd-nspawn \ 
    --directory="${machinepath}" \ 
    --capability=all \ 
    --share-system \ 
    --bind=/:/media/root \ 
    --bind=/usr:/media/root/usr \ 
    --bind=/run:/media/root/run \ 
    --user="${TOOLBOX_USER}" "[email protected]" 

总之,你可以启动一个容器中,并安装调试工具可以通过使用具有特定卷安装的Docker和/或--privileged或CoreOS的toolbox来检查主机(以及扩展,其他容器)。


n.b.我个人偏好调试容器是Sysdig:“将sysdig想象成strace + tcpdump + htop + iftop + lsof + ...真棒酱油。” - 目前看起来像:

docker run -i -t --name sysdig --privileged \ 
    -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev \ 
    -v /proc:/host/proc:ro -v /boot:/host/boot:ro \ 
    -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro sysdig/sysdig 
+0

神圣的细节蝙蝠侠!谢谢! – blockcipher

0

Docker容器不应该知道主机,所以这是违反Docker /进程隔离原则的。你可能会发现一些技巧,但不建议这样做。

+0

了解,通常我完全同意这一点。在这种情况下,我正在寻找规则的例外情况,因为有些情况下一些更详细的工具会很棒(top/ps不会一直削减)。这只是管理员/开发人员会使用的东西,所以在这种情况下,滥用的风险很低。 – blockcipher

1

请看看cadvisor,一个谷歌的工具。

cadvisor安装/sys/var/run/因此能够监视主机。

+1

迄今为止我所见过的监控主机和其他Docker容器的最佳解决方案之一。 – RiRomain

0

我发现你可以做的一件事是捕获在主机上使用inotify发生的文件系统事件。我在我的inotify-command容器中使用它。但谁知道这是否会持续...