可不可以对Text字段解析后再做聚合?
在我们的场景中,使用ES存储各种请求接口的日志,像时间戳、客户端IP、请求接口、处理结果(错误码)等这些信息是固定格式的,可以设计一个特定索引来存储
不同的请求接口,具体请求的内容不同,因为现在是将多种请求放到一起,所以对于请求的内容目前是使用一个text字段来存储的
比如某种请求A的请求体内容是这样的
{users=[{name=zhangsan, age=10, address=杭州}, {name=lisi, age=18, address=上海}], city=[{name=杭州, desc=西湖}, {name=上海, desc=黄浦江}]}
这个信息存储在text类型的loginfo字段
现在有这样一个需求,通过Filter将所有的请求A的数据过滤出来,然后针对loginfo字段想做解析后再聚合,实现类似这样的效果
- 用户1在10:00:00到12:00:00这个时间段内请求的次数
- 用户1在10:00:00到12:00:00这个时间段内请求的成功率
- 等等
目前我搜索到的信息是这样的,text类型的字段不支持聚合
所以我现在想到的方案是,在收到类似上面原始日志内容的时候,将不同的请求放到不同的索引中存储
针对每种请求自己的loginfo内容,对loginfo做解析,解析出想要的字段,存储为keyword类型
然后就可以针对这些keyword完成上面的这些需求了
但是我这里想问的是,ES、Kibana有没有原生的工具,先对loginfo做拆解,然后对拆解后的字段做聚合?
这样的话,直接在ES、Kibana中就可以对text的字段做解析和聚合了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只要不同接口格式不冲突(比如,同一个key不要有不同的数据类型),key 的总数不是太多(1000?),都解析出来放一起是没有问题的。
而且,你总是可以把不同的接口数据放在不同的 index 里的。
json parse 的事应该在 ES 之前搞定,到了 ES 都还是 string ,就没啥办法了 ...
elk 日志查询系统?