docker swarm relabel 实例中的 Prometheus dns 服务发现

Prometheus dns service discovery in docker swarm relabel instance

我的问题是对 的补充。

我将 prometheus 抓取目标定义如下:

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

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

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

relabel_configs:
- source_labels: [__meta_dns_name]
  target_label: instance

但是这样做会导致节点导出器的所有实例都具有相同的标签 "tasks.nodeexporter"。

是否可以通过某种方式将实例标签重新标记为任务。nodexporter_1、任务。nodeexporter_2、...?

docker 集群设置的服务发现在 Prometheus 中没有得到很好的支持,因为集群端缺少许多功能。

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

  • 无法提供其他信息,例如使用 SRV 记录
  • 没有关于应该有多少实例的信息运行
  • 由于 dns 只列出健康的任务,当一个任务不再被认为是健康的时,抓取目标的数量会减少,这使得对行为不当的容器发出警报变得更加困难
  • 当容器死亡并重新启动时,您将观察到新的实例,因为没有可用的任务槽等信息

总的来说,这些问题不允许这种方法成为监控系统的可靠来源。

如果您真的依赖于使用 docker swarm,您应该考虑通过以编程方式查询 docker api 并使用 file_sd 服务来构建更可持续的解决方案普罗米修斯的发现机制。请参阅 containersolutions 的这篇文章以供参考:https://github.com/ContainerSolutions/prometheus-swarm-discovery