我正在将一些日志索引到ElasticSearch中,并且我对ES API有一些疑问,以便获取一些信息......
我有一个带有此映射的索引:
IMyInterface
我有一些项目(“projectName”)和一些应用程序(“appName”)'在'里面'。示例:App1和App2属于Project1。 “log”用于'log line',来自应用程序stdout / stderror。
我能够在日志行中获取包含例如“debug”的最新小时日志行...使用aggs并在桶中获取信息。我这样做(卷曲查询到ES api):
"appName" : {
"type" : "string",
"index" : "not_analyzed"
},
"log" : {
"type" : "string"
},
"projectName" : {
"type" : "string",
"index" : "not_analyzed"
}
结果:
{
"size" : 0,
"query" :
{ "range" : { "time" : { "from" : "now-1h", "to" : "now" } } },
"aggs":
{
"matcheo" :
{
"filter":
{
"match": { "log" : "debug" }
},
"aggs":
{
"projectName":
{
"terms": { "field": "projectName", "size":0 },
"aggs":
{
"appName":
{
"terms": { "field": "appName", "size":0 }
}
}
}
}
}
}
}
每个projectName中的每个appName都是如此...我得到的Project1有两个应用程序:App1包含12个包含“debug”的文档,App2包含48个包含“debug”的文档...
我现在正在努力做的事情是,我无法获得最新的小时日志行,其中包含“调试”或“错误”或“警告”,但这些条款“聚合”。例如,获取每个appName(在每个projectName中)有多少“log:”包含“debug”,多少“log:”包含“error”以及多少“log:”包含“warning”...
我尝试'过滤'匹配:...
"matcheo" : {
"doc_count" : 25,
"projectName" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "Project1",
"doc_count" : 12,
"appName" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "App1",
"doc_count" : 12
}, {
"key" : "App2",
"doc_count" : 48
},
} ]
...
但我不知道每个'期限'的数量。
有人能帮我吗?提前致谢!干杯!
答案 0 :(得分:0)
知道了!使用过滤器聚合!
{
"size" : 0,
"query" :
{ "range" : { "time" : { "from" : "now-1h", "to" : "now" } } },
"aggs":
{
"projectName":
{
"terms": { "field": "projectName", "size": 0},
"aggs":
{
"appName":
{
"terms": { "field": "appName", "size": 0},
"aggs":
{
"typology" :
{
"filters" :
{
"other_bucket_key": "other",
"filters" :
{
"errors" : { "match" : { "log" : "error" }},
"warnings" : { "match" : { "log" : "warning" }},
"debug" : { "match" : { "log" : "debug" }}
}
}
}
}
}
}
}
}
}
所以它有效,现在我能得到这样的东西:
"aggregations" : {
"projectName" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "Project1",
"doc_count" : 5,
"appName" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "App1",
"doc_count" : 5,
"tipologia" : {
"buckets" : {
"errors" : {
"doc_count" : 0
},
"warnings" : {
"doc_count" : 0
},
"debug" : {
"doc_count" : 5
},
"other" : {
"doc_count" : 0
}
}
}
}, {
"key" : "App2",
"doc_count" : 4,
"tipologia" : {
"buckets" : {
"errors" : {
"doc_count" : 2
},
"warnings" : {
"doc_count" : 0
},
"debug" : {
"doc_count" : 2
},
"other" : {
"doc_count" : 0
}
}
}
} ]
}
}
我想我用最好的方法来解决这个问题......我呢?
问候。