Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sensu客户端内部Docker容器_Docker_Containers_Monitoring_Sensu - Fatal编程技术网

Sensu客户端内部Docker容器

Sensu客户端内部Docker容器,docker,containers,monitoring,sensu,Docker,Containers,Monitoring,Sensu,我创建了一个基于ubuntu 14.04的定制Docker镜像,里面有Sensu客户端包 一切都很顺利,但现在我想知道如何触发从主机运行的检查 例如,我希望能够检查主机上运行的进程,而不仅仅是容器中运行的进程 谢谢我认为这在现在是不可能的。 如果主机实例中的进程在docker内部运行,则可以装载套接字并从sensu容器获取状态是否将sensu客户端添加到主机?您可能希望将其拆分,以便在容器中的问题与主机的问题之间进行粒化 否则,您必须设置一些从内部报告的方式,或者使用低级别(系统调用等),或者设

我创建了一个基于ubuntu 14.04的定制Docker镜像,里面有Sensu客户端包

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

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


谢谢

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

是否将sensu客户端添加到主机?您可能希望将其拆分,以便在容器中的问题与主机的问题之间进行粒化

否则,您必须设置一些从内部报告的方式,或者使用低级别(系统调用等),或者设置一些从外部捕获调用并报告状态的方式


HTHs

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

--privileged允许容器完全访问系统指标,如hdd、内存和cpu

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


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

大多数(如果不是所有)sensu插件都会硬编码到proc文件的路径。一个选项是将主机proc文件装载到docker容器内的不同路径,并修改sensu插件以支持此其他位置

这是我的基本docker容器,支持修改sensu插件程序文件位置


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

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

docker run -it --rm --privileged --pid=host alpine /bin/sh
这样做会删除docker提供的一个重要安全层,如果可能,应该避免使用。进入容器后,尝试运行
ps auxf
,您将看到主机上的所有进程