Поиск и устранение неисправностей в ElasticSearch Watcher: invalid_argument_exception, резон: посторонний цикл - PullRequest
0 голосов
/ 22 октября 2018

Мой наблюдатель работает хорошо и успешно выдает предупреждения, но теперь у меня возникли проблемы.

Чтобы достичь более сложных условий срабатывания, я изменил свое состояние наблюдателя с сравнения на безболезненный сценарий и получилinvalid_argument_exception, и резонс является посторонним для цикла.вот мои часы json:

PUT /_xpack/watcher/watch/test11111
{
  "trigger": {
    "schedule": {
      "interval": "1m"
    }
  },
  "input": {
    "search": {
      "request": {
        "search_type": "query_then_fetch",
        "indices": [
          "auto-article-web-prod-*"
        ],
        "types": [],
        "body": {
          "size": 0,
          "query": {
            "bool": {
              "filter": [
                {
                  "range": {
                    "@timestamp": {
                      "from": "now-20m",
                      "to": "now"
                    }
                  }
                }
              ]
            }
          },
          "aggs": {
            "failed_api": {
              "terms": {
                "field": "log_content.apiName"
              }
            }
          }
        }
      }
    }
  },
  "condition" : {
      "script" : """
      for (bucket in ctx.payload.aggregations.failed_api.buckets) {
        String key = bucket.key;
        int value = bucket.doc_count;
        if(key == 'articlenumber'){
            return value >= 5;
        }
        else if(value >= 20){
            return true;
        }
        else{
            return false;
        }
    }
      """
    },
  "actions": {
    "my-logging-action": {
    ...
    }
  }
}

и ответ:

{
  "error": {
    "root_cause": [
      {
        "type": "script_exception",
        "reason": "compile error",
        "script_stack": [
          "      for (bucket in ctx.payloa ...",
          "      ^---- HERE"
        ],
        "script": "      for (bucket in ctx.payload.aggregations.failed_api.buckets) {\n        String key = bucket.key;\n        int value = bucket.doc_count;\n        if(key == 'article'){\n            return value >= 5;\n        }\n        else if(value >= 20){\n            return true;\n        }\n        else{\n            return false;\n        }\n    }",
        "lang": "painless"
      }
    ],
    "type": "script_exception",
    "reason": "compile error",
    "script_stack": [
      "      for (bucket in ctx.payloa ...",
      "      ^---- HERE"
    ],
    "script": "      for (bucket in ctx.payload.aggregations.failed_api.buckets) {\n        String key = bucket.key;\n        int value = bucket.doc_count;\n        if(key == 'article'){\n            return value >= 5;\n        }\n        else if(value >= 20){\n            return true;\n        }\n        else{\n            return false;\n        }\n    }",
    "lang": "painless",
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "Extraneous for loop."
    }
  },
  "status": 500
}

с моим входом, вот результат запроса:

{
  "took": 120,
  "timed_out": false,
  "_shards": {
    "total": 139,
    "successful": 139,
    "skipped": 133,
    "failed": 0
  },
  "hits": {
    "total": 70,
    "max_score": 0,
    "hits": [
      ...
    ]
  },
  "aggregations": {
    "failed_api": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "articlenumber",
          "doc_count": 38
        },
        {
          "key": "authorad",
          "doc_count": 15
        },
        {
          "key": "articlepv",
          "doc_count": 13
        },
        {
          "key": "authorarticlelist",
          "doc_count": 3
        },
        {
          "key": "author",
          "doc_count": 1
        }
      ]
    }
  }
}

I 'Мы проверили документацию Elastic. Но не получили ничего полезного.Как написать корретную петлю в безболезненном сценарии?Есть ли более конкретная информация для отладки?

1 Ответ

0 голосов
/ 02 ноября 2018

Наконец-то я обнаружил в своем скрипте ошибку, что он будет возвращаться при первом цикле, и наблюдатель будет работать хорошо после того, как я изменю свой скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...