Consul Watch: отслеживание изменений инфраструктуры и оповещение затронутых сервисов. Наблюдение организовано с помощью блокирующих запросов через HTTP API. Агент автоматически выполняет запрос данных и вызывает обработчика события.
Обработчик событий - любой исполняемый файл. Он должен принимать входные данные из потока stdin в формате JSON.
Объекты мониторинга задаются при старте агента и/или команды «consul watch». Управление мониторингом через HTTP API не предусмотрено. Интеграция возможна через библиотеки или sdk.
Агент consul поддерживает 7 видов наблюдений:
Используется для наблюдения за парой ключ/значение в распределенном хранилище.
Конфигурация наблюдателя в формате JSON:
{
"type": "key",
"key": "demo",
"handler": "/bin/cat"
}
или с помощью CLI интерфейса:
$ consul watch -type=key -key=demo /bin/cat
Формат входных данных для обработчика:
{
"Key": "demo",
"CreateIndex": 13,
"ModifyIndex": 13,
"LockIndex": 0,
"Flags": 0,
"Value": "dmFsdWU=",
"Session": ""
}
Используется для наблюдения за ключами по префиксу в распределенном хранилище. Возвращает все ключи подходящие по префиксу.
Конфигурация наблюдателя в формате JSON:
{
"type": "keyprefix",
"prefix": "demo/",
"handler": "/bin/cat"
}
или с помощью CLI интерфейса:
$ consul watch -type=keyprefix -prefix=demo/ /bin/cat
Формат входных данных для обработчика:
[
{
"Key": "demo/dev",
"CreateIndex": 13,
"ModifyIndex": 13,
"LockIndex": 0,
"Flags": 0,
"Value": "TU9BUg==",
"Session": ""
},
{
"Key": "demo/prod",
"CreateIndex": 13,
"ModifyIndex": 13,
"LockIndex": 0,
"Flags": 0,
"Value": "YXNkZg==",
"Session": ""
}
]
Используется для наблюдения за сервисами. Задается без параметров.
Конфигурация наблюдателя в формате JSON:
{
"type": "services",
"handler": "/bin/cat"
}
или с помощью CLI интерфейса:
$ consul watch -type=services /bin/cat
Формат входных данных для обработчика:
{
"consul": []
}
Используется для наблюдения за узлами. Задается без параметров.
Конфигурация наблюдателя в формате JSON:
{
"type": "nodes",
"handler": "/bin/cat"
}
или с помощью CLI интерфейса:
$ consul watch -type=nodes /bin/cat
Формат входных данных для обработчика:
[
{
"ID": "d50b1ab1-9e18-2e4f-b7b4-d8ca4b4cd4e2",
"Node": "791953045b86",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses":{
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"Meta": {},
"CreateIndex": 5,
"ModifyIndex": 6
}
]
Используется для наблюдения за экземплярами сервиса. Параметр «service» обязателен. Опционально могут быть заданы «tag» «passingonly».
Конфигурация наблюдателя в формате JSON:
{
"type": "service",
"service": "consul",
"handler": "/bin/cat"
}
или с помощью CLI интерфейса:
$ consul watch -type=service -service=consul /bin/cat
Формат входных данных для обработчика:
[
{
"Node": {
"ID": "d50b1ab1-9e18-2e4f-b7b4-d8ca4b4cd4e2",
"Node": «791953045b86",
"Address": «127.0.0.1",
"Datacenter": «dc1",
"TaggedAddresses":{
"lan": «127.0.0.1",
"wan": «127.0.0.1"
},
"Meta": {},
"CreateIndex": 5,
"ModifyIndex": 6
},
"Service": {
"ID": "consul",
"Service": "consul",
"Tags": [],
"Port": 8300,
"Address": "",
"EnableTagOverride": false,
"CreateIndex": 5,
"ModifyIndex": 5
},
"Checks":
[
{
"Node": "791953045b86",
"CheckID": "serfHealth",
"Name": "Serf Health Status",
"Status": "passing",
"Notes": "",
"Output": "Agent alive and reachable",
"ServiceID": "",
"ServiceName": "",
"ServiceTags": []
}
]
}
]
Используется для наблюдения за результатом проверок сервиса или его состояния. Опционально принимает один из параметров: «service» или «state». По умолчанию отслеживаются все проверки.
Конфигурация наблюдателя в формате JSON:
{
"type": "checks",
"service": "consul",
"handler": "/bin/cat"
}
или с помощью CLI интерфейса:
$ consul watch -type=checks -service=consul /bin/cat
Формат входных данных для обработчика:
[
{
"Node": "791953045b86",
"CheckID": "service:consul",
"Name": "Service 'consul' check",
"Status": "passing",
"Notes": "",
"Output": "",
"ServiceID": "consul",
"ServiceName": "consul",
"ServiceTags": []
}
]
Используется для наблюдения за прикладными событиями пользователя.
Конфигурация наблюдателя в формате JSON:
{
"type": "event",
"name": "user-event",
"handler": "/bin/cat"
}
или с помощью CLI интерфейса:
$ consul watch -type=event -name=user-event /bin/cat
Формат входных данных для обработчика:
[
{
"ID": "33dad143-4b3c-eb0f-e076-547ffc5bd907",
"Name": "user-event",
"Payload": "aGVsbG8td29ybGQ",
"NodeFilter": "",
"ServiceFilter": "",
"TagFilter": "",
"Version": 1,
"LTime": 4
},
...
]
Генерация события с помощью команды "consul event":
$ consul event -name=user-event hello-world
Consul - инструмент для глубокой интеграции с инфраструктурой. Реактивная реакция на изменения контекста. Переключение схемы взаимодействия между прикладными сервисами. С помощью данного инструмента вы можете вывести свою инфраструктуру на новый уровень. Реализовать собственный кластер поверх механизмов consul.