领事与重要的领事检查

时间:2016-06-27 13:05:42

标签: docker health-monitoring consul self-healing

所以我有一个领事检查,看着一个容器,并设计成在容器停止时变得至关重要。我想创建一个consul监视器,它将在检查完成后运行脚本,或者在几个关键响应之后运行脚本(例如,如果我的检查发送了5个关键响应,我希望它运行脚本)。

这是我的工作支票的json以及我对手表的外观的猜测:

{

 // this check works
 "checks": [
    {
        "id": "docker_stuff",
        "name": "curl test",
        "notes": "curls the docker container",
        "script": "/scripts/docker.py",
        "interval": "1s"
    }
 ],

 //this watch doesn't work
 "watches": [
    {
        "Node": "client2",
        "CheckID": "docker-stuff",
        "Name": "docker-stuff-watch",
        "Status": "critical",
        "Status_amt": "5",
        "handler": "/scripts/new-docker.sh",
        "Output": "container relaunched",
    }
 ]

}

我需要更改手表以使其正常工作?

我是否还需要使用consul事件来查看我的健康状况检查,然后触发运行我的/scripts/new-docker.sh脚本的consul watch(事件类型)?如果是这样,那我怎么做一个监督我的健康检查的领事?例如,如果这是我的领事检查,观察和事件,我需要改变什么来使其工作?

{
 "checks": [
    {
        "id": "docker_stuff",
        "name": "curl test",
        "notes": "curls the docker container",
        "script": "/scripts/docker.py",
        "interval": "1s"
    }
 ],
 "watches": [
    {     
        "type": "event", 
        "name": "docker-stuff-watch",
        "handler": "/scripts/new-docker.sh"
    }
 ],
 "events": [
    {
        "Node": "client2",
        "CheckID": "docker-stuff",
        "Name": "docker-stuff-event",
        "Status": "critical",
        "Status_amt": "5",
        "Output": "container relaunched",
    }
 ]
}

2 个答案:

答案 0 :(得分:1)

  

我需要更改手表以使其正常工作?

有任何错误吗?确保您的手表处理程序' /scripts/new-docker.sh'正在消耗Consul将要发送的STDIN,即使它将它丢弃到/ dev / null,否则进程将永远等待它被消耗

这样的东西
while read -r -t 0; do read -r; done

答案 1 :(得分:0)

我建议考虑升级到下一版本的Docker 1.12(目前的候选版本)。新的服务概念可用于说明要运行的所需容器数量。

Dockerfile中还有一个新的HEALTHCHECK指令,可以将检查脚本与容器映像捆绑在一起。

这些新功能可能使您能够使用领事替换您必须实现的功能。