В индексе Elasticsearch больше полей, чем разрешено
«Limit of total fields [1000] has been exceeded while adding new fields» в Elasticsearch и в журналах Logstash или Vector: документ добавил бы в индекс поля сверх предела index.mapping.total_fields.limit, и он не записан. Как поднять предел и почему лучше уменьшить число полей.
Что это значит
Elasticsearch ограничивает число полей в одном индексе параметром index.mapping.total_fields.limit, по умолчанию 1000. Когда приходит документ с новыми полями и предел уже достигнут, документ отклоняется с этой ошибкой. Отправитель (Logstash, Vector, Filebeat) пишет её в свой журнал, а запись в индекс не попадает.
С журналами Directum RX это случается часто: в полях args и cust у разных сообщений разные вложенные ключи, и при автоматическом создании полей их число быстро растёт. В справке вендора случай описан для решения «Мониторинг Directum RX».
Как проверить
GET <индекс>/_settings?include_defaults=true&filter_path=**.total_fields
GET <индекс>/_mapping
Что сделать
- Быстро: поднять предел для текущего индекса.
PUT <индекс>/_settings
{ "index.mapping.total_fields.limit": 2000 }
- Для новых индексов прописать предел в шаблоне индекса, иначе завтра индекс снова создастся с 1000.
- Правильнее уменьшить число полей: разнородные вложенные объекты (
args,cust) сохранять одной строкой JSON или отключить для них автоматическое создание полей. Как это сделано при сборе через Vector, есть в статье про Vector для журналов RX.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать