docker swarm重新标记实例中的Prometheus DNS服务发现

时间:2018-06-29 08:46:36

标签: docker docker-swarm prometheus service-discovery

我的问题是对Prometheus dns service discovery in docker swarm的补充。

我定义普罗米修斯刮擦目标如下:

- job_name: 'node-exporter'
  dns_sd_configs:
  - names:
    - 'tasks.nodeexporter'
    type: 'A'
    port: 9100

这可以正常工作,但是会使用docker容器的IP作为实例标签来产生普罗米修斯。

我尝试如下重新标记实例标签:

relabel_configs:
- source_labels: [__meta_dns_name]
  target_label: instance

但是这样做会导致node-exporter的所有实例具有相同的标签“ tasks.nodeexporter”。

是否可以以某种方式将实例标签重新标记为task.nodexporter_1,tasks.nodeexporter_2,...?

1 个答案:

答案 0 :(得分:1)

在Prometheus中,对docker swarm设置的服务发现没有很好的支持,因为swarm方面缺少许多功能。

dns服务发现是缓解这些缺失功能的一种方法,但我认为这不是一个好的解决方案,我建议不要在生产中使用它:

  • 无法提供其他信息,例如使用SRV记录
  • 没有有关应该运行多少个实例的信息
  • 由于dns仅列出了健康的任务,因此当不再将一项任务视为健康任务时,抓取目标的数量将减少,这使得在容器行为异常时更加难以发出警报
  • 当容器死亡并重新启动时,您将观察到新实例,因为没有可用的任务槽之类的信息

这些问题一起使这种方法无法成为监视系统的可靠来源。

如果您真的想使用docker swarm,则应考虑通过编程方式查询docker api并使用Prometheus的file_sd服务发现机制来构建更可持续的解决方案。请通过containersolutions查看此poc以供参考:https://github.com/ContainerSolutions/prometheus-swarm-discovery