我们正在从splunk切换到elk,并且在splunk中,我们基于从2个查询的结果得出的百分比来创建警报。
让我们假设日志记录每次过程完成时都会输出“完成”消息,并且在发生错误时也输出“错误”消息。我想在一个时间范围内查询这两条消息,如果错误大于X%,则创建一个警报。
我已经为此搜索了一段时间,但没有发现任何东西。任何帮助都会很棒!
谢谢!
答案 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