我有两种日志消息:
Jul 23 09:24:16 rrr mrr-core[222]: Aweg3AOMTs_1563866656871111.mt processMTMessage() #12798 realtime: 5.684 ms Jul 23 09:24:18 rrr mrr-core[2222]: Aweg3AOMTs_1563866656871111.0.dn processDN() #7750 realtime: 1.382 ms
第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。
它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。
这些消息将按以下格式解析并存储在elasticsearch中:
messageId: Aweg3AOMTs_1563866656871111.0.dn text: Aweg3AOMTs num1: 1563866656871111 num2: 0 suffix: mt/dn
我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。
我目前正在尝试术语聚合,但是我所能实现的就是以下代码:
GET /my_index3/_search { "size": 0, "aggs": { "num1": { "terms": { "field": "messageId.keyword", "include": ".*mt*." } } } }
向我显示已发送的消息。我不知道如何在其中添加一些过滤器或子句,以仅显示同时带有mt和dn后缀的消息。
如果有人有想法,我将非常感激:))
在messageId.keyword上运行术语聚合不是很好,因为每个消息都是不同的(“ Aweg3AOMTs_1563866656871111111.0.dn”与“ Aweg3AOMTs_1563866656871111.mt”不同)。
通过查看docs结构,我认为您最好num1对.mt和.dn消息的常见部分运行术语聚合。该聚合将为您提供每个唯一num1的邮件数。因此,对于每条收到请求和响应的消息,计数为2,只有请求的消息的计数为1。
num1
如果您还想查看数字本身,则可以在内部添加一个嵌套的聚合,例如大小为1的热门匹配聚合,它将在其中显示该num1字段:
GET /my_index3/_search { "size": 0, "aggs": { "num1": { "terms": { "field": "num1", "order": { "_count": "desc" }, "aggs": { "count_of_distinct_suffix": { "cardinality": { "field": "suffix" }, "aggs": { "filter_count_is_2": { "bucket_selector": { "buckets_path": { "the_doc_count": "_count" }, "script": "the_doc_count == 2" } } } } } } } } }