如何使用 prometheus 监控/发现更多 docker 个容器

How to monitor / discover more docker containers with prometheus

我在本地使用 prometheus、node-exporter 和 grafana 以及 docker-compose 来查看如何显示指标。是否可以在 docker-compose.yml 中将容器作为服务(例如 apache \ nginx )添加并发现该服务以便其指标也被考虑在内?文档对解释这一点帮助不大。

如果一切都需要 运行 在本地(即,您的 Prometheus 和受监控的实体都在同一台机器上),我不会为适当的自动发现而烦恼。相反,我只是在 Prometheus 中有一个静态配置文件,列出它需要监控的每个服务。

这些服务中的每一个都将 运行 集成在一个 docker 容器中,每个容器都有自己的指标导出应用程序(如节点导出器或 Telegraf)。是的,这意味着您需要使用 telegraf(或其他工具)扩展您的 nginx-docker 以拥有一个发射指标的 docker 容器。

这样,Prometheus 将为 n 个服务抓取 n 个 url。您可能 运行 所有这些都处于 --net=host 模式,但是每个服务都需要将其指标导出到不同的端口。

请记住,当您从 容器中收集指标时,某些指标可能是错误的,因为容器对系统的了解有限.因此 OS/HW 指标可能已关闭。但是,如果您对 custom/app-level 指标感兴趣,那应该没问题。

所以,总而言之: - 每个 docker 需要 运行 自己的出口商(可能在不同的港口出口) - 普罗米修斯应该配置为知道在哪里寻找这些服务中的每一个。

如果您真的想要自动发现,请查看 Consul 以及它如何与 Prometheus 集成。我听说 can 实际上 运行 consul-server 和 consul-clients 在同一台机器上,你可以设置 Prometheus 从 Consul 读取服务列表(意思是,有自动发现)而不必在配置文件中明确列出它们中的每一个。

使用 zookeeper 也应该有效:你的容器会向 zookeeper 注册,Prometheus 会从 zk 知道它们(免责声明:我从未尝试过这种特殊配置)。