运行领事泊坞工健康检查的问题

时间:2016-06-13 05:10:52

标签: docker health-monitoring consul

正在使用gliderlabs / registrator容器运行progrium / consul容器。我正在尝试创建运行状况检查以监控我的docker容器是上升还是下降。然而,我注意到一些非常奇怪的活动,我可以做健康检查。这是我用来创建健康检查的命令:

curl -v -X PUT http://$CONSUL_IP_ADDR:8500/v1/agent/check/register -d @/home/myUserName/health.json

这是我的health.json文件:

{
"id": "docker_stuff",
"name": "echo test",
"docker_container_id": "4fc5b1296c99",
"shell": "/bin/bash",
"script": "echo hello",
"interval": "2s"
}

首先我注意到,只要容器正确停止,此检查就会自动删除服务,但是当容器未正确停止时(即节点发生故障),它将不会执行任何操作。

其次我注意到docker_container_id根本不重要,这个健康检查会将自己附加到连接到它的consul节点上运行的每个容器。

我想为在consul节点上运行的每个docker容器运行一个工作的tcp或http运行状况测试(是的,我知道我上面的json文件运行一个脚本,我只是按照文档示例创建了一个脚本)。我只想让领事能够判断一个容器是停止还是正在运行。健康检查失败时,我不希望我的服务自行删除。我该怎么做

注意:我发现代理健康检查的领事documentation 非常缺乏,模糊和不准确。所以请不要只链接到它并告诉我去阅读它。我正在寻找关于如何以正确方式设置docker运行状况检查的完整解释。

更新:以下是如何使用官方领事容器的最新版本启动consul服务器(现在它的开发版本很快就会用生产版本更新它):

#bootstrap server
docker run -d \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302 \
-p 8302:8302/udp \
-p 8400:8400 \
-p 8500:8500 \
-p 53:53/udp \
--name=dev-consul0 consul agent -dev -ui -client 0.0.0.0

#its IP address will then be the IP of the host machine
#lets say its 172.17.0.2

#start the other two consul servers, without web ui
docker run -d --name --name=dev-consul1 \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302 \
-p 8302:8302/udp \
-p 8400:8400 \
-p 8500:8500 \
-p 53:53/udp \
consul agent -dev -join=172.17.0.2

docker run -d --name --name=dev-consul2 \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302 \
-p 8302:8302/udp \
-p 8400:8400 \
-p 8500:8500 \
-p 53:53/udp \
consul agent -dev -join=172.17.0.2

# then heres your clients
docker run -d --net=host --name=client0 \
-e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' \
consul agent -bind=$(hostname -i) -retry-join=172.17.0.2

https://hub.docker.com/r/library/consul/

2 个答案:

答案 0 :(得分:1)

progrium / consul图片有旧版本的领事(https://hub.docker.com/r/progrium/consul/tags/),目前似乎没有维护。

请尝试使用当前版本的官方图片作为领事https://hub.docker.com/r/library/consul/tags/

您还可以使用registrator在与您的服务相关的领事中注册支票。例如

SERVICE_[port_]CHECK_SCRIPT=nc $SERVICE_IP $SERVICE_PORT | grep OK

更多示例:http://gliderlabs.com/registrator/latest/user/backends/#consul

答案 1 :(得分:0)

因此,使用任何版本的consul容器的解决方案是直接在主机上安装consul。这可以通过https://sonnguyen.ws/install-consul-and-consul-template-in-ubuntu-14-04/

中的以下步骤来完成
sudo apt-get update -y
sudo apt-get install -y unzip curl
sudo wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip

sudo unzip consul_0.6.4_linux_amd64.zip  
sudo rm consul_0.6.4_linux_amd64.zip

sudo chmod +x consul
sudo mv consul /usr/bin/consul

sudo mkdir -p /opt/consul
cd /opt/consul
sudo wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_web_ui.zip  
sudo unzip consul_0.6.4_web_ui.zip 
sudo rm consul_0.6.4_web_ui.zip

sudo mkdir -p /etc/consul.d/

sudo wget https://releases.hashicorp.com/consul-template/0.14.0/consul-template_0.14.0_linux_amd64.zip
sudo unzip consul-template_0.14.0_linux_amd64.zip
sudo rm consul-template_0.14.0_linux_amd64.zip
sudo chmod a+x consul-template
sudo mv consul-template /usr/bin/consul-template


sudo nohup consul agent -server -bootstrap-expect 1 \
  -data-dir /tmp/consul -node=agent-one \
  -bind=$(hostname -i) \
  -client=0.0.0.0 \
  -config-dir /etc/consul.d \
  -ui-dir /opt/consul/ &

echo 'Done with consul install!!!'

然后在您执行此操作后创建consul运行状况检查json文件,可以找到有关如何执行此操作的信息here.创建json文件后,只需将它们放入/etc/consul.d目录并重新启动consul与consul reload。如果在重新加载consul之后没有添加新的运行状况检查,则json文件的语法有问题。返回编辑它们并重试。