【发布时间】:2017-11-25 18:32:24
【问题描述】:
我正在研究一种解决方案,用于将应用程序日志存储在 Elastic Search 中,用于跨多个开发团队的许多应用程序。每个日志条目的结构都与一个“app”字段相同,以指示应用程序。
#1 目标是支持在单个“应用程序”内进行高效查询。跨所有应用程序查询虽然仍然很重要,但将是次要的。
我正在尝试确定什么是最好的:
编辑:在这两种情况下,我都会使用基于时间的索引。
多个索引系列
每个“应用程序”都会有一系列基于时间的索引(app1-2017-04-01、app1-2017-04-02、...等)用户将直接针对这些较小的索引执行搜索。这里的想法是,由于索引的大小较小,因此查询它们可能更快?
单索引系列
使用一个巨大的索引系列来表示所有应用程序日志(例如,logs-2017-04-01、logs-2017-04-02、...等) 用户会查询“app”字段以缩小搜索结果。
在这种情况下哪个更快?我很好奇额外索引的开销成本
【问题讨论】:
-
在处理日志时,您确实希望使用基于时间的索引。我这样做的方式是让每个应用程序写入自己的月度索引(appname__2017-06、anotherapp__2017-06 等)。这样,当需要删除旧数据时,您可以删除整个月,而不是运行昂贵且缓慢的删除查询。
-
@Johnny 目前我正在为每个应用编写基于每日时间的索引。我的问题是我应该使用一个巨大的基于时间的索引还是许多较小的基于时间的索引
-
你从错误的角度来处理这个问题。你应该问自己一组不同的问题。保留期限是多少?有多少个应用程序?您预计每个应用每天将拥有多少数据(以 GB 为单位)?有多少个 ES 节点?这些节点的硬件资源是什么?您是主要查询最新时期的索引还是旧索引也有相同数量的查询?
标签: elasticsearch