【问题标题】:Sensu-Client inside Docker containerDocker 容器内的 Sensu-Client
【发布时间】:2015-03-02 09:28:19
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: docker containers monitoring sensu


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          HTH

          【讨论】:

            【解决方案5】:

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-04-29
              • 2022-10-04
              • 1970-01-01
              • 1970-01-01
              • 2020-12-11
              • 2018-06-27
              • 2020-05-05
              • 2023-03-27
              相关资源
              最近更新 更多