API подтверждения (ack) отслеживания
Подтверждение выполнения отслеживания позволяет вручную ограничить выполнение действий отслеживания.
Запрос
PUT _watcher/watch/<watch_id>/_ack
PUT _watcher/watch/<watch_id>/_ack/<action_id>
Предварительные требования
- Для использования этого API у вас должны быть
manage_watcherправа на кластер. Дополнительная информация — в разделе Права доступа к безопасности.
Описание
Состояние подтверждения действия хранится в структуре status.actions.<id>.ack.state.
Если указанное отслеживание выполняется в данный момент, этот API вернёт ошибку. Это сделано для предотвращения перезаписи состояния отслеживания во время его выполнения.
Параметры пути
-
<action_id> - (Необязательно, список) Список идентификаторов действий для подтверждения, разделённых запятыми. Если этот параметр опущен, подтверждаются все действия отслеживания.
-
<watch_id> - (Обязательно, строка) Идентификатор отслеживания.
Примеры
Для демонстрации создадим новое отслеживание:
resp = client.watcher.put_watch(
id="my_watch",
trigger={
"schedule": {
"yearly": {
"in": "february",
"on": 29,
"at": "noon"
}
}
},
input={
"simple": {
"payload": {
"send": "yes"
}
}
},
condition={
"always": {}
},
actions={
"test_index": {
"throttle_period": "15m",
"index": {
"index": "test"
}
}
},
)
print(resp) const response = await client.watcher.putWatch({
id: "my_watch",
trigger: {
schedule: {
yearly: {
in: "february",
on: 29,
at: "noon",
},
},
},
input: {
simple: {
payload: {
send: "yes",
},
},
},
condition: {
always: {},
},
actions: {
test_index: {
throttle_period: "15m",
index: {
index: "test",
},
},
},
});
console.log(response); PUT _watcher/watch/my_watch
{
"trigger" : {
"schedule" : {
"yearly" : { "in" : "february", "on" : 29, "at" : "noon" }
}
},
"input": {
"simple": {
"payload": {
"send": "yes"
}
}
},
"condition": {
"always": {}
},
"actions": {
"test_index": {
"throttle_period": "15m",
"index": {
"index": "test"
}
}
}
} Текущее состояние отслеживания и состояние его действий возвращаются вместе с определением отслеживания при вызове API получения отслеживания:
resp = client.watcher.get_watch(
id="my_watch",
)
print(resp) const response = await client.watcher.getWatch({
id: "my_watch",
});
console.log(response); GET _watcher/watch/my_watch
Состояние действий вновь созданного отслеживания — awaits_successful_execution:
{
"found": true,
"_seq_no": 0,
"_primary_term": 1,
"_version": 1,
"_id": "my_watch",
"status": {
"version": 1,
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-05-26T18:04:27.723Z",
"state": "awaits_successful_execution"
}
}
},
"state": ...
},
"watch": ...
} При выполнении отслеживания и совпадении условия значение ack.state изменяется на ackable. Выполним отслеживание и получим его снова, чтобы проверить состояние:
resp = client.watcher.execute_watch(
id="my_watch",
record_execution=True,
)
print(resp)
resp1 = client.watcher.get_watch(
id="my_watch",
)
print(resp1) const response = await client.watcher.executeWatch({
id: "my_watch",
record_execution: true,
});
console.log(response);
const response1 = await client.watcher.getWatch({
id: "my_watch",
});
console.log(response1); POST _watcher/watch/my_watch/_execute
{
"record_execution" : true
}
GET _watcher/watch/my_watch и действие теперь находится в состоянии ackable:
{
"found": true,
"_id": "my_watch",
"_seq_no": 1,
"_primary_term": 1,
"_version": 2,
"status": {
"version": 2,
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-05-26T18:04:27.723Z",
"state": "ackable"
},
"last_execution" : {
"timestamp": "2015-05-25T18:04:27.723Z",
"successful": true
},
"last_successful_execution" : {
"timestamp": "2015-05-25T18:04:27.723Z",
"successful": true
}
}
},
"state": ...,
"execution_state": "executed",
"last_checked": ...,
"last_met_condition": ...
},
"watch": ...
} Теперь мы можем подтвердить его:
resp = client.watcher.ack_watch(
watch_id="my_watch",
action_id="test_index",
)
print(resp)
resp1 = client.watcher.get_watch(
id="my_watch",
)
print(resp1) const response = await client.watcher.ackWatch({
watch_id: "my_watch",
action_id: "test_index",
});
console.log(response);
const response1 = await client.watcher.getWatch({
id: "my_watch",
});
console.log(response1); PUT _watcher/watch/my_watch/_ack/test_index GET _watcher/watch/my_watch
{
"found": true,
"_id": "my_watch",
"_seq_no": 2,
"_primary_term": 1,
"_version": 3,
"status": {
"version": 3,
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-05-26T18:04:27.723Z",
"state": "acked"
},
"last_execution" : {
"timestamp": "2015-05-25T18:04:27.723Z",
"successful": true
},
"last_successful_execution" : {
"timestamp": "2015-05-25T18:04:27.723Z",
"successful": true
}
}
},
"state": ...,
"execution_state": "executed",
"last_checked": ...,
"last_met_condition": ...
},
"watch": ...
} Подтверждение действия приостанавливает дальнейшее выполнение этого действия до тех пор, пока его ack.state не будет сброшено до awaits_successful_execution. Это происходит, когда условие отслеживания не выполняется (условие оценивается как false).
Вы можете подтвердить несколько действий, задав параметру actions список идентификаторов действий, разделённых запятыми:
resp = client.watcher.ack_watch(
watch_id="my_watch",
action_id="action1,action2",
)
print(resp) const response = await client.watcher.ackWatch({
watch_id: "my_watch",
action_id: "action1,action2",
});
console.log(response); POST _watcher/watch/my_watch/_ack/action1,action2
Чтобы подтвердить все действия отслеживания, просто опустите параметр actions:
resp = client.watcher.ack_watch(
watch_id="my_watch",
)
print(resp) const response = await client.watcher.ackWatch({
watch_id: "my_watch",
});
console.log(response); POST _watcher/watch/my_watch/_ack
Ответ похож на ответ API получения отслеживания, но содержит только состояние:
{
"status": {
"state": {
"active": true,
"timestamp": "2015-05-26T18:04:27.723Z"
},
"last_checked": "2015-05-26T18:04:27.753Z",
"last_met_condition": "2015-05-26T18:04:27.763Z",
"actions": {
"test_index": {
"ack" : {
"timestamp": "2015-05-26T18:04:27.713Z",
"state": "acked"
},
"last_execution" : {
"timestamp": "2015-05-25T18:04:27.733Z",
"successful": true
},
"last_successful_execution" : {
"timestamp": "2015-05-25T18:04:27.773Z",
"successful": true
}
}
},
"execution_state": "executed",
"version": 2
}
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/watcher-api-ack-watch.html