我正在尝试让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列表,而是尝试直接从中进行抓取。
我是否缺少一些配置选项来完成这项工作,或者我是否从根本上误解了某些内容?
答案 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