Поток данных журналов
Режим индексации Elasticsearch logsdb в целом доступен в Elastic Cloud Hosted и в самостоятельно управляемом Elasticsearch с версии 8.17 и по умолчанию включен для логов в Elastic Cloud Serverless.
Поток данных логов — это тип потока данных, который хранит данные логов более эффективно.
В тестах производительности данные логов, хранящиеся в потоке данных логов, занимали примерно в 2,5 раза меньше места на диске, чем обычные потоки данных. Точное влияние зависит от набора данных.
Создать поток данных логов
Чтобы создать поток данных логов, установите вашу шаблон index.mode на logsdb:
resp = client.indices.put_index_template(
name="my-index-template",
index_patterns=[
"logs-*"
],
data_stream={},
template={
"settings": {
"index.mode": "logsdb"
}
},
priority=101,
)
print(resp) const response = await client.indices.putIndexTemplate({
name: "my-index-template",
index_patterns: ["logs-*"],
data_stream: {},
template: {
settings: {
"index.mode": "logsdb",
},
},
priority: 101,
});
console.log(response); PUT _index_template/my-index-template
{
"index_patterns": ["logs-*"],
"data_stream": { },
"template": {
"settings": {
"index.mode": "logsdb"
}
},
"priority": 101
} | Настройка режима индексации. | |
| Приоритет шаблона индекса. По умолчанию Elasticsearch поставляется со шаблоном индекса |
После создания шаблона индекса новые индексы, использующие этот шаблон, будут настроены как поток данных логов. Вы можете начать индексирование данных и использовать поток данных.
Вы также можете установить режим индексации и настроить другие параметры шаблона в интерфейсе Elastic UI.
Синтетический источник
Если у вас есть необходимая подписка, режим индексации logsdb использует синтетический _source, который опускает хранение исходного _source поля. Вместо этого источник документа синтезируется из значений doc или сохранённых полей при получении документа.
Если у вас нет необходимой подписки, режим logsdb использует исходное поле _source.
Прежде чем использовать синтетический источник, ознакомьтесь с ограничениями.
При работе с полями с несколькими значениями настройка index.mapping.synthetic_source_keep контролирует, как значения полей сохраняются для реконструкции синтетического источника. В logsdb значение по умолчанию — arrays, которое сохраняет как дублирующие значения, так и порядок элементов. Однако точная структура элементов массива и объектов не обязательно сохраняется. Сохранение дубликатов и порядка может иметь важное значение для некоторых полей логов, таких как записи DNS A, заголовки HTTP и записи логов, которые представляют последовательные или повторяющиеся события.
Настройки сортировки индекса
В режиме индексации logsdb по умолчанию применяются следующие настройки сортировки:
-
index.sort.field:["host.name", "@timestamp"] - Индексы сортируются по полю
host.nameи@timestampпо умолчанию. Поле@timestampавтоматически вставляется, если оно отсутствует. -
index.sort.order:["desc", "desc"] - И поле
host.nameи@timestampсортируются в порядке убывания (desc), отдавая приоритет последним данным. -
index.sort.mode:["min", "min"] - Режим
minсортирует индексы по минимальному значению полей с несколькими значениями. -
index.sort.missing:["_first", "_first"] - Отсутствующие значения сортируются, чтобы отображаться
_first.
Вы можете переопределить эти настройки сортировки. Например, чтобы сортировать по разным полям и изменить порядок, вручную настройте index.sort.field и index.sort.order. Подробнее см. в разделе Сортировка индекса.
При использовании настроек сортировки по умолчанию поле host.name автоматически вставляется в сопоставления индексов в качестве поля keyword, чтобы обеспечить возможность применения сортировки. Это гарантирует, что логи сортируются и извлекаются эффективно на основе полей host.name и @timestamp.
Если subobjects установлено на true (по умолчанию), поле host отображается как поле объекта с именем host и дочерним полем name типа keyword. Если subobjects установлено на false, одно поле host.name отображается как поле keyword.
Чтобы применить другие настройки сортировки к существующему потоку данных, обновите компоненты шаблонов потока данных, а затем выполните или дождитесь переноса.
В режиме logsdb поле @timestamp автоматически вставляется, если оно не присутствует. Если вы применяете пользовательские настройки сортировки, поле @timestamp вставляется в сопоставления, но не добавляется автоматически в список полей сортировки.
Существующие потоки данных
Если вы включаете режим индексации logsdb для потока данных, который уже существует, убедитесь, что проверили сопоставления и сортировку. Режим logsdb автоматически преобразует поле host.name в ключевое слово, если оно включено в настройках сортировки. Если поле host.name уже существует, но имеет другой тип, могут возникнуть ошибки сопоставления, препятствующие полному применению режима logsdb.
Чтобы избежать конфликтов сопоставлений, рассмотрите следующие варианты:
- Настройка сопоставлений: Проверьте существующие сопоставления, чтобы убедиться, что
host.nameотображается как ключевое слово. - Изменение сортировки: При необходимости вы можете удалить
host.nameиз настроек сортировки и использовать другой набор полей. Сортировка по полю@timestampможет стать хорошей альтернативой. - Переключение на другой режим индексации: Если устранение конфликтов сопоставлений
host.nameне представляется возможным, вы можете не использовать режимlogsdb.
Для существующих потоков данных режим logsdb применяется при переносе (автоматическом или ручном).
Специализированные кодеки
По умолчанию режим индексации logsdb использует best_compression кодек, который применяет сжатие ZSTD к сохранённым полям. Вы можете переключиться на кодек default для более быстрого сжатия с несколько большим размером занимаемого места.
Режим индексации logsdb также автоматически применяет специализированные кодеки для числовых значений doc, чтобы оптимизировать использование хранилища. Числовые поля кодируются с помощью следующей последовательности кодеков:
- Кодирование разницы: хранит разницу между последовательными значениями вместо фактических значений.
- Кодирование смещения: хранит разницу от базового значения вместо разницы между последовательными значениями.
- Кодирование наибольшего общего делителя (НОД): находит наибольший общий делитель набора значений и сохраняет разницы как кратные НОД.
- Кодирование ссылочной системы (FOR): определяет минимальное количество битов, необходимое для кодирования блока значений, и использует укладку битов для размещения таких значений в больших 64-битных блоках.
Каждый метод кодирования оценивается с помощью эвристик, определяемых распределением данных. Например, алгоритм проверяет, являются ли данные монотонно не убывающими или не возрастающими. В случае, если это так, применяется кодирование разницы; в противном случае процесс продолжается с использованием следующего метода кодирования (смещение).
Кодирование специфично для каждого сегмента Lucene и повторно применяется при слиянии сегментов. Объединённый сегмент Lucene может использовать другое кодирование, чем исходные сегменты, в зависимости от характеристик объединённых данных.
Для ключевых полей применяется кодирование сплошной последовательности (RLE) к порядкам, которые представляют позиции в словаре ключевых слов на уровне сегмента Lucene. Это сжатие используется, когда несколько последовательных документов имеют одинаковое ключевое слово.
ignore настройки
Режим индексации logsdb использует следующие настройки ignore. Вы можете переопределить эти настройки по мере необходимости.
ignore_malformed
По умолчанию режим индексации logsdb устанавливает ignore_malformed на true. С этой настройкой документы с повреждёнными полями могут быть проиндексированы без сбоев при загрузке.
ignore_above
В режиме индексации logsdb настройка index.mapping.ignore_above по умолчанию применяется на уровне индекса, чтобы обеспечить эффективное хранение и индексирование больших ключевых полей. Значение по умолчанию для ignore_above на уровне индекса составляет 8191 символ. Используя кодировку UTF-8, это приводит к ограничению в 32764 байта, в зависимости от кодировки символов.
Настройка на уровне отображения ignore_above имеет приоритет. Если для конкретного поля в его отображении определено значение ignore_above, это значение переопределяет значение на уровне индекса index.mapping.ignore_above. Такое поведение по умолчанию помогает оптимизировать производительность индексации, предотвращая индексирование чрезмерно больших строковых значений.
Если вам нужно настроить ограничение, вы можете переопределить его на уровне отображения или изменить значение по умолчанию на уровне индекса.
ignore_dynamic_beyond_limit
В режиме индексации logsdb значение настройки index.mapping.total_fields.ignore_dynamic_beyond_limit установлено по умолчанию в true. Эта настройка позволяет добавлять динамически отображаемые поля поверх статически определённых полей, даже если общее количество полей превышает index.mapping.total_fields.limit. Вместо того, чтобы вызывать ошибку индексации, дополнительные динамически отображаемые поля игнорируются, чтобы обеспечить продолжение загрузки.
При автоматической инъекции, host.name и @timestamp учитываются при подсчёте лимита отображаемых полей. Если host.name отображается с subobjects: true, у него два поля. При отображении с subobjects: false, у host.name всего одно поле.
Поля без doc_values
Когда режим индексации logsdb использует синтетические _source и doc_values отключены для поля в отображении, Elasticsearch может установить значение настройки store в true для этого поля. Это гарантирует, что данные поля остаются доступными для восстановления исходного документа при использовании синтетического _source.
Например, это изменение происходит с текстовыми полями, когда store является false и подходящего многопольного поля для восстановления исходного значения нет.
Ссылка на настройки
Режим индексации logsdb использует следующие настройки:
-
index.mode:"logsdb" -
index.mapping.synthetic_source_keep:"arrays" -
index.sort.field:["host.name", "@timestamp"] -
index.sort.order:["desc", "desc"] -
index.sort.mode:["min", "min"] -
index.sort.missing:["_first", "_first"] -
index.codec:"best_compression" -
index.mapping.ignore_malformed:true -
index.mapping.ignore_above:8191 -
index.mapping.total_fields.ignore_dynamic_beyond_limit:true
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/logs-data-stream.html