ES日志报错赏析-Limit of total fields

2022-07-07 11:32:26 浏览数 (2)

报错现象

代码语言:javascript复制
[o.e.a.a.i.m.p.TransportPutMappingAction] [------nodeid-------] failed to put mappings on indices [[[--------IndexName---------]]], type [doc]
java.lang.IllegalArgumentException: Limit of total fields [1000] in index [--------IndexName---------] has been exceeded
	at org.elasticsearch.index.mapper.MapperService.checkTotalFieldsLimit(MapperService.java:656) ~[elasticsearch-6.8.2.jar:6.8.2]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:537) ~[elasticsearch-6.8.2.jar:6.8.2]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:415) ~[elasticsearch-6.8.2.jar:6.8.2]

报错解析

此问题为写入时报错,ES中默认限制单个索引1000个字段,因为索引中定义太多的字段会导致 mapping 的激增,从而引起内存的错误和难以恢复的情况。

此问题常见于日志拆分后,自动更新更新mapping,由于日志拆分逻辑异常,导致很多异常字段被误认为是新字段,导致索引maaping字段激增大于1000.导致更新报错。

解决方案

1-调整索引setting,临时增大字段数限制,下述方式中my_index为报错的index名。

代码语言:javascript复制
PUT my_index/_settings
{
"index.mapping.total_fields.limit": 2000
}  
此处设置为2000  最大索引

2-检查业务侧导致字段数激增的原因,减少单个索引字段数量。

0 人点赞