Я знаю, это звучит странно, но мне нужна более медленная или кэшированная файловая система.
У меня есть много брандмауэров, которые отправляют свои данные в системный журнал на пару виртуальных машин Linux, которые записывают эти файлы на свои «локальные» (на самом деле подключенные к FC SAN) диски в формате ext3, а также пересылают сообщения на наши серверы Splunk.
Проблема в том, что сервер syslog записывает эти сообщения syslog в виде сотен, а иногда и тысяч крошечных записей по ~4К в секунду обратно в нашу FC SAN, которая сейчас может справиться с такой нагрузкой, но наш трафик FW вырастет как минимум на 5000% (реально) в ближайшие месяцы, и это будет проблемой для SAN. Я хочу устранить основную причину, прежде чем она станет проблемой.
Поэтому мне нужна помощь в поиске способа кэширования или задержки этих записей на «физических» дисках, чтобы виртуальные машины выполняли более крупные, но менее частые записи. Избежать этих записей невозможно, но и нет необходимости делать так много мелких записей.
Я рассмотрел различные параметры ext3, устанавливал noatime и nodiratime, но это не сильно помогло в решении проблемы. Очевидно, я изучаю другие файловые системы, но подумал, что стоит выбросить это на случай, если у других возникнет та же проблема в будущем.
О, и я не могу просто переслать эти сообщения в Splunk, наша команда по брандмауэру настаивает на том, чтобы они были в исходном формате в целях диагностики.
решение1
Возможно, commit
вам поможет опция монтирования ext3? Например, commit=60
она будет сбрасывать все данные и метаданные только раз в минуту.
Обязательное предупреждение: это может привести к потере данных объемом до одной минуты (если вы передадите значение commit=60).
решение2
Файловая система: отключите барьеры записи, если ваши устройства их используют, и отключите обновления atime для всех устройств.
Но есть вероятность, что вы также можете настроить свой системный журнал ценой большей потери данных в случае сбоя (питания и т. д.).
Примеры директив из syslog-ng
(которые могут не совпадать с тем, что вы используете):
flush_lines()
Указывает, сколько строк сбрасывается в пункт назначения за раз. Syslog-ng ждет, пока накопится это количество строк, и отправляет их одним пакетом.flush_timeout()
Указывает время, в течение которого syslog-ng ждет накопления строк в своем выходном буфере. Для получения дополнительной информации см. опцию flush_lines.
Местом назначения в данном случае является файл на диске.