推荐阅读
Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506
Helm3(K8S 资源对象管理工具)博客专栏:https://blog.csdn.net/xzk9381/category_10895812.html
本文原文链接:https://blog.csdn.net/xzk9381/article/details/114630302,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。
ES 集群的日志记录中经常会发现如下报错信息:
[2021-02-04T22:40:06,673][DEBUG][o.e.a.a.i.m.p.TransportPutMappingAction] [m-7416] failed to put mappings on indices [[[nginx-server-log-000022/dQLTO5UGQKOUVRn2FnS3Zw]]], type [_doc]
java.lang.IllegalArgumentException: Limit of total fields [1000] in index [nginx-log-000022] has been exceeded
其中的关键报错信息是 Limit of total fields [1000] in index [nginx-server-log-000022] has been exceeded
,触发这个报错的原因是由于该日志是 JSON 类型,而 ES 默认 JSON 类型日志 index 的最大字段长度为 1000,但是当前业务的日志中很多都超过了 1000 个字段。
之所以默认最大 1000 个字段,是因为索引中定义太多的字段可能会导致 mapping 的激增,从而引起内存的错误和难以恢复的情况。所以解决这个问题的方式有两个:
- 需要业务开发人员精简字段数,控制在 1000 以下
- 调整默认字段数限制
这里使用第二种方式来解决这个问题,在 Kibana 中执行如下命令可以为指定索引修改限制:
PUT nginx-server-log/_settings
{
"index.mapping.total_fields.limit": 2000
}
也可以为所有的索引都修改配置:
PUT _all/_settings
{
"index.mapping.total_fields.limit": 2000
}
在创建索引的时候也可以直接指定配置,避免后续再进行修改:
PUT _template/ngx-server
{
"index_patterns": ["ngx-server-*"],
"settings": {
"number_of_shards": 15,
"number_of_replicas": 1,
"index.lifecycle.name": "ngx-api-normal",
"index.lifecycle.rollover_alias": "ngx-server",
"index.mapping.total_fields.limit": 2000
}
}
本文原文链接:https://blog.csdn.net/xzk9381/article/details/114630302,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。