如何在已经存在的 docker 容器上安装 Prometheus 节点导出器?
Posted
技术标签:
【中文标题】如何在已经存在的 docker 容器上安装 Prometheus 节点导出器?【英文标题】:How to install Prometheus node exporter on an already existing docker container? 【发布时间】:2020-04-21 01:04:27 【问题描述】:我有 3 个节点在单独的 Docker 容器中运行,我想使用 Prometheus 监控它们。我已经部署了一个带有 Prometheus 服务器的 docker 容器,但是需要在容器中安装节点导出器才能将指标导出到服务器。这些容器是使用 Ubuntu 映像构建的,并且在每个容器中运行一个 .jar。
-
如何在已经运行的容器上安装节点导出器二进制文件?
如何确保重启后自动安装节点导出器?
【问题讨论】:
【参考方案1】:Prometheus node exporter 收集“*NIX 内核公开的硬件和操作系统指标”。由于给定主机上的所有 Docker 容器共享相同的主机内核,因此在每个容器中运行它是没有意义的。运行一次,考虑到它收集的统计数据的性质,直接在主机上运行它。 (设备统计信息、进程和 NTP 守护进程状态等探测无法在容器内正常工作。)
如果您只想监控您的应用程序,您需要添加Prometheus Java library 并让您的应用程序在/metrics
上提供其数据。您不需要节点导出器,并且此设置没有特定于 Docker 的内容。
作为一般规则,您永远不要在正在运行的容器中安装任何东西,因为一旦容器退出并被删除,它就会丢失(这是非常常见的情况)。 “如何在容器中安装 X”的一般答案是将其添加到您的映像的 Dockerfile
,重新运行 docker build
以重建映像,停止并删除您现有的容器,然后重新运行 docker run
反对新形象。
此外,作为一般规则,不鼓励在 Docker 容器中运行多个进程:这会显着增加复杂性和操作难度。 (使用 shell 脚本有一种快速而简单的方法,但如果一个进程或另一个进程失败,您不会注意到;有一种复杂的方法涉及诸如 supervisord 之类的东西,但它可以隐藏进程输出,您可能不知道严重的麻烦。)如果您确实想在 Docker 中运行节点导出器(几乎所有 Docker 的控件都被禁用),您通常会在单独的容器中运行它。
【讨论】:
以上是关于如何在已经存在的 docker 容器上安装 Prometheus 节点导出器?的主要内容,如果未能解决你的问题,请参考以下文章
在 windows 10 pro 上安装 Docker 失败:需要 Windows 10 Pro/Enterprise/Home (18363+)
如何使用`docker cp``--no-clobber`?从Docker容器复制文件,但如果目标已经存在,则不覆盖]]
markdown 如何在旧款MacBook上安装Docker,即MacBook Pro 2009?