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
我的问题是对
我将 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