docker 群中的 Prometheus dns 服务发现
Prometheus dns service discovery in 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。那么内层的 lbs 策略会将收入请求路由到不同的后端实例。
那么相关作品是如何成功的呢?
谢谢!
对于 Prometheus
DNS 服务发现,您不想使用 docker swarm
内部负载平衡 Virtual IP (VIP)
。
您正在寻找的是每任务 服务 DNS。要获取 swarm 中每项服务的 IP 地址,只需 prefix 您的 docker swarm 服务名称的 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):
$ 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
您可以查看 ,其中显示了 docker swarm
中获取 DNS 解析的 3 种不同方式。基本上,对于 docker swarm
中名为 myservice
的服务:
myservice
解析到该服务的 Virtual IP (VIP)
,该服务在内部 负载平衡 到各个任务 IP 地址。
tasks.myservice
解析为集群中部署的每个容器的 每个私有 IP。
docker.com
不作为服务名称存在,因此请求被转发到配置的默认 DNS 服务器(您可以自定义)。
注意:容器名称也会解析,尽管直接解析为它们的 IP 地址。
查看您提供的链接,node-exporter
配置使用 task
到达服务的方式:
Using the exporters service name, you can configure DNS discovery:
scrape_configs:
- job_name: 'node-exporter'
dns_sd_configs:
- names:
- 'tasks.node-exporter'
type: 'A'
port: 9100
希望对您有所帮助!
我正在为我的服务寻找一些监控和警报解决方案。我发现了以下不错的相关作品。
这两个作品都使用 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。那么内层的 lbs 策略会将收入请求路由到不同的后端实例。
那么相关作品是如何成功的呢?
谢谢!
对于 Prometheus
DNS 服务发现,您不想使用 docker swarm
内部负载平衡 Virtual IP (VIP)
。
您正在寻找的是每任务 服务 DNS。要获取 swarm 中每项服务的 IP 地址,只需 prefix 您的 docker swarm 服务名称的 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):
$ 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
您可以查看 docker swarm
中获取 DNS 解析的 3 种不同方式。基本上,对于 docker swarm
中名为 myservice
的服务:
myservice
解析到该服务的Virtual IP (VIP)
,该服务在内部 负载平衡 到各个任务 IP 地址。tasks.myservice
解析为集群中部署的每个容器的 每个私有 IP。docker.com
不作为服务名称存在,因此请求被转发到配置的默认 DNS 服务器(您可以自定义)。
注意:容器名称也会解析,尽管直接解析为它们的 IP 地址。
查看您提供的链接,node-exporter
配置使用 task
到达服务的方式:
Using the exporters service name, you can configure DNS discovery:
scrape_configs: - job_name: 'node-exporter' dns_sd_configs: - names: - 'tasks.node-exporter' type: 'A' port: 9100
希望对您有所帮助!