Не удалось указать условие для наблюдателя для elasticsearch?

Я установил наблюдателя и задал условие. При задании условия это дает мне ошибку, что...

{"error":"WatcherException[failed to put watch [log_error_watch]]; nested: ScriptConditionValidationException[failed to compile script [return ctx.payload.hits.total > 5] with lang [groovy] of type [INLINE]]; nested: ScriptException[dynamic scripting for [groovy] disabled]; ","status":500}

Что такое динамический скрипт? Это дает мне ошибку, что он отключен. Мое условие для наблюдателя следующее.

curl -XPUT 'http://localhost:9200/_watcher/watch/log_error_watch' -d '{
  "metadata" : { 
    "color" : "red"
  },
  "trigger" : { 
    "schedule" : {
      "interval" : "10s"
    }
  },
  "input" : { 
    "search" : {
      "request" : {
        "search_type" : "count",
        "indices" : "logs",
        "body" : {
          "query" : { "match" : { "status" : "error" } }
        }
      }
    }
  },
  "condition" : { 
    "script" : "return ctx.payload.hits.total > 5"
  },
  "transform" : { 
    "search" : {
        "request" : {
          "indices" : "logs",
          "body" : {
            "query" : { "match" : { "status" : "error" } }
          }
        }
    }
  },
  "actions" : { 
    "my_webhook" : {
      "webhook" : {
        "method" : "GET",
        "host" : "mylisteninghost",
        "port" : 9200,
        "path" : "/{{watch_id}}",
        "body" : "Encountered {{ctx.payload.hits.total}} errors"
      }
    },
    "email_administrator" : {
      "email" : {
        "to" : "[email protected]",
        "subject" : "Encountered {{ctx.payload.hits.total}} errors",
        "body" : "Too many error in the system, see attached data",
        "attach_data" : true,
        "priority" : "high"
      }
    }
  }
}'

person A.N.B Akhilesh    schedule 26.06.2015    source источник


Ответы (2)


@andrei прав насчет того, как включить динамические сценарии в Elasticsearch, и я собирался вставить ту же ссылку.

Однако, исходя из указанного вами условия, похоже, что вам вообще не нужно использовать скрипты! У Watcher есть условие compare, которое идеально подходит:

https://www.elastic.co/guide/en/watcher/current/condition.html#condition-compare

В вашем случае условие будет выглядеть так:

    {
  ...

  "condition" : {
    "compare" : {
      "ctx.payload.hits.total" : { 
        "gte" : 5 
      }
  }
  ...
}
person Steve Kearns    schedule 26.06.2015
comment
Я удалил историю наблюдателей и установил снова. я снова получаю такую ​​​​ошибку.. . -------------------------------------------------- ---› {error:WatcherException[не удалось установить часы [error_status]]; вложенный: StrictDynamicMappingException [сопоставление установлено как строгое, динамическое введение [_status] в [watch] не разрешено]; ,статус:500} - person A.N.B Akhilesh; 29.06.2015
comment
Похоже, у вас была установлена ​​предварительная версия watcher. Для обновления следуйте инструкциям здесь: elastic. co/guide/en/watcher/current/ - person Steve Kearns; 30.06.2015

Вам необходимо включить динамические сценарии в Elasticsearch: https://www.elastic.co/guide/en/watcher/current/condition.html#condition-script

Состояние наблюдения, которое оценивает скрипт. Язык сценариев по умолчанию — groovy. Вы можете использовать любой из языков сценариев, поддерживаемых Elasticsearch, если этот язык поддерживает преобразование выражений в логические значения. Обратите внимание, что языки усов и выражений слишком ограничены, чтобы их можно было использовать в этом условии. Дополнительные сведения см. в разделе «Сценарии» в справочнике по Elasticsearch.

Важный

Вы должны явно включить динамические скрипты в elasticsearch.yml, чтобы использовать встроенные или индексированные скрипты.

И фактически включение динамических сценариев: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#enable-dynamic-scripting

person Andrei Stefan    schedule 26.06.2015