ELK Watcher警报基于一个时间范围内2个查询的百分比

时间:2018-10-24 13:37:12

标签: elastic-stack

我们正在从splunk切换到elk,并且在splunk中,我们基于从2个查询的结果得出的百分比来创建警报。

让我们假设日志记录每次过程完成时都会输出“完成”消息,并且在发生错误时也输出“错误”消息。我想在一个时间范围内查询这两条消息,如果错误大于X%,则创建一个警报。

我已经为此搜索了一段时间,但没有发现任何东西。任何帮助都会很棒!

谢谢!

1 个答案:

答案 0 :(得分:0)

这样的想法是创建一个查询,并将结果分解为单独的存储桶,您可以在其中轻松地对结果进行统计分析。

{
  "trigger": ...,
   "input": {
    "search": {
       "request": {
         "search_type": "query_then_fetch",
         "indices": [
          ...
        ],
        "types": [],
         "body": {
          "query": {
            "bool": {
              "should": [
                {
                  "query_string": {
                    "query": "Successful",
                    "default_field": "message"
                  }
                },
                {
                  "query_string": {
                    "query": "Failed",
                    "default_field": "message"
                  }
                }
              ]
            }
          },
          "aggs": {
            "messages": {
              "filters": {
                "other_bucket_key": "successful_requests",
                "filters": {
                  "failed_requests": {
                    "bool": {
                      "must": [
                        {
                          "query": {
                            "query_message": "Failed",
                            "default_field:"message"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "condition": {
    "script": {
      "source": "return ctx.payload.aggregations.messages.buckets.failed_request.doc_count/ctx.payload.aggregations.messages.buckets.successful_request.doc_count > ctx.metadata.thresholdPercent",
      "lang": "painless"
    }
  },
  "actions": ...
  },
  "metadata": {
    "thresholdPercent": 0.5
  }
}

在此示例中,您搜索“失败或成功”,然后将此结果分为2个存储桶。这些存储桶之一是隐式的,而“ failed_request”存储桶将获取与“ Failed”查询匹配的所有结果。在这种情况下,您可以轻松使用,并确定成功请求的文档数是否超过设置的阈值。 可以找到过滤器存储桶聚合文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html