Skip to content

v4.1.1 — уступка масок logrotate видна (#40), na-report по всем загрузкам (#41)

Choose a tag to compare

@jestivald jestivald released this 02 Sep 11:45
· 27 commits to main since this release
6473b53

v4.1.1 — 2026-09-02

Два хвоста того же аудита, заведённые уже после сборки v4.1
(#40,
#41). Оба — про молчаливую
подмену смысла: «ротация настроена» при отсутствующей стансе и «за 24 часа» при отчёте
с момента загрузки.

🟠 Уступив маски чужой стансе, тулкит рапортовал зелёным (#40)

Само поведение «отдать путь чужой стансе» правильное — спор решает logrotate, и в v4.0.1 он
решается честно. Дефект был в том, что уступка не доводилась до оператора там, где он смотрит:
optimize печатал «проверь, что там задан maxsize» и заканчивался ok, na-logrotate.timer
включался, na-diagnose светил ✔ ротация логов: часовой таймер активен — при отсутствующей
na-node-logs. На трёх нодах флота ротацию при этом держала ручная станса weekly без
maxsize, то есть никакого капа не было, а диагностика была полностью зелёной.

Теперь optimize сам находит стансу-владельца (по реальным путям, которые logrotate назвал
дубликатами) и сам смотрит в неё: есть maxsize/size — info «кап работает», нет —
warn с именем файла и периодом («weekly БЕЗ maxsize/size — размер ничем не ограничен») и
советом. Полная уступка всех масок — warn, а не info, и повторяется в итоге прогона. Факт
уступки пишется в состояние (logrotate.ceded: маска, владелец, кап; logrotate.owned: что
держит наша станса) — na-diagnose разделяет «таймер активен» и «станса существует»: ▲ при
уступке (с владельцами и пометкой у кого нет капа) и ▲ при активном таймере без стансы; в
--json — logrotate_owned_masks, logrotate_ceded_masks, logrotate_ceded_nocap.
ENABLE_LOGROTATE=0 снимает состояние, чтобы диагностика не пересказывала прошлые прогоны.

🟠 na-report после ребута занижал события в разы (#41)

journalctl -k подразумевает -b — только текущая загрузка, а окно задаётся через --since.
После перезагрузки отчёт «за 24 часа» молча становился отчётом «с момента загрузки»: на ноде
флота 2 298 событий против 72 485 реальных (×31), причём ровно в те сутки, когда в отчёт
смотрят чаще всего. Оба вызова (collect_events и --port) теперь с -b all — граница по
времени остаётся, границы загрузок перестают резать окно. В шапке — фактическая глубина журнала
(самая старая запись): если она меньше окна, отчёт предупреждает, что «событий мало» может значить
«журнал вытеснен»; в --json — journal_span_h.

🧪 Тесты

tests/logrotate-unit.sh: владелец уступленной маски назван и проверен на maxsize (кейсы
«без капа» / «с капом»), состояние ceded/owned пишется и снимается, полная уступка — warn.
tests/diagnose-unit.sh: ▲ и поля --json при уступке. CI: статическая проверка, что оба
journalctl -k в na-report — с -b all, и journal_span_h в его --json.