Хранилища
Хранилища перечисляются в секции storages
, ссылки на хранилища добавляются в секцию pipe
. Количество хранилищ не ограничено, но сослаться на одно хранилище можно только один раз.
Описание хранилищ в секции storages
Описание хранилища состоит из следующих элементов:
name
— имя хранилища, по которому на него можно сослаться из цепочки обработки;plugin
— плагин хранилища;config
— конфигурация входа.
Пример секции storages
:
storages:
- name: main
plugin: fs
config:
directory: ./data/storage/main
max_partition_size: 500mb
- name: secondary
plugin: fs
config:
directory: ./data/storage/secondary
max_partition_size: 100mb
Добавление хранилища в секцию pipe
Чтобы сослаться на хранилище, используется директива storage_ref
с параметрами:
name
— имя хранилища, определенное в секцииstorages
;flow_control
— настройки механизма создания сессий.
Пример цепочки обработки со ссылкой на хранилище:
pipe:
- storage_ref:
name: main # обязательный, имя хранилища, определенное в секции storages
# Конфигурация инфраструктуры работы с сессиями.
flow_control:
new_sessions_rate_limit: null # необязательный, по умолчанию не задан
Плагин хранилища fs
Поддерживается только один плагин – файловое хранилище fs
. Сообщения сохраняются в партициях. Партиции — это директории, содержащие файлы-сегменты с данными сообщений, а также файлы с метаданными.
Важно
Не рекомендуется использовать файловое хранилище вместе с опцией монтирования файловой системы nobarrier
. При потере питания не гарантируется сохранность данных, может потребоваться ручное вмешательство.
Описание параметров:
storages: # необязательный
# Имя хранилища. По этому имени на хранилище можно сослаться из цепочек преобразований при помощи storage_ref.
# На одно хранилище можно сослаться только 1 раз.
- name: main # обязательный
# Имя плагина. Пока поддерживается только плагин fs для бинарного хранилища в файловой системе.
plugin: fs # обязательный
config:
# Директория с данными хранилища.
# В ней создаются поддиректории для партиций.
directory: ./data/storage # обязательный
# Максимальный размер партиции.
# По умолчанию в хранилище есть только одна партиция с именем default.
# Новая партиция создается только если пользователь явно этого потребовал, указав имя партиции в ключе _partition в метаданных сессии.
# В основных сценариях партиция только одна, поэтому этот параметр можно считать лимитом на размер всего хранилища.
max_partition_size: 10mb # обязательный
# Директория для хранения служебной информации хранилища.
# По умолчанию — .state внутри directory
state_directory: {directory} / .state # необязательный, по умолчанию .state внутри directory
# Максимальный размер сегмента (одного файла) внутри партиции.
# По умолчанию — десятая часть размера партиции.
max_segment_size: {max_partition_size} / 10 # необязательный, по умолчанию десятая часть от max_partition_size
# Размер блока для записи.
# Для снижения накладных расходов на системные вызовы перед вызовом write сообщения группируются в блок.
# Вызов write осуществляется, если размер блока превышает указанный.
block_flush_size: 1mb # необязательный, по умолчанию 1mb
# Время жизни блока для записи.
# Вызов write будет осуществляться, если с момента поступления первого сообщения в блок прошло больше указанного времени.
block_flush_period: 10ms # необязательный, по умолчанию 10ms
# Размер буфера для вызова syscall read.
# По умолчанию совпадает с block_flush_size.
read_buffer_size: {block_flush_size} # необязательный, по умолчанию совпадает с block_flush_size
# Время хранения информации о сессии.
# Как только входящая сессия будет закрыта, хранилище перестанет хранить информацию о об этой сессии.
# Соответствие sessionId->last_seq_no и метаданные сессии будут удалены.
# Сессия удаляется только в том случае, если все данные по ней были записаны в выходы.
session_retention_time: 1h # необязательный, по умолчанию 1h
# Время хранения данных партиции.
# Партиция будет удалена через указанное время, если:
# * все ее данные записаны в выходы и по ним получены подтверждения;
# * нет активных сессий, пишущих в эту партицию.
partition_retention_time: 1h # необязательный, по умолчанию: 1h
# Частота выполнения проверки на время хранения session_retention_time и partition_retention_time.
retention_check_period: 1m # необязательный, по умолчанию 1m
# Частота выполнения fsync.
# Чем чаще выполняется fsync, тем меньше данных нужно проверять при восстановлении после сбоя, и тем быстрее произойдет запуск агента.
checkpoint_period: 1s # необязательный, по умолчанию не задан
# Параметр описывает условия, при которых сегменты с данными сохраняются после получения подтверждения от выхода.
# Когда ни одно условие не выполнено, сегменты удаляются в порядке от старых к новым.
# Под старым сегментом здесь понимается противоположный от того, в который запись идет на данный момент.
#
# Условия проверяются:
# * в момент получения подтверждения от выхода;
# * в момент поступления новых данных;
# * регулярно с периодичностью retention_check_period.
#
# На уровне партиции поддерживаются счетчики TrailingMessageAgeMs и TrailingSegmentAgeMs.
# TrailingMessageAgeMs определяется по timestamp первого сообщения самого старого сегмента.
# Этот счетчик примерно (без учета возможной немонотонности timestamp) показывает период времени, за который в партиции имеются данные.
# TrailingSegmentAgeMs определяется аналогично по следующему за ним сегменту.
# Этот счетчик показывает, когда последний сегмент будет удален (при достижении значения свойства by_age).
# Значения обоих счетчиков — в миллисекундах.
# Если в партиции нет ни одного сегмента, оба счетчика равны нулю.
# Если в партиции только один сегмент, значение TrailingSegmentAgeMs равно нулю.
#
# Параметр не задан по умолчанию, т.е. самый старый сегмент удаляется при получении подтверждения от выхода для последнего сообщения этого сегмента.
data_retention: # необязательный
# Сегмент не удаляется, пока в нем есть более свежие сообщения.
# Актуальность сообщений определяется по времени в поле timestamp первого сообщения предпоследнего сегмента.
# В партиции будут храниться данные примерно за указанный период.
by_age: 10d # необязательный, по умолчанию не задан
# Сегмент не удаляется, пока размер данных партиции, исключая собственный размер сегмента, остается меньше указанного.
# То есть размер партиции будет поддерживаться не меньше указанного.
# Если указать by_size: max, то данные будут удаляться только по достижении лимита на размер партиции.
by_size: 500mb # необязательный, по умолчанию не задан
# Уровень логирования, который будет использован при удалении неподтвержденных данных.
# Обычно мониторинг агента смотрит на значение счетчика `Errors` — общее число событий внутри агента, залогированных с уровнем ERROR.
# Если переполнение хранилища — потенциально возможный сценарий (например, в агент записываются данные интенсивнее, чем лимит, указанный в параметре `new_sessions_rate_limit` секции `flow_control`), этим параметром можно отключить зажигание алертов в этом случае.
# Возможные значения: EMERG, ALERT, CRITICAL_INFO, ERROR, WARNING, NOTICE, INFO, DEBUG, RESOURCES.
unacknowledged_eviction_log_priority: ERROR # необязательный, по умолчанию ERROR