Не удается разделить несколько значений контекста в Elasticsearch Watcher

Я создал часы в Elasticsearch, чтобы предупредить меня, если соотношение ошибок http превышает 15% от общего числа запросов за 60 минут. Я использую входные данные цепочки для генерации значений дивидендов и делителей для расчета коэффициента.

В моем состоянии я использую сценарии, чтобы выполнить деление и проверить, больше ли это, чем мое соотношение.

Однако всякий раз, когда я использую 2 параметра ctx для деления, он всегда равен нулю.

Если я играю с ним и использую только один из параметров ctx, то он работает нормально.

Кажется, что мы не можем использовать 2 ctx params в условии.

Кто-нибудь знает, как это обойти?

Ниже мои часы.

Благодарю.

{
  "trigger" : {
    "schedule" : {
      "interval" : "5m"
    }
  },
  "input" : {
    "chain":{
      "inputs": [
      {
        "first": {
          "search" : {
            "request" : {
              "indices" : [ "logstash-*" ],
              "body" : {
                "query" : { 
                  "bool":{
                    "must": [
                      {
                      "match" : {"d.uri": "xxxxxxxx"}
                      },
                      { 
                      "match" : {"topic": "xxxxxxxx"}
                      }
                    ],
                    "filter": {
                      "range": {
                        "@timestamp": {
                          "gte": "now-60m"
                        }
                      }
                    }
                  }
                }
              }
            },
            "extract": ["hits.total"]
          }
        }
      },
      {
        "second": {
          "search" : {
            "request" : {
              "body" : {
                "query" : { 
                  "bool":{
                    "must": [
                      {
                      "match" : {"d.uri": "xxxxxxxx"}
                      },
                      { 
                      "match" : {"topic": "xxxxxxxx"}
                      },
                      { 
                      "match" : {"d.status": "401"}
                      }
                    ],
                    "filter": {
                      "range": {
                        "@timestamp": {
                          "gte": "now-60m"
                        }
                      }
                    }
                  }
                }
              }
            },
            "extract": ["hits.total"]
          }
        }
      }
      ]
    }
  },
  "condition" : {
    "script" : {
      "source" : "return (ctx.payload.second.hits.total / ctx.payload.first.hits.total) == 0"
    }
  }
}

1 ответ

Решение

На самом деле проблема возникает из-за того, что я делал целочисленное деление, чтобы получить соотношение в форме 0.xx. Я полностью изменил операцию, и она работает нормально.

Другие вопросы по тегам