我的问题是对Prometheus dns service discovery in docker swarm的添加。

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

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

这可以正常工作,但是使用docker容器的IP作为实例标签会导致prometheus。

我尝试重新标记实例标签,如下所示:
relabel_configs:
- source_labels: [__meta_dns_name]
  target_label: instance

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

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

最佳答案

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

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

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

  • 总而言之,这些问题使这种方法无法成为监视系统的可靠来源。

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

    关于docker - docker swarm重新标记实例中的Prometheus DNS服务发现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51097742/

    10-11 11:27