Оповещение наблюдателя, если в течение x минут не найдено записей, соответствующих фильтру

Мне нужно, чтобы наблюдатель ElasticSearch оповещал, если нет записи, соответствующей шаблону, вставленному в индекс во временном интервале, он должен быть в состоянии сделать это, группируя по другой паре полей. то есть записи будут иметь вид: Date Timestamp Уровень Сообщение Сайт клиента

Необходимо проверить, что Соответствия сообщений "запущены" для каждого сайта (-ов) Клиента (т. Е. Карты Google и Карты Bing имеют один и тот же сайт Карт). Я считаю, что лучший (?) Способ сделать это прямо сейчас - запустить wacher для каждого клиентского сайта.

Софар У меня это, предположим, что задача должна писать работает в журнале каждые 20 минут:

{
  "trigger" : { 
    "schedule" : {
      "interval" : "25m"
    }
  },
  "input" : { 
    "search" : {
      "request" : {
        "search_type" : "count",
        "indices" : "<logstash-{now/d}>",
        "body" : {
          "filtered" : {
            "query" : { 
              "match_phrase" : { "Message" : "Is running" } 
            },
            "filter" : {
              "match" : { "Client" : "Example" } ,
              "match" : { "Site" : "SomeSite" } 
            }

          }
        }
      }
    }
  },
  "condition" : { 
    "script" : "return ctx.payload.hits.total < 1"
  },

  "actions" : { 
    },
    "email_administrator" : {
      "email" : {
        "to" : "me@host.tld",
        "subject" : "Tasks are not running for {{ctx.payload.client}} on their site {{ctx.payload.site}}",
        "body" : "Too many error in the system, see attached data",
        "attach_data" : true,
        "priority" : "high"
      }
    }
  }
}

2 ответа

Вы должны изменить свое состояние, он поддерживает формат JSON:

     "condition" : { 
         "script" : "return ctx.payload.hits.total : 1"
                   }

Пожалуйста, обратитесь по ссылке ниже,

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

Для тех, кто ищет, как это сделать в будущем, несколько вещей должны быть вложены в запрос как часть фильтра, и соответствие становится термином. Веселье!...

{
  "trigger": {
    "schedule": {
      "interval": "25m"
    }
  },
  "input": {
    "search": {
      "request": {
        "search_type": "count",
        "indices": "<logstash-{now/d}>",
        "body": {
          "query": {
            "filtered": {
              "query": {
                "match_phrase": {
                  "Message": "Its running"
                }
              },
              "filter": {
                "query": {
                  "term": {
                    "Client": "Example"
                  }
                },
                "query": {
                  "term": {
                    "Site": "SomeSite"
                  }
                },
                "query": {
                  "range": {
                    "event_timestamp": {
                      "gte": "now-25m",
                      "lte": "now"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "condition": {
    "compare": {
      "ctx.payload.hits.total": {
        "lte": 1
      }
    }
  },

  "actions": {
    "email_administrator": {
      "email": {
        "to": "me@host.tld",
        "subject": "Tasks are not running for {{ctx.payload.client}} on their site {{ctx.payload.site}}",
        "body": "Tasks are not running for {{ctx.payload.client}} on their site {{ctx.payload.site}}",
        "attach_data": true,
        "priority": "high"
      }
    }
  }
}
Другие вопросы по тегам