我有大约1 TB的旧apache日志数据,我想在Opensearch中建立索引。日志是每天的,结构如下:s3://bucket/logdata/year/year_month_day.json.gz我计划使用logstash进行摄取,想知道索引的最佳方式来获得性能?我想每天进行索引,但如何从上面的日志文件名中提取日期,以便在logstash配置文件中正确获得它?index = > "%{+YYYY.MM.dd}"将解决未来的日志文件,但如何解决旧的日志文件?
s3://bucket/logdata/year/year_month_day.json.gz
index = > "%{+YYYY.MM.dd}"
odopli941#
您可以使用dissect filter这样做,dissect filter可以解析bucket键中的日期部分,并将日期重新构造到名为log_date的新字段中:
dissect
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将_字符替换为-
year_month_day
mutate/gsub
_
-
pepwfjgg2#
根据我的经验,每日指数可能很快就会失控:它们的大小差别很大,在适当的保留期内,集群可能会碎片过多,等等。我建议使用基于索引年龄(7天或30天,取决于日志记录量)和主碎片大小(通常阈值为50GB)的策略来设置ILM rollover。这样,您将获得最佳的索引和搜索性能,以及均匀的负载分布和资源使用。
2条答案
按热度按时间odopli941#
您可以使用
dissect
filter这样做,dissect
filter可以解析bucket键中的日期部分,并将日期重新构造到名为log_date
的新字段中:然后,在输出部分中,您可以引用该新字段,以便构建索引名称:
PS:另一种方法是将
year_month_day
部分解析为一个令牌,并使用mutate/gsub
将_
字符替换为-
pepwfjgg2#
根据我的经验,每日指数可能很快就会失控:它们的大小差别很大,在适当的保留期内,集群可能会碎片过多,等等。我建议使用基于索引年龄(7天或30天,取决于日志记录量)和主碎片大小(通常阈值为50GB)的策略来设置ILM rollover。
这样,您将获得最佳的索引和搜索性能,以及均匀的负载分布和资源使用。