Часы 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",
    }
 ]

}

Что мне нужно изменить в часах, чтобы они заработали?

Нужно ли мне также использовать событие консула, чтобы наблюдать за моей проверкой состояния, а затем запускать наблюдение консула (типа события), которое запускает мой /scripts/new-docker.sh скрипт? Если да, то как мне организовать мероприятие консула, которое следит за моей проверкой здоровья? Например, если бы это был мой консулский чек, часы и мероприятие, что мне нужно было бы изменить, чтобы это заработало?

{
 "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",
    }
 ]
}

person Alex Cohen    schedule 27.06.2016    source источник


Ответы (2)


Что мне нужно изменить в часах, чтобы они заработали?

Есть ли ошибки? Убедитесь, что ваш обработчик часов '/scripts/new-docker.sh' использует STDIN, который будет отправлять Consul, даже если он выбрасывает его в / dev / null, иначе процесс будет вечно ждать, пока он будет использован

Что-то вроде

while read -r -t 0; do read -r; done
person Tom Chamberlain    schedule 17.10.2016

Я бы порекомендовал рассмотреть возможность обновления до следующей версии Docker 1.12 (релиз-кандидат на данный момент). Новую концепцию сервисов можно использовать для указания желаемого количества запускаемых контейнеров.

Также в Dockerfile есть новая директива HEALTHCHECK, которая позволяет объединить проверку скрипт с изображением контейнера.

Эти новые функции могут позволить вам заменить функции, которые вам пришлось реализовать с помощью consul.

person Mark O'Connor    schedule 27.06.2016