我创建了一个基于ubuntu 14.04的自定义Docker镜像,里面有Sensu-Client包。
一切都很顺利,但现在我想知道如何触发从主机运行的检查。
例如,我希望能够检查主机上运行的进程,而不仅仅是在容器内运行的进程。
由于
答案 0 :(得分:1)
这取决于您要运行的检查。如果使用--net = host和--privileged flags运行sensu容器,许多系统级检查都可以正常工作。 --net = host不仅允许您看到与主机系统相同的主机名和IP,而且所有tcp连接和接口度量标准都将与容器和主机匹配。
- 特权使容器可以完全访问系统指标,如hdd,memory,cpu。
棘手的是检查外部进程指标,因为docker甚至将其与特权容器隔离,但您可以将主机的根文件系统共享为docker volume(-v /:/ host)并进行补丁检查以使用chroot或use / host / proc而不是/ proc。
长话短说,一些检查只会起作用,对于其他你需要修补或发展自己的方式,但是码头工作者的感觉是一种可能的方式。
答案 1 :(得分:1)
非特权 docker容器无法检查其容器外部的进程,因为docker使用内核命名空间将其与主机上运行的所有其他进程隔离。这是设计的:docker security documentation
如果您想运行禁用此命名空间的超级特权 docker容器,可以运行:
docker run -it --rm --privileged --pid=host alpine /bin/sh
这样做会删除docker提供的重要安全层,如果可能,应该避免使用。进入容器后,尝试运行ps auxf
,您将看到主机上的所有进程。
答案 2 :(得分:0)
我现在不认为这是可能的。 如果主机实例中的进程在docker中运行,则可以挂载套接字并从sensu容器中获取状态
答案 3 :(得分:0)
在主机上添加sensu-client?您可能希望将其拆分,以便在容器中的问题与主机的问题之间进行粒化
否则 - 您必须设置一些从内部报告的方式 - 使用低级别(系统调用等)或从外部设置某些内容来捕获呼叫并报告状态。
HTHS
答案 4 :(得分:0)
大多数(如果不是全部)sensu插件硬编码proc文件的路径。一种选择是将主机proc文件挂载到docker容器内的不同路径,并修改sensu插件以支持其他位置。
这是我的基础docker容器,支持修改sensu plugins proc文件位置。