Начало работы с Watcher
Чтобы начать отправку оповещений, настройте просмотр:
- Настройка расписания и определения входных данных.
- Добавление условия, проверяющего необходимость отправки оповещения.
- Настройка действия по отправке оповещения при выполнении условия.
Настройка расписания и определения входных данных
Расписание просмотра контролирует частоту срабатывания просмотра. Входные данные просмотра получают данные, которые необходимо оценить.
Чтобы периодически искать данные в журнале и загружать результаты в просмотр, можно использовать расписание интервалов и входные данные поиска. Например, следующий просмотр ищет ошибки в индексе logs каждые 10 секунд:
resp = client.watcher.put_watch(
id="log_error_watch",
trigger={
"schedule": {
"interval": "10s"
}
},
input={
"search": {
"request": {
"indices": [
"logs"
],
"body": {
"query": {
"match": {
"message": "error"
}
}
}
}
}
},
)
print(resp) const response = await client.watcher.putWatch({
id: "log_error_watch",
trigger: {
schedule: {
interval: "10s",
},
},
input: {
search: {
request: {
indices: ["logs"],
body: {
query: {
match: {
message: "error",
},
},
},
},
},
},
});
console.log(response); PUT _watcher/watch/log_error_watch
{
"trigger" : {
"schedule" : { "interval" : "10s" }
},
"input" : {
"search" : {
"request" : {
"indices" : [ "logs" ],
"body" : {
"query" : {
"match" : { "message": "error" }
}
}
}
}
}
} | Расписания обычно настраиваются на менее частую работу. В данном примере интервал установлен на 10 секунд, чтобы вы могли легко увидеть срабатывания просмотров. Поскольку этот просмотр работает так часто, не забудьте удалить просмотр, когда закончите экспериментировать. |
Если проверить историю просмотра, вы увидите, что просмотр срабатывает каждые 10 секунд. Однако поиск не возвращает результатов, поэтому ничего не загружается в содержимое просмотра.
Например, следующий запрос извлекает последние десять выполнений просмотра (записи просмотра) из истории просмотра:
resp = client.search(
index=".watcher-history*",
pretty=True,
sort=[
{
"result.execution_time": "desc"
}
],
)
print(resp) response = client.search(
index: '.watcher-history*',
pretty: true,
body: {
sort: [
{
'result.execution_time' => 'desc'
}
]
}
)
puts response const response = await client.search({
index: ".watcher-history*",
pretty: "true",
sort: [
{
"result.execution_time": "desc",
},
],
});
console.log(response); GET .watcher-history*/_search?pretty
{
"sort" : [
{ "result.execution_time" : "desc" }
]
} Добавление условия
Условие оценивает загруженные данные и определяет, требуется ли какое-либо действие. Теперь, когда вы загрузили ошибки журнала в просмотр, вы можете определить условие, которое проверяет, были ли обнаружены какие-либо ошибки.
Например, следующее условие сравнения просто проверяет, вернул ли входной поиск какие-либо совпадения.
resp = client.watcher.put_watch(
id="log_error_watch",
trigger={
"schedule": {
"interval": "10s"
}
},
input={
"search": {
"request": {
"indices": [
"logs"
],
"body": {
"query": {
"match": {
"message": "error"
}
}
}
}
}
},
condition={
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
)
print(resp) const response = await client.watcher.putWatch({
id: "log_error_watch",
trigger: {
schedule: {
interval: "10s",
},
},
input: {
search: {
request: {
indices: ["logs"],
body: {
query: {
match: {
message: "error",
},
},
},
},
},
},
condition: {
compare: {
"ctx.payload.hits.total": {
gt: 0,
},
},
},
});
console.log(response); PUT _watcher/watch/log_error_watch
{
"trigger" : { "schedule" : { "interval" : "10s" }},
"input" : {
"search" : {
"request" : {
"indices" : [ "logs" ],
"body" : {
"query" : {
"match" : { "message": "error" }
}
}
}
}
},
"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
}
} | Условие сравнения позволяет легко сравнивать значения в контексте выполнения. |
Для оценки этого условия сравнения как true, необходимо добавить событие в индекс logs, содержащий ошибку. Например, следующий запрос добавляет ошибку 404 в индекс logs:
resp = client.index(
index="logs",
document={
"timestamp": "2015-05-17T18:12:07.613Z",
"request": "GET index.html",
"status_code": 404,
"message": "Error: File not found"
},
)
print(resp) response = client.index(
index: 'logs',
body: {
timestamp: '2015-05-17T18:12:07.613Z',
request: 'GET index.html',
status_code: 404,
message: 'Error: File not found'
}
)
puts response const response = await client.index({
index: "logs",
document: {
timestamp: "2015-05-17T18:12:07.613Z",
request: "GET index.html",
status_code: 404,
message: "Error: File not found",
},
});
console.log(response); POST logs/_doc
{
"timestamp": "2015-05-17T18:12:07.613Z",
"request": "GET index.html",
"status_code": 404,
"message": "Error: File not found"
} После добавления этого события при следующем выполнении условия просмотра оно будет оценено как true. Результат условия записывается как часть watch_record при каждом выполнении просмотра, поэтому вы можете проверить, было ли условие выполнено, выполнив поиск в истории просмотра:
resp = client.search(
index=".watcher-history*",
pretty=True,
query={
"bool": {
"must": [
{
"match": {
"result.condition.met": True
}
},
{
"range": {
"result.execution_time": {
"gte": "now-10s"
}
}
}
]
}
},
)
print(resp) const response = await client.search({
index: ".watcher-history*",
pretty: "true",
query: {
bool: {
must: [
{
match: {
"result.condition.met": true,
},
},
{
range: {
"result.execution_time": {
gte: "now-10s",
},
},
},
],
},
},
});
console.log(response); GET .watcher-history*/_search?pretty
{
"query" : {
"bool" : {
"must" : [
{ "match" : { "result.condition.met" : true }},
{ "range" : { "result.execution_time" : { "gte" : "now-10s" }}}
]
}
}
} Настройка действия
Запись записей просмотра в истории просмотра полезна, но настоящая мощь Watcher заключается в возможности выполнения действий при выполнении условия просмотра. Действия просмотра определяют, что нужно делать, когда условие просмотра оценивается как true. Вы можете отправлять электронные письма, вызывать веб-хуки сторонних служб, записывать документы в индекс Elasticsearch или регистрировать сообщения в стандартные файлы журналов Elasticsearch.
Например, следующее действие записывает сообщение в журнал Elasticsearch при обнаружении ошибки.
resp = client.watcher.put_watch(
id="log_error_watch",
trigger={
"schedule": {
"interval": "10s"
}
},
input={
"search": {
"request": {
"indices": [
"logs"
],
"body": {
"query": {
"match": {
"message": "error"
}
}
}
}
}
},
condition={
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
actions={
"log_error": {
"logging": {
"text": "Found {{ctx.payload.hits.total}} errors in the logs"
}
}
},
)
print(resp) const response = await client.watcher.putWatch({
id: "log_error_watch",
trigger: {
schedule: {
interval: "10s",
},
},
input: {
search: {
request: {
indices: ["logs"],
body: {
query: {
match: {
message: "error",
},
},
},
},
},
},
condition: {
compare: {
"ctx.payload.hits.total": {
gt: 0,
},
},
},
actions: {
log_error: {
logging: {
text: "Found {{ctx.payload.hits.total}} errors in the logs",
},
},
},
});
console.log(response); PUT _watcher/watch/log_error_watch
{
"trigger" : { "schedule" : { "interval" : "10s" }},
"input" : {
"search" : {
"request" : {
"indices" : [ "logs" ],
"body" : {
"query" : {
"match" : { "message": "error" }
}
}
}
}
},
"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
},
"actions" : {
"log_error" : {
"logging" : {
"text" : "Found {{ctx.payload.hits.total}} errors in the logs"
}
}
}
} Удаление просмотра
Поскольку log_error_watch настроен на выполнение каждые 10 секунд, убедитесь, что вы удалите его, когда закончите экспериментировать. В противном случае шум от этого образцового просмотра затруднит обнаружение других событий в истории просмотра и файле журнала.
Чтобы удалить просмотр, используйте API удаления просмотра:
resp = client.watcher.delete_watch(
id="log_error_watch",
)
print(resp) response = client.watcher.delete_watch( id: 'log_error_watch' ) puts response
const response = await client.watcher.deleteWatch({
id: "log_error_watch",
});
console.log(response); DELETE _watcher/watch/log_error_watch
Необходимые права доступа
Чтобы пользователи могли создавать и изменять просмотры, назначьте им роль безопасности watcher_admin. Администраторы Watcher также могут просматривать просмотры, историю просмотров и срабатывания просмотров.
Чтобы разрешить пользователям просматривать просмотры и историю просмотров, назначьте им роль безопасности watcher_user. Пользователи Watcher не могут создавать или изменять просмотры; они разрешены только для выполнения операций просмотра только для чтения.
Следующие шаги
- Подробнее о структуре просмотра и жизненном цикле просмотра см. в разделе Как работает Watcher.
- Дополнительные примеры настройки просмотра см. в разделе Примеры просмотров.
- Дополнительные образцы просмотров, которые вы можете использовать в качестве отправной точки для создания пользовательских просмотров, см. в репозитории Elastic Examples Примерные просмотры.
© 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-getting-started.html