Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
272 views
in Technique[技术] by (71.8m points)

可不可以对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的字段做解析和聚合了


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

只要不同接口格式不冲突(比如,同一个key不要有不同的数据类型),key 的总数不是太多(1000?),都解析出来放一起是没有问题的。

而且,你总是可以把不同的接口数据放在不同的 index 里的。

json parse 的事应该在 ES 之前搞定,到了 ES 都还是 string ,就没啥办法了 ...


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...