如何在已经存在的 docker 容器上安装 Prometheus 节点导出器?

How to install Prometheus node exporter on an already existing docker container?

我在单独的 Docker 容器中有 3 个节点 运行ning,我想使用 Prometheus 监控它们。我已经用 Prometheus 服务器部署了一个 docker 容器,但需要在容器中安装节点导出器才能将指标导出到服务器。容器是使用 Ubuntu 图像构建的,每个容器中的 .jar 是 运行。

  1. 如何在已经 运行ning 的容器上安装节点导出器二进制文件?
  2. 如何确保重启后自动安装node exporter?

Prometheus node exporter集"hardware and OS metrics exposed by *NIX kernels"。由于给定主机上的所有 Docker 容器共享相同的主机内核,因此在每个容器中 运行 这没有意义。 运行 一次,考虑到它收集的统计数据的性质,运行 它直接在主机上。 (对设备统计信息、进程和 NTP 守护程序状态等事物的探测在容器内部无法正常工作。)

如果您只想监控您的应用程序,您需要添加 Prometheus Java library 并让您的应用程序在 /metrics 上提供其数据。您不需要节点导出器,并且此设置没有任何 Docker 特定内容。

作为一般规则,您永远不要在 运行ning 容器中安装任何东西,因为一旦容器退出并被删除(这是一种非常常见的情况),它就会丢失。 "how do I install X in a container" 的一般答案是将其添加到映像的 Dockerfile,重新 运行 docker build 重建映像,停止并删除现有容器,然后重新 运行 docker run 对照新图像。

同样作为一般规则,运行在一个 Docker 容器中设置多个进程是不鼓励的:它增加了显着的复杂性和操作困难。 (有一种使用 shell 脚本的快捷方式,但您不会注意到一个进程或另一个进程是否失败;有一种复杂的方式涉及诸如 supervisord 之类的东西,但它可以隐藏进程输出,您可能没有意识到严重的问题。)如果你确实想要 运行 Docker 中的节点导出器(几乎所有 Docker 的控件都被禁用)你通常会 运行 它在一个单独的容器中。