为什么领事健康检查返回一个空数组?
Why is consul health check returning an empty array?
我们有一个 docker-compose.yml 文件:
version: '3'
services:
consul:
container_name: consul
command: agent -dev -config-dir=/consul/config
dns: 8.8.8.8
hostname: consul-docker
image: docker-registry.mycompany.net/ap/consul-ent:0.9.2
ports:
- "8500:8500"
volumes:
- ./consul/config/conf.json:/consul/config/conf.json
# https://github.com/gliderlabs/registrator
registrator:
command: consul://consul:8500
container_name: registrator
depends_on:
- consul
image: gliderlabs/registrator:latest
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock
myservice1:
container_name: myservice1
image: docker-registry.mycompany.net/ap/myservice1/develop:latest
ports:
- "8080:8080"
- "5000:5000"
# more services below
当我使用 consul v1 API 通过转到 http://localhost:8500/v1/health/checks/myservice1 , it returns an empty array [].
检查健康状态时
根据docker ps和myservice1的日志,myservice1已经就绪。
myservice1 在 http://localhost:8500/ui/#/dc1/services
上显示为绿色
myservice1 是一个基于 dropwizard 的 java 微服务。
根据https://www.consul.io/api/health.html,响应示例
$ curl https://consul.rocks/v1/health/service/my-service
看起来像:
[
{
"Node": {
"ID": "40e4a748-2192-161a-0510-9bf59fe950b5",
"Node": "foobar",
"Address": "10.1.10.12",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "10.1.10.12",
"wan": "10.1.10.12"
},
"Meta": {
"instance_type": "t2.medium"
}
},
"Service": {
"ID": "redis",
"Service": "redis",
"Tags": ["primary"],
"Address": "10.1.10.12",
"Port": 8000
},
"Checks": [
{
"Node": "foobar",
"CheckID": "service:redis",
"Name": "Service 'redis' check",
"Status": "passing",
"Notes": "",
"Output": "",
"ServiceID": "redis",
"ServiceName": "redis",
"ServiceTags": ["primary"]
},
{
"Node": "foobar",
"CheckID": "serfHealth",
"Name": "Serf Health Status",
"Status": "passing",
"Notes": "",
"Output": "",
"ServiceID": "",
"ServiceName": "",
"ServiceTags": []
}
]
}
]
根据注册器日志,它发现 myservice1 正常并添加了 myservice1。
如有任何关于我为什么会看到 [] 回复的想法,将不胜感激?
按照 https://gliderlabs.com/registrator/latest/user/backends/ 中的说明进行操作后,我能够进行基本的健康检查。我的印象是,在设置注册器和领事后,健康检查会自动进行。我需要通过在 docker-compose.yml 中提供环境变量来设置 HTTP 检查,例如:
SERVICE_80_CHECK_HTTP=/health/endpoint/path
SERVICE_80_CHECK_INTERVAL=15s
SERVICE_80_CHECK_TIMEOUT=1s # optional, Consul default used otherwise
我们有一个 docker-compose.yml 文件:
version: '3'
services:
consul:
container_name: consul
command: agent -dev -config-dir=/consul/config
dns: 8.8.8.8
hostname: consul-docker
image: docker-registry.mycompany.net/ap/consul-ent:0.9.2
ports:
- "8500:8500"
volumes:
- ./consul/config/conf.json:/consul/config/conf.json
# https://github.com/gliderlabs/registrator
registrator:
command: consul://consul:8500
container_name: registrator
depends_on:
- consul
image: gliderlabs/registrator:latest
restart: always
volumes:
- /var/run/docker.sock:/tmp/docker.sock
myservice1:
container_name: myservice1
image: docker-registry.mycompany.net/ap/myservice1/develop:latest
ports:
- "8080:8080"
- "5000:5000"
# more services below
当我使用 consul v1 API 通过转到 http://localhost:8500/v1/health/checks/myservice1 , it returns an empty array [].
根据docker ps和myservice1的日志,myservice1已经就绪。
myservice1 在 http://localhost:8500/ui/#/dc1/services
上显示为绿色myservice1 是一个基于 dropwizard 的 java 微服务。
根据https://www.consul.io/api/health.html,响应示例
$ curl https://consul.rocks/v1/health/service/my-service
看起来像:
[
{
"Node": {
"ID": "40e4a748-2192-161a-0510-9bf59fe950b5",
"Node": "foobar",
"Address": "10.1.10.12",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "10.1.10.12",
"wan": "10.1.10.12"
},
"Meta": {
"instance_type": "t2.medium"
}
},
"Service": {
"ID": "redis",
"Service": "redis",
"Tags": ["primary"],
"Address": "10.1.10.12",
"Port": 8000
},
"Checks": [
{
"Node": "foobar",
"CheckID": "service:redis",
"Name": "Service 'redis' check",
"Status": "passing",
"Notes": "",
"Output": "",
"ServiceID": "redis",
"ServiceName": "redis",
"ServiceTags": ["primary"]
},
{
"Node": "foobar",
"CheckID": "serfHealth",
"Name": "Serf Health Status",
"Status": "passing",
"Notes": "",
"Output": "",
"ServiceID": "",
"ServiceName": "",
"ServiceTags": []
}
]
}
]
根据注册器日志,它发现 myservice1 正常并添加了 myservice1。
如有任何关于我为什么会看到 [] 回复的想法,将不胜感激?
按照 https://gliderlabs.com/registrator/latest/user/backends/ 中的说明进行操作后,我能够进行基本的健康检查。我的印象是,在设置注册器和领事后,健康检查会自动进行。我需要通过在 docker-compose.yml 中提供环境变量来设置 HTTP 检查,例如:
SERVICE_80_CHECK_HTTP=/health/endpoint/path
SERVICE_80_CHECK_INTERVAL=15s
SERVICE_80_CHECK_TIMEOUT=1s # optional, Consul default used otherwise