diff --git a/README.md b/README.md index 41472c5..f0b6f9a 100644 --- a/README.md +++ b/README.md @@ -254,13 +254,32 @@ только прореживаются. Фоновая петля прогоняет разряжение при старте панели и далее каждые 15 минут. +Чтобы прореживание не съедало крайности, вместе с выжившей точкой сохраняется +**дайджест интервала** (`metrics.agg_json`) — только там, где точки реально +схлопываются (в последних сутках его нет, там всё сырое): + +```json +{"n": 114, "exp": 120, // пришло замеров / ожидалось — n < exp = простой + "cpu": [3.2, 98.4], "ram": [21, 88], "swap": [0, 12], + "load": [0.1, 3.4], "net": [1.2, 90.9], "out": [0.4, 60.6], + "disks": {"/": [41, 98]}} // min/max по метрикам и по каждому маунту +``` + +График рисует по нему полосу min–max, поэтому всплеск CPU или заполнение диска +двухминутной давности видны и через год, а `n` против `exp` показывает часы с +простоем. Само падение при этом пишется ещё и в журнал событий (`server_offline` +/`server_online` с минутами простоя) — журнал хранится год, чтобы факт падения +не зависел от разряжения метрик. API отдаёт дайджест полем `agg` точки +(`GET /api/v1/servers/{id}/metrics`), MCP-тул `server_history` — там же, при +своём прореживании он сливает дайджесты, а не выбрасывает их. + Отдельно от истории живёт таблица `server_state` — «состояние последнего пакета» на сервер: сырые счётчики сети (нужны, чтобы посчитать МБ/с от предыдущего пакета), список docker-контейнеров (нужен для diff'а ивентов), процессы и `extra` (вкладки «Процессы»/Docker на странице сервера). В историю -метрик эти тяжёлые детали не пишутся: строку истории составляют числа и -заполненность дисков (~0.3–0.4 КБ вместо ~5 КБ). Удаление сервера чистит -состояние каскадом. +метрик эти тяжёлые детали не пишутся: строку истории составляют числа, +заполненность дисков и дайджест (~0.3–0.5 КБ вместо ~5 КБ). Удаление сервера +чистит состояние каскадом. Чтобы удалённые точки возвращали место самому файлу, БД работает с `auto_vacuum=INCREMENTAL`; на БД, созданных до этой настройки, панель при @@ -344,7 +363,7 @@ ## Журнал событий и интеграция с Synapse Панель — источник живности экосистемы: всё, что она замечает, пишется в -единый журнал (`events`, хранение 90 дней; читается `GET /api/v1/events`) и — +единый журнал (`events`, хранение — год; читается `GET /api/v1/events`) и — если настроен Synapse — уходит конвертом v1 в [Gnexus Synapse](https://git.gnexus.space/root/gn-synapse) (хаб всех исходящих уведомлений экосистемы, конвенция в handbook