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