在Docker容器内的Sensu-Client

我在里面创build了一个基于ubuntu 14.04的定制Docker镜像,内含Sensu-Client包。

一切都很好,但现在我想知道如何触发检查从主机运行。

例如,我希望能够检查在主机上运行的进程,而不仅仅是容器内运行的进程。

谢谢

这取决于你想要运行什么检查。 如果使用–net = host和–privileged标志运行sensu容器,很多系统级检查都可以正常工作。 –net = host不仅可以让你看到与主机系统相同的主机名和IP,而且所有的tcp连接和接口指标都会匹配容器和主机。

– 特权让容器完全访问系统度量,如硬盘,内存,CPU。

棘手的事情是检查外部stream程指标,因为docker工甚至将它从特权容器中隔离出来,但是您可以共享主机的根文件系统作为docker卷(-v /:/ host)和修补程序检查以使用chroot或使用/ host / proc而不是/ PROC。

长话短说,一些检查只是工作,对于其他人你需要补丁或发展自己的方式,但在docker是敏感的一种可能的方式。

非特权的 docker容器无法检查其容器外的进程,因为docker使用内核命名空间将其与主机上运行的所有其他进程隔离。 这是devise: docker安全文件

如果您希望运行禁用此命名空间的超级特权泊坞窗容器,则可以运行:

docker run -it --rm --privileged --pid=host alpine /bin/sh 

这样做会删除docker提供的一个重要的安全层,如果可能的话应该避免。 一旦进入容器,请尝试运行ps auxf ,您将看到主机上的所有进程。

我不认为这是可能的。 如果主机实例中的进程在docker中运行,则可以挂载套接字并从sensu容器中获取状态

添加一个sensu-client到主机? 你可能想把它拆分出来,以便在容器问题和主机问题之间造成混乱

否则 – 你必须设置一些方法来从内部报告 – 使用低级别(系统调用等)或设置外部的东西来捕捉电话和报告状态。

HTHS

大多数(如果不是所有的)sensu插件硬编码到proc文件的path。 一个select是将主机proc文件挂载到docker容器内的不同path,并修改sensu插件以支持这个其他位置。

这是我的基础docker容器,支持修改sensu插件proc文件的位置。

https://github.com/sstarcher/docker-sensu