diff --git a/README.md b/README.md index bf3ee4d..41472c5 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,36 @@ хэши, восстановить plaintext из бэкапа нельзя: потерянный ключ — пересоздай сервер. +## Хранение метрик + +История метрик разряжается по возрасту точки (границы — именно по возрасту: +на стыке календарных суток иначе был бы скачок плотности): + +| Возраст точки | Что остаётся | +| --- | --- | +| 0 – 24 ч | всё, как прислал агент | +| 24 ч – 3 сут | 1 точка в минуту | +| 3 – 7 сут | 1 точка в 5 минут | +| 7 сут – 365 сут | 1 точка в час | +| старше года | удаляется | + +В каждом интервале остаётся реальная последняя точка — точки не усредняются, +только прореживаются. Фоновая петля прогоняет разряжение при старте панели и +далее каждые 15 минут. + +Отдельно от истории живёт таблица `server_state` — «состояние последнего +пакета» на сервер: сырые счётчики сети (нужны, чтобы посчитать МБ/с от +предыдущего пакета), список docker-контейнеров (нужен для diff'а ивентов), +процессы и `extra` (вкладки «Процессы»/Docker на странице сервера). В историю +метрик эти тяжёлые детали не пишутся: строку истории составляют числа и +заполненность дисков (~0.3–0.4 КБ вместо ~5 КБ). Удаление сервера чистит +состояние каскадом. + +Чтобы удалённые точки возвращали место самому файлу, БД работает с +`auto_vacuum=INCREMENTAL`; на БД, созданных до этой настройки, панель при +первом старте один раз прогоняет `VACUUM` (в логе — `database compacted once`) +и далее возвращает страницы инкрементально. + ## Конфигурация panel (env) | Переменная | По умолчанию | Описание | @@ -411,7 +441,7 @@ | --- | --- | | `panel_overview` | всё одной сводкой: серверы (статус, CPU/RAM/диск, сеть, последний пакет), сервисы (health), сетевые хранилища | | `server_details` | полное состояние сервера: метрики, диски, процессы, docker, заметка | -| `server_history` | история метрик за N часов, прореженная до N точек (история хранится 7 дней) | +| `server_history` | история метрик за N часов, прореженная до N точек (разряжение по возрасту, горизонт — год) | | `services_overview` | все health-чеки: состояние, latency, код, self-report (версия/окружение/режим) | | `service_incidents` | журнал моментов недоступности сервиса (периоды down+degraded) | | `events_recent` | хвост единого журнала событий с фильтром по severity | @@ -504,4 +534,4 @@ - [x] Этап 2 — hard-monitor агент + install.sh + systemd - [ ] Этап 3 — веб-интерфейс (Vue + ui-kit + chart.js) - [ ] Этап 4 — ивенты + алерты (Telegram, webhook) -- [ ] Этап 5 — downsample истории (7 дней), финальный деплой \ No newline at end of file +- [x] Этап 5 — разряжение истории метрик (градации по возрасту, горизонт — год) \ No newline at end of file