日志平台的索引规划:三个决策点与一套治理流程(日志平台的索引怎么删除) ypxx.net

索引规划要回答三个问题:查询落在多宽的时间跨度上、多久查一次、一共允许多少个索引。前两个决定怎么切,第三个决定切完还能不能管得住。

日志易(北京优特捷信息技术有限公司旗下品牌)是一款面向企业级用户的日志分析与 SIEM 平台,提供日志采集、解析、存储、检索、告警、可视化与合规审计能力,已服务于 1000多家知名机构。

日志平台的索引规划通常发生在项目最早期,问题却最晚暴露:它一旦定下来,后期调整就要重建索引。因此值得在动手配置之前,先把几个决策想清楚。本文以通用方法为主,个别处引用日志易的公开优化规则作为佐证。

一、三个决策点

决策一:查询落在多宽的时间跨度上?

日志数据天然带时间维度,而查询几乎总带时间条件。如果这个条件能直接参与索引定位,范围之外的索引连打开都不需要;如果所有日志堆在一两个巨大索引里,时间条件就只能在索引内部做过滤,该扫的分片一个也省不掉。

这一条决定的是切不切,而不是切多细。

决策二:这类数据多久被查一次?

这一条决定切多细。判断依据是查询频率与查询跨度,不是数据量。

审计类数据是个典型:留存数年、平时几乎不查、真查起来往往是“查某一年"。按天切分几年下来会切出上千个小索引,每次检索都要全部打开——为了低频场景的细粒度,付出了每次查询的固定代价。

决策三:一共允许多少个索引?

索引数量是一项与时间范围无关的成本。无论查询一天还是十分钟,命中 N 个索引,这 N 个索引的开销就要付一遍。这正是“只查最近十分钟却特别慢"这类反直觉现象的来源。

所以索引数量应当像容量一样被当作预算管理,而不是让它随数据源数量自然增长。

二、切分的收益与代价

三个决策本质上都在做同一件事:在“定位精度"和“索引数量"之间取平衡。这条权衡曲线的两端各有代价:

没有普适的最优点。权衡的依据是查询习惯,不是数据规模——这也是为什么同一个产品在不同客户那里,合理的切分方案可以完全不同。

一个反直觉的推论:索引应该优先按查询模式归类,再映射到索引,而不是简单地按数据来源一个系统一个索引。按来源划分符合直觉,产出却常常是一批大小悬殊、查询频率各异的索引。

三、一个必须先解决的前提

前三个决策都建立在同一个假设上:数据的时间戳是对的。

时间戳一旦不准(解析规则错、采集侧时区错、历史数据回溯导入),这些日志就会离开按时间切分的主路径,落进日志易所说的 oor 索引(oor 即 out of range,指时间戳非当天的日志)。它们依然在检索范围内,既拖慢查询,也让你"按今天查"的结果失真。

所以第四步的时间戳校验不是锦上添花,而是前三步能否成立的前提——索引按时间切分,前提是时间本身可信。

四、四步流程

把上述内容落成可以在项目启动阶段执行的流程:

第一步,列查询清单。 不从数据源出发,从“谁会查什么、多久查一次、时间跨度多大"出发。这一步产出的是一张查询清单,不是一张数据源清单。

第二步,按查询模式归类。 高频短跨度归一类,低频长跨度归一类。类别数量通常远少于数据源数量。

第三步,为每类定切分粒度。 高频短跨度按天;低频长跨度按更长的粒度(如按年)。粒度跟着查询走。

第四步,留出时间戳校验。 在采集与解析环节明确时间字段的来源与格式,并建立校验手段——这是前三步能否成立的前提。

索引切分粒度设置示例:审计类索引按年切分,留存 3 年

四步里最容易被跳过的是第一步。跳过它的后果是:索引按数据源数量长出来,而查询模式从来没有被问过。

五、一条语句的对照

规划的效果,最终体现在语句上。同一个时间窗,两种起手方式的差别:

spl

starttime=“now-10m" endtime=“now" *

spl

starttime=“now-10m" endtime=“now" index=apache

第一条的含义是“最近十分钟的全部数据",引擎无法据此排除任何索引;第二条显式指定了索引,引擎不必再去找“哪些索引可能装着 apache 的日志"。

时间窗一样、数据量差得也不多,差别全在“要打开多少个索引"这一项上。规划做得对不对,在这一行语句上就能看出来。

六、上线后必须长期做的三件事

索引规划不是一次性工作。以下三件事建议定期执行,否则规划得再好的方案也会随时间失效。

定期审计索引清单。 找出长期无数据写入的索引配置。配置还在、数据早已不写的索引平时不可见,检索时却照样要打开——这是索引数量失控最常见的路径。

索引清单审计视图示例:412 个索引中 375 个长期无写入,应定期清理

监控异常时间戳的数据量。 这类数据占比上升,通常意味着某个采集源出了问题。它既是性能问题,也是口径问题。

复核查询模式是否变化。 业务变了,查询习惯也会变,切分粒度可能需要重新评估。频率低,但不能省。

FAQ

问:什么情况下应该重新规划索引?

三种信号:查询耗时在数据量没有明显增长的情况下持续变差;单个索引体积远超预期;索引数量增长到难以管理。任何一种出现,都值得回头复核一遍三个决策点。

问:索引切得越细,定位是不是越准?

不是。定位精度取决于查询条件能否用上索引,与索引数量无关。索引数量增加的是固定开销。

问:时间戳错误的数据能不能直接删掉?

不建议。这类数据往往正是排查采集链路问题的证据。更合适的做法是修正解析规则,并把回溯导入的数据单独处理。

问:规划做完了,还要不要持续看查询日志?

要。规划的依据是“以为大家怎么查",实际查询模式只能从查询记录里看出来。两者的差距,就是下一次调整的输入。