5

我创建了一个基于 ubuntu 14.04 的自定义 Docker 映像,其中包含 Sensu-Client 包。

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

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

谢谢

4

5 回答 5

1

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

如果您想运行禁用此命名空间的超级特权docker 容器,您可以运行:

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

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

于 2017-02-05T04:24:22.140 回答
1

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

--privileged 使容器可以完全访问系统指标,如 hdd、内存、cpu。

棘手的事情是检查外部进程指标,因为 docker 甚至将其与特权容器隔离开来,但是您可以将主机的根文件系统共享为 docker 卷( -v /:/host)并进行补丁检查以使用 chroot 或使用 /host/proc 而不是 /过程。

长话短说,有些检查会起作用,对于其他检查,您需要修补或开发自己的方式,但 docker 中的 sensu 是一种可能的方式。

于 2015-12-09T08:56:45.587 回答
0

将 sensu-client 添加到主机?您可能希望将其拆分,以便在容器问题与主机问题之间进行细化

否则-您必须设置某种方式从内部报告-使用低级别的东西(系统调用等)或从外部设置一些东西来捕捉呼叫并报告状态。

HTH

于 2015-03-30T13:18:05.430 回答
0

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

于 2015-03-18T19:30:12.370 回答
0

大多数(如果不是全部)sensu 插件硬编码 proc 文件的路径。一种选择是将主机 proc 文件挂载到 docker 容器内的不同路径并修改 sensu 插件以支持此其他位置。

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

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

于 2017-01-18T15:16:06.047 回答