关于Prometheus Docker Swarm服务发现relabel配置与路由网格的疑惑
Prometheus Docker Swarm节点指标采集配置的疑问解析
你对官方配置的误解主要出在两个核心点:__meta_dockerswarm_node_address的实际含义,以及Docker Swarm路由网格的作用范围。
__meta_dockerswarm_node_address是节点的真实物理/内网IP
这个服务发现标签返回的是Docker Swarm节点自身的实际IP地址,不是用于服务路由的VIP或Ingress地址。Prometheus基于这个IP构造的__address__,是直接指向目标节点的网络接口,不会经过Swarm的路由网格。Swarm路由网格只作用于服务发布的端口
路由网格的转发逻辑仅针对通过docker service create命令对外发布的服务端口(比如-p 80:80这类端口映射)。而节点上用于暴露Docker daemon指标的组件,是直接监听在节点自身IP的9323端口上,属于节点本地的监听端口,完全不受路由网格影响,请求不会被转发到其他节点。
所以官方给出的relabel配置是完全正确的:
relabel_configs: # Fetch metrics on port 9323. - source_labels: [__meta_dockerswarm_node_address] target_label: __address__ replacement: $1:9323
它的作用就是把服务发现拿到的节点真实IP拼接上监控端口,让Prometheus直接抓取目标节点的指标,不存在被路由网格转发的问题。
内容的提问来源于stack exchange,提问作者andreav
相关产品推荐
相关产品推荐

