Три узких места
1) Все узлы пишут в один поток логов — раньше свободного места заканчиваются inode из-за мелких файлов и частой ротации. 2) Ошибки Webhook оседают локально на хостах, дежурный не видит корреляции. 3) Смена токенов или plist не совпадает по времени с границей среза — digest уходит дважды или теряется на границе окна.
Для разделения тенантов и составного doctor опирайтесь на статью про split тенантов, doctor и webhook; здесь фокус только на логах, квотах и сводке по Webhook.
Матрица: срезы логов и уведомления
| Подход | Плюс | Квоты и риски |
|---|---|---|
| Локальный JSONL на узле + ежедневная ротация | Меньше блокировок на общем томе | Лимит поколений и суммарного размера — в пересчёте на весь кластер; inode контролировать по числу файлов. |
| Раздельные потоки stdout / audit | Быстрее изоляция причин сбоя | Разные периоды ротации по потокам; ограничить одновременные open и агрессию fsync. |
| Digest Webhook (окно 5 мин) | Одна сводка в общий канал | Фиксировать ключ идемпотентности и порядок удаления поколений; при 429 увеличить окно. |
Цифры в runbook фиксируйте для staging и копируйте в прод только после сухого прогона: так вы не смешиваете «политику ретенции» с политикой балансировщика.
Минимальные шаги (HowTo)
- Соглашение по путям: состояние и логи под
$HOSTNAME/$TENANT; сырой JSONL на общий NFS без схемы блокировок не писать. - Merge: порядок слоёв шаблонов и lock-файл; долю канарейки откатывать теми же закладками, что в существующем runbook.
- Многопоточные логи: прикладной и аудит — в разные файлы; в runbook явно: «не более семи поколений» и верхняя граница суммарного размера на кластер.
- Digest: коды HTTP Webhook агрегировать в окне (например, 5 минут), слать в общий чат/тикет; один порог «красной» сводки на окружение.
- Составной readiness: на каждом узле
/healthzи вывод doctor сводить в один сигнал; трафик на LB увеличивать ступенями. - Откат: сначала доли LB, затем вернуть логи к однопоточному срезу, потом launchd/plist, в конце — поколение токенов подписи.
Чек-лист разбора: ротация, диск, inode
- Ротация: digest дублируется — проверьте границу окна и порядок закрытия/удаления старых файлов: сначала завершите запись в старое поколение, затем откройте новое.
- Диск: при зелёном
df -hсмотритеdf -i, счётчики мелких файлов и частоту ротации; выше ~80% inode — сократить число срезов или вынести архив. - Webhook: всплеск 5xx — временно один поток логов webhook, сверка таймаутов шлюза и поколения ключа подписи; сравнить с таблицей лимитов upstream.
Одинаковые Mac mini M4 — запас под ротацию и inode
На публичной странице тарифов и цен оцените диск и полосу; на странице покупки добавьте узлы, чтобы заранее заложить место под поколения логов и рост числа файлов без «тихого» исчерпания inode.