ECS 中 docker 任务的 Prometheus 指标抓取

Posted

技术标签:

【中文标题】ECS 中 docker 任务的 Prometheus 指标抓取【英文标题】:Prometheus metrics scraping of docker tasks in ECS 【发布时间】:2019-06-03 17:16:00 【问题描述】:

我在 ECS 中有多个集群,每个集群有多个服务,每个服务运行多个任务。每个任务在随机端口上公开具有不同值的/metrics。我想做某种动态发现并抓取这些指标(每个任务都有不同的端口和不同的 IP,因为它们在多个容器实例上运行),将来自同一服务的任务的指标组合在一起并使用 prometheus 抓取它们。我该怎么做?

【问题讨论】:

【参考方案1】:

如果您不愿意像 Consul 或 AWS 原生服务发现(请参阅 https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/)这样的适当服务发现,您可以利用 Prometheus 文件服务发现和查询 AWS API、检索所有必需信息并准备普罗米修斯的文件。可以在此处找到此类工具的一个示例:https://pypi.org/project/prometheus-ecs-discoverer/(由我根据另一个类似项目创建)。

【讨论】:

【参考方案2】:

我们遇到了同样的挑战,有两种方法:

    根据正在运行的任务标记EC2实例,然后根据标签在Prometheus中找到EC2实例。当我们每个实例有一个任务时,这很有效,因为指标端口是已知的。可能有办法对此进行扩展并支持多项任务。 为每个 EC2 实例运行一个任务,该任务用作该实例上运行的所有任务的导出器。它询问 ECS,找到每个任务的任务和侦听端口并抓取所有任务。在 Prometheus 中,您可以找到集群中的所有 EC2 实例,并在每个实例中抓取此导出器。显然,您需要根据从中读取指标的任务来标记指标。

如果我必须再做一次,我会考虑使用 Consul 注册任务并在 Prometheus 中发现它们。如果您已经在使用 Consul,那么这个方向可能是一个不错的尝试。

希望这会有所帮助。

【讨论】:

谢谢。标记任务呢?现在好像有这种可能docs.aws.amazon.com/AmazonECS/latest/developerguide/… @a_z 不确定 Prometheus 会如何找到它们。您将需要为此开发一个出口商。当您使用 EC2 标签时(在我描述的两种解决方案中),您使用 Prometheus 的原生 EC2 发现。

以上是关于ECS 中 docker 任务的 Prometheus 指标抓取的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ECS 任务中安装 aws cli?

带有 docker hub 映像的 ECS FARGATE TASK 定义

如何诊断 ECS Fargate 任务启动失败?

AWS - ECS - 如何在现有 ECS(带有 1 个 EC2)实例上重新部署更新的 Docker 映像?

更新 AWS ECS 服务任务的最佳实践

如何在 AWS ECS 中扩展任务/容器