docker swarm中的Prometheus DNS服务发现

我正在为我的服务寻找一些监控和警报解决方案。我发现以下不错的相关作品。

  • Prometheus监控docker swarm
  • 使用Prometheus监控docker swarm集群

两者都使用dns服务发现来监视服务的多个副本。

我尝试重播这些工作,但发现只能获得单个后端容器ip。

# dig A node-exporter

; <<>> DiG 9.10.4-P8 <<>> A node-exporter

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18749

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;node-exporter. IN A

;; ANSWER SECTION:

node-exporter. 600 IN A 10.0.0.42

;; Query time: 0 msec

;; SERVER: 127.0.0.11#53(127.0.0.11)

;; WHEN: Mon Jan 29 02:57:51 UTC 2018

;; MSG SIZE rcvd: 60

在检查服务时,我发现node-exporter的端点模式是vip。

> docker inspect 242pn4obqsly

...

"Endpoint": {

"Spec": {

"Mode": "vip"

},

"VirtualIPs": [

{

"NetworkID": "61fn8hmgwg0n7rhg49ju2fdld",

"Addr": "10.0.0.3/24"

}

]

...

这意味着当与dns联系时,prometheus只能获得单个委托服务ip。然后,内部磅策略将收入请求路由到不同的后端实例。

那相关的工作如何成功呢?

谢谢!

回答:

对于PrometheusDNS服务发现,您不想使用通过使用docker swarm内部负载平衡Virtual IP (VIP)

您正在寻找的是 服务DNS。为了让每一个服务的IP不会忽略你的群,只是 与码头工人群的服务名称的DNS tasks.

例如,在具有3个节点的集群中,我得到:

$ nslookup tasks.node-exporter

Server: 127.0.0.11

Address 1: 127.0.0.11

Name: tasks.node-exporter

Address 1: 10.210.0.x node-exporter.xxx.mynet

Address 2: 10.210.0.y node-exporter.yyy.mynet

Address 3: 10.210.0.z node-exporter.zzz.mynet

但是,当我查询不带前缀的服务名称时,会得到一个IP(VIP一个IP,它将对每个容器的请求进行负载均衡):

$ nslookup node-exporter

Server: 127.0.0.11

Address 1: 127.0.0.11

Name: node-exporter

Address 1: 10.210.0.w ip-x-x-x-x

您可以查看SO上的[此Q/A,以了解在中获得DNS解析的3种不同方式docker

swarm。基本上,一个服务命名myservicedocker swarm

  • myservice解析Virtual IP (VIP)为该服务的服务,该服务在内部 到各个任务IP地址。

  • tasks.myservice解析为群集中部署的每个容器的 。

  • docker.com 不作为服务名称存在,因此请求将转发到已配置的默认DNS服务器(您可以自定义)。

注意:容器名称也可以解析,尽管直接解析为其IP地址。

查看您提供的链接,node-exporter配置使用了task获得服务的方式:

使用导出程序服务名称,可以配置DNS发现:

scrape_configs:

- job_name: 'node-exporter'

dns_sd_configs:

- names:

- 'tasks.node-exporter'

type: 'A'

port: 9100

希望这可以帮助!

以上是 docker swarm中的Prometheus DNS服务发现 的全部内容, 来源链接: utcz.com/qa/406016.html

回到顶部