Prometheus使用ECS进行DNS服务发现

4

我正在尝试将ECS服务发现与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中添加更多的运行容器,我将获得更多的Alias记录在Route 53中,以名称123456-7890-1234-5678-12345.my-service.local。

在我的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个回答

1
事实证明,问题在于我需要添加安全组规则,以允许我的Prometheus实例与我的ECS集群通信,因为两者都位于公共子网中。
此外,将ECS集群中的期望计数进行扩展会在Route 53中创建另一个SRV记录和相关联的A记录(而不仅仅是我之前认为的另一个A记录)。
现在似乎一切正常运作。

4
在使用ECS服务发现时,请注意以下警告:Route 53最多只返回8条记录。因此,如果您运行的ECS服务具有20个任务,则仍将仅从8个随机任务获取指标。 - siwyd
@siwyd上周遇到了这个问题,你能提出什么替代方案吗? - Murukesh
1
@Murukesh 当时我写了一个小脚本,用于从ECS服务发现创建的记录中抓取Route 53 API:https://paste.sr.ht/%7Esiwyd/9974e66dd314f2d0d96eaafb23da9644e874ad54。也许这对你有些帮助,你需要挑选出你可以使用的部分。另一种方法可能是放弃ECS服务发现,直接抓取ECS API。这甚至可能更简单。我不记得当时为什么决定抓取Route 53,也许ECS实现会更简单。 - siwyd

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接