Условие Watcher на основе скрипта
Условие Watcher, которое оценивает скрипт. По умолчанию используется язык сценариев painless. Вы можете использовать любой из языков сценариев, поддерживаемых Elasticsearch, при условии, что язык поддерживает оценку выражений в булевы значения. Обратите внимание, что языки mustache и expression слишком ограничены для использования с этим условием. Более подробную информацию см. в разделе Сценарии.
Использование условия на основе скрипта
Следующий фрагмент конфигурирует встроенное script условие, которое всегда возвращает true:
"condition" : {
"script" : "return true"
} В этом примере скрипт определён как простая строка. Этот формат является сокращением для определения встроенного скрипта. Формальное определение скрипта — это объект, который указывает тип скрипта и необязательные значения языка и параметров. Если атрибут lang опущен, язык по умолчанию устанавливается в painless. Elasticsearch поддерживает два типа скриптов: встроенные и сохранённые.
Например, следующий фрагмент демонстрирует формальное определение inline скрипта, который явно указывает язык и определяет один параметр скрипта, result:
"condition" : {
"script" : {
"source" : "return params.result",
"lang" : "painless",
"params" : {
"result" : true
}
}
} Встроенные скрипты
Встроенные скрипты определяются непосредственно в условии. Следующий фрагмент показывает формальную конфигурацию простого скрипта painless, который всегда возвращает true.
"condition" : {
"script" : {
"source" : "return true"
}
} Сохраненные скрипты
Сохраненные скрипты — это скрипты, которые были сохранены в Elasticsearch. Следующий фрагмент показывает, как обратиться к скрипту по его id:
"condition" : {
"script" : {
"id" : "my_script"
}
} Как и с встроенными скриптами, вы также можете указать язык скрипта и параметры:
"condition" : {
"script" : {
"id" : "my_script",
"lang" : "javascript",
"params" : { "color" : "red" }
}
} Доступ к данным payload наблюдения
Скрипт может получить доступ к текущему контексту выполнения наблюдения, включая данные payload, а также любые параметры, переданные через определение условия.
Например, следующий фрагмент определяет наблюдение, которое использует search вход и использует script условие для проверки, превышает ли количество совпадений заданный порог:
{
"input" : {
"search" : {
"indices" : "log-events",
"body" : {
"size" : 0,
"query" : { "match" : { "status" : "error" } }
}
}
},
"condition" : {
"script" : {
"source" : "return ctx.payload.hits.total > params.threshold",
"params" : {
"threshold" : 5
}
}
}
} При использовании скриптового условия для оценки ответа Elasticsearch помните, что поля ответа больше не имеют своих исходных типов данных. Например, @timestamp в ответе — это строка, а не DateTime. Чтобы сравнить ответ @timestamp с ctx.execution_time, необходимо преобразовать строку @timestamp в DateTime. Например:
org.elasticsearch.common.joda.time.DateTime.parse(@timestamp)
В контексте наблюдения вы можете обратиться к следующим переменным:
| Имя | Описание |
|---|---|
| Идентификатор наблюдения, которое выполняется в данный момент. |
| Время начала выполнения этого наблюдения. |
| Время срабатывания этого наблюдения. |
| Время, когда это наблюдение должно было сработать. |
| Любая метаданные, связанные с наблюдением. |
| Данные payload, загруженные входными данными наблюдения. |
© 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/7.17/condition-script.html