elasticsearch 使用标记器对弹性搜索中的文档进行分组
我对ES没有深入的了解,但我的老板让我负责汇总/分组错误消息,这样我们就可以看到错误消息出现的频率 这些文件看起来像
elasticsearch 使用标记器对弹性搜索中的文档进行分组,
elasticsearch,
elasticsearch,我对ES没有深入的了解,但我的老板让我负责汇总/分组错误消息,这样我们就可以看到错误消息出现的频率 这些文件看起来像 { "_index": "fluentd.php.error.20191223", "_type": "_doc", "_id": "0zYPM28B9xbIWtpXrXSt", "_version": 1, "_score": null, "_source": { "message": "WARNING Invalid argument supp
{
"_index": "fluentd.php.error.20191223",
"_type": "_doc",
"_id": "0zYPM28B9xbIWtpXrXSt",
"_version": 1,
"_score": null,
"_source": {
"message": "WARNING Invalid argument supplied for foreach() /var/www/class/bootstrap.php:9 /product-1",
"hostname": "webserver-1",
"@timestamp": "2019-12-23T14:19:04+0100",
"@log_name": "php.error"
},
"fields": {
"@timestamp": [
"2019-12-23T14:19:04.000Z"
]
},
"sort": [
1577109544000
]
}
罪魁祸首是,两条消息不同,但在同一文件中(在不同的url下)存在相同的错误
ES甚至有可能检测到这种语义吗?这些信息可能在许多方面有所不同。这是一个有趣的问题,我认为没有一个直截了当的答案。我能想到的方法之一就是使用 上面给出了类似于:
{
..
"aggregations" : {
"group" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "WARNING Invalid argument supplied for foreach() ",
"doc_count" : 2
}
]
}
}
..
}
您可以根据数据分析和获取错误类型等,根据需要使用脚本并按摩数据
GET /_search
{
"aggs": {
"group": {
"terms": {
"script": """
int endIndex = doc['message.keyword'].value.indexOf("/");
return doc['message.keyword'].value.substring(0,endIndex);"""
}
}
}
}
{
..
"aggregations" : {
"group" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "WARNING Invalid argument supplied for foreach() ",
"doc_count" : 2
}
]
}
}
..
}