使用ECS进行Prometheus DNS服务发现

时间:2018-10-10 10:34:46

标签: amazon-ecs prometheus service-discovery

我正在尝试让ECS Service Discovery与Prometheus一起使用。

目前,我的ECS容器已添加到Route 53,如下所示:

+-----------------------------------------------+------+--------------------------------------------------------+
|                     Name                      | Type |                         Value                          |
+-----------------------------------------------+------+--------------------------------------------------------+
| my-service.local.                             | SRV  | 1 1 8080 123456-7890-1234-5678-12345.my-service.local. |
| 123456-7890-1234-5678-12345.my-service.local. | A    | 10.0.11.111                                            |
+-----------------------------------------------+------+--------------------------------------------------------+

我假设如果我向ECS添加更多正在运行的容器,那么我将在Route 53中获得更多名称为123456-7890-1234-5678-12345.my-service.local.的Alias记录

在我的Prometheus配置文件中,我在scrape_config下提供了以下内容:

    - job_name: 'cadvisor'
      scrape_interval: 5s
      dns_sd_configs:
      - names:
        - 'my-service.local'
        type: 'SRV'

但是,当我在Prometheus中检查目标状态时,会看到以下内容:

Endpoint: http://123456-7890-1234-5678-12345.my-service.local:8080/metrics
State: Down
Error: context deadline exceeded

我不熟悉DNS服务发现如何与SRV记录一起使用,因此我不确定问题出在哪里。查看AWS ECS服务发现如何添加记录,看起来my-service.local映射到123456-7890-1234-5678-12345.my-service.local:8080

但是,看起来Prometheus并没有尝试查找映射到123456-7890-1234-5678-12345.my-service.local的本地IP列表,而是尝试直接从中进行抓取。

我是否缺少一些配置选项来完成这项工作,或者我是否从根本上误解了某些内容?

2 个答案:

答案 0 :(得分:0)

原来的问题是我需要添加一个安全组规则,以允许我的Prometheus实例与我的ECS群集进行通信,因为这两个实例都在公共子网中。

在ECS集群中向上扩展所需的计数还会在Route 53中创建另一个SRV记录和关联的A记录(不仅仅是我以前认为的一个附加A记录)。

一切似乎都可以正常工作。

答案 1 :(得分:0)

使用带有路线53的Consul或ECS SD之类的“适当”服务发现的一种相当不错的选择是依靠AWS API。只要容器/任务的总数保持在几千以下,这是适当的,因为您受到AWS API请求上限的限制。

有许多工具可结合Prometheus文件发现提供此功能。例如https://pypi.org/project/prometheus-ecs-discoverer/https://github.com/teralytics/prometheus-ecs-discovery