如何通过Docker实例对Elastic Stack警报进行分组?

时间:2018-05-06 13:43:25

标签: elasticsearch kibana elastic-stack

某个周期性任务应该每分钟发生一次。如果在阈值警报中出现以下情况,我可以发送警报。

WHEN count() GROUPED OVER top 1 'periodicTaskLog' IS BELOW 1 FOR THE LAST 2 minutes

(它使用基本的Watch创建GUI。如果需要,我可以使用Advanced Watch JSON。)

我的复杂功能:此任务在两个或更多Docker实例中单独发生,我想检查中没有被阻止。 (这是在Google AppEngine Flexible Environment中。)

我想说“关键periodicTaskLog必须在每个实例中每分钟发生一次。否则发送提醒。”

我有字段instance_name。每个实例的名称都是一个任意值,如"a58hgh12g2""h9mm48dfh",每个部署都不同。所以,我无法编写条件来将这些名称包含为文字。

那么,我该如何以这种方式分组?

1 个答案:

答案 0 :(得分:0)

请参阅回答here

{
  "trigger": {
    "schedule": {
      "interval": "10s"
    }
  },
  "input": {
    "search": {
      "request": {
        "search_type": "query_then_fetch",
        "indices": [
          "packetbeat-*"
        ],
        "types": [],
        "body": {
          "size": 0,
          "query": {
            "match_all": {}
          },
          "aggs": {
            "unique_beat_names": {
              "terms": {
                "field": "ip",
                "size": 5
              },
              "aggs": {
                "response_code": {
                  "filter": {
                    "exists": {
                      "field": "dns.response_code"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "condition": {
    "script": {
      "source": "ctx.vars.missing=false;for (def beat_name : ctx.payload.aggregations.unique_beat_names.buckets){if(beat_name.doc_count == 0 || beat_name.response_code.doc_count == 0){ctx.vars.missing=true;}}return ctx.vars.missing;",
      "lang": "painless"
    }
  },
  "actions": {
    "my-logging-action": {
      "logging": {
        "level": "info",
        "text": "Oh yea"
      }
    }
  }
}