2026 Аренда Mac Mini 7×24: матрица ротации логов — уровни lz4 и zstd, IO nice, пороги inode и срезы для долгих батчей
Команды, которые держат на арендованной Mac Mini режим 7×24 с потоковыми JSONL и syslog, упираются не в «ещё один гигабайт», а в связку ротации, сжатия и inode на одном APFS томе. Здесь — компактная матрица: lz4 против zstd, полосы частоты срезов, обёртка nice и действия по водоразделу диска и inode; ниже — готовые фрагменты newsyslog, logrotate и bash.
Связанные материалы: syslog, logrotate и inode, launchd, ThrottleInterval и приоритеты IO, водораздел APFS, очереди 7×24.
Три узких места лог-интенсивных батчей
- Пик CPU на postrotate. Сжатие всего среза в момент переименования бьёт по интерактивным сессиям SSH на малом узле.
- Рост inode быстрее гигабайтов. Мелкие файлы на минуту и временные shard-ы заполняют каталог быстрее, чем растёт счётчик свободных блоков.
- Коллизия с ночным окном. Ротация без календаря накладывается на бэкап или компактификацию, если не развести метки launchd.
Уровни сжатия lz4 и zstd против загрузки CPU
Для одной Mac Mini трактуйте кодек как регулятор конкуренции с вашими воркерами. lz4 почти линейно дёшев по CPU; zstd повышает плотность, но цена растёт нелинейно после уровня девять на длинных корпусах текста.
| Кодек | Типичный уровень | CPU на гигабайт сырья | Когда выбирать |
|---|---|---|---|
| lz4 | по умолчанию | низкий, почти плоский | живой SSH, частые ночные срезы, мало свободного времени CPU |
| zstd | 3–6 | умеренный, хороший компромисс плотности | узкий диск, широкое окно батча, постrotate под nice |
| zstd | 9–15 | высокий на длинных логах | архив перед выгрузкой наружу, только в тихом слоте |
Частота ротации: размер, время, поколения
Сочетайте триггер по размеру и календарь: размер держит хвост читаемым для tail -f, календарь ловит демонов с низким объёмом строк.
| Полоса | Размер среза | Время | Поколения на узле |
|---|---|---|---|
| агрессивная | 50–100 МБ | каждый час | 3–5 активных + холод в архив |
| сбалансированная | 100–200 МБ | каждые 6 ч | 5–8, наружный слив при жёлтом диске |
| щадящая | 200–512 МБ | раз в сутки | 8–14 только если inode стабилен |
Связка с launchd: LowPriorityIO и nice
Поместите тяжёлый postrotate в отдельный агент с LowPriorityIO и обёрткой nice -n 15, чтобы основной батч не делился диском с интерактивом. Согласуйте StartCalendarInterval с окнами из матрицы питания и стабильности.
Диск APFS и inode: жёлтая и красная зона
| Сигнал | Жёлтая зона | Красная зона |
|---|---|---|
| свободное место APFS | ≤ 15% тома — уведомление, ужесточить ротацию | ≤ 10% — пауза новых мелких писателей; ≤ 5% — только критичные логи |
| утилизация inode | ≥ 70% — план архивации и слияния shard | ≥ 85% — стоп генераторам файлов в минуту, внешний перенос срезов |
| IO wait | рост очереди > 20 мс средне — сместить сжатие | устойчиво > 40 мс — отключить zstd высоких уровней до конца окна |
Фрагменты newsyslog, logrotate и bash
newsyslog.d (режим, число архивов, порог в килобайтах, флаг Z — gzip; lz4/zstd — через внешний postrotate):
# /etc/newsyslog.d/app.conf — поля: log mode keep_kb size_kb when flags [pid_path] /var/log/app/jsonl.log 640 7 204800 * Z /var/run/app.pid /var/log/app/syslog.log 640 14 102400 * Z /var/run/syslog.pid
logrotate с zstd и nice:
/var/log/app/*.log {
daily
rotate 14
compress
compresscmd /usr/bin/zstd
compressoptions -3
compressext .zst
postrotate
/usr/bin/nice -n 15 /usr/bin/true
endscript
}
Bash срез с lz4 без смены inode-агрессии:
ts=$(date +%Y%m%d%H%M%S) mv /var/log/app/stream.log /var/log/app/stream.log.$ts : >/var/log/app/stream.log nice -n 15 lz4 -9 /var/log/app/stream.log.$ts /var/log/app/stream.log.$ts.lz4 && rm -f /var/log/app/stream.log.$ts
Пять шагов runbook перед продом
- Зафиксируйте каталог логов на томе с запасом inode и измерьте базовую скорость роста мегабайт и файлов в час.
- Выберите кодек по таблице CPU и включите
niceв postrotate. - Настройте размер и календарь ротации, ограничьте поколения на SSD арендного узла.
- Пропишите жёлтые и красные действия в мониторинге и свяжите их с паузой воркеров.
- Проведите сухой прогон ночью с искусственным срезом и замером задержки SSH.
Три опорных факта для отчётности
- Полоса ротации 100–200 МБ на файл обычно держит задержку хвоста в комфортной зоне для операторов.
- zstd -3 часто даёт заметную экономию диска при умеренной цене CPU на текстовых логах.
- Порог inode 70/85% на малых томах — практичный триггер до деградации метаданных APFS.
FAQ: быстрые ответы
- Нужен ли logrotate на macOS?
- Часто достаточно newsyslog; logrotate уместен, если вы унифицируете конфиги с Linux CI.
- Совместимы ли сжатые срезы с централизованным сбором?
- Да, если агент читает архивы или выгружает сырьё до сжатия; см. Fluent Bit и Loki.
- Как не убить inode мелкими трейсами?
- Батчировать в один файл на воркер, ротация по размеру, внешний cold tier для старых срезов.
Покупка и аренда — коротко
Собственный узел фиксирует CAPEX и обслуживание; аренда Mac Mini переносит риск диска и обновлений в операционный платёж и позволяет быстро сменить объём SSD под лог-шторм. Для сравнения пулов см. корпоративный пул против одного узла.
Узел, тарифы и помощь
Подберите конфигурацию под ночные срезы и inode, затем откройте тарифы, оформите аренду и закрепите runbook в центре помощи; оглавление блога — здесь.
RunMini для лог-интенсивных 7×24
Понятные спецификации Apple Silicon, SSH и политики диска для долгих батчей.
Страница арендыЕщё по теме 7×24: питание и стабильность, дашборд и ночной батч.