Opensearch - 索引的最佳实践

Posted

技术标签:

【中文标题】Opensearch - 索引的最佳实践【英文标题】:Opensearch - best practice for indexing 【发布时间】:2022-01-22 21:34:08 【问题描述】:

我有大约 1 TB 的旧 apache 日志数据,我想在 Opensearch 中建立索引。日志是每天的,结构如下:s3://bucket/logdata/year/year_month_day.json.gz

我计划使用 logstash 进行摄取,并想知道索引以获得性能的最佳方式? 我想每天索引,但是如何从上面的日志文件名中提取日期以在 logstash conf 文件中正确显示?

index = > "%+YYYY.MM.dd" 将解决未来的日志文件,但我如何解决旧的?

【问题讨论】:

最好从日志事件中提取日期,而不是日志文件名,事件是什么样子的? 【参考方案1】:

您可以使用dissect filter 来执行此操作,它可以解析存储桶键中的日期组件并将日期重构为一个名为log_date 的新字段:

dissect 
    mapping => 
        "[@metadata][s3][key]" => "%ignore/logdata/%+ignore/%year_%+month_%day.json.gz"
    
    add_field => 
       "log_date" => "%year-%month-%day"
    
    remove_field => ["ignore"]

然后在您的输出部分中,您可以引用该新字段以构建您的索引名称:

index = > "your-index-%log_date"

PS:另一种方法是将year_month_day 部分解析为一个标记,并使用mutate/gsub_ 字符替换为-

【讨论】:

这个运气好吗?【参考方案2】:

根据我的经验,每日索引可能很快就会失控:它们的大小差异很大,保留期不错的集群可能会过度分片等。我建议使用基于两个索引年龄的策略设置 ILM rollover (7 或 30 天,取决于日志记录量)和主分片大小(常用阈值为 50GB)。您还可以根据保留期限在同一策略中设置删除阶段。

这样您将获得最佳的索引和搜索性能,以及均匀的负载分布和资源使用。

【讨论】:

ILM 是 Elasticsearch 独有的东西,opensearch 没有 Opensearch 也有类似的ISM plugin

以上是关于Opensearch - 索引的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 索引 - 最佳实践是啥?

索引最佳实践

MATLAB for 循环索引的最佳实践

确保 Solr/Lucene 索引在长时间重建后“最新”的最佳实践

grails 索引页面的最佳实践

慢SQL治理最佳实践