Мониторинг: дашборды «Кластер» и «Запросы» #123

Merged
ddmitry merged 3 commits from feat/116-cluster-queries-dashboards into main 2026-08-21 22:34:24 +03:00
Owner

Closes #116

Два оставшихся дашборда ADR 0002. «Кластер» — что с машиной, «Запросы» — что
выполнялось и во что обошлось.

Что в ветке

  • cluster.json, семь панелей: процессор и память обеих нод, диски, части по
    таблицам, слияния по базам, keeper, очередь распределённых DDL.
  • queries.json, три панели поверх system.query_log: тяжёлые запросы,
    аппетит по посетителям, ошибки.
  • Устройство и доводы — docs/architecture/monitoring/cluster.md и
    queries.md; каталог набора в README.md обновлён, правило «порогов нет»
    поднято туда из data.md как общее для всех дашбордов.
  • Отступления от ADR 0002 записаны в сам ADR.

Приёмка

Снята на живом стенде 21 августа 2026 года.

  • make config-test, make smoke 21/21, make check-clickhouse 10/10.
  • Все десять панелей отвечают через /api/ds/query в окнах на полчаса, час и
    шесть часов; пустых нет.
  • Под нагрузкой (make generate-batch, 50 626 событий) процессор поднялся с
    0,04–0,18 ядра до 0,54 и 0,64, запись — с 400 КиБ/с до 2,1 и 4,5 МиБ/с, и
    обе величины вернулись к прежним за десять секунд.
  • Тяжёлый GROUP BY от учётки analyst приехал в «Запросы» со своими
    числами: 741 мс, 53,32 МиБ, 701 994 прочитанные строки.
  • Строка шарда в панели ошибок воспроизведена принудительным пределом памяти:
    clickhouse-01 записал свой отказ, clickhouse-02 — свой.

Один пункт приёмки закрыт не буквально

«Панель по системной таблице без clusterAllReplicas не остаётся ни одной» —
одна осталась. Очередь распределённых DDL лежит не у ноды, а в keeper: обе
ноды читают из него одну и ту же очередь целиком, и запрос с обёрткой вернул
каждую запись дважды. Довод и замер записаны в ADR 0002 и в cluster.md.

Панель слияний — второй, мягкий случай: обёртка на ней есть, но ноды сложены в
один ряд намеренно, шарды сливают симметрично.

Как ревьюировали

Два круга по две линии, каждая свежей сессией; после правок первого круга
прогон повторён, плюс прошлые сессии опрошены на закрытие своих находок.
Главную находку второго круга — текст спорил с собственной приёмкой про окно
дашборда — нашли независимо трое.

Closes #116 Два оставшихся дашборда ADR 0002. «Кластер» — что с машиной, «Запросы» — что выполнялось и во что обошлось. ## Что в ветке - `cluster.json`, семь панелей: процессор и память обеих нод, диски, части по таблицам, слияния по базам, keeper, очередь распределённых DDL. - `queries.json`, три панели поверх `system.query_log`: тяжёлые запросы, аппетит по посетителям, ошибки. - Устройство и доводы — `docs/architecture/monitoring/cluster.md` и `queries.md`; каталог набора в `README.md` обновлён, правило «порогов нет» поднято туда из `data.md` как общее для всех дашбордов. - Отступления от ADR 0002 записаны в сам ADR. ## Приёмка Снята на живом стенде 21 августа 2026 года. - `make config-test`, `make smoke` 21/21, `make check-clickhouse` 10/10. - Все десять панелей отвечают через `/api/ds/query` в окнах на полчаса, час и шесть часов; пустых нет. - Под нагрузкой (`make generate-batch`, 50 626 событий) процессор поднялся с 0,04–0,18 ядра до 0,54 и 0,64, запись — с 400 КиБ/с до 2,1 и 4,5 МиБ/с, и обе величины вернулись к прежним за десять секунд. - Тяжёлый `GROUP BY` от учётки `analyst` приехал в «Запросы» со своими числами: 741 мс, 53,32 МиБ, 701 994 прочитанные строки. - Строка шарда в панели ошибок воспроизведена принудительным пределом памяти: `clickhouse-01` записал свой отказ, `clickhouse-02` — свой. ## Один пункт приёмки закрыт не буквально «Панель по системной таблице без `clusterAllReplicas` не остаётся ни одной» — одна осталась. Очередь распределённых DDL лежит не у ноды, а в keeper: обе ноды читают из него одну и ту же очередь целиком, и запрос с обёрткой вернул каждую запись дважды. Довод и замер записаны в ADR 0002 и в `cluster.md`. Панель слияний — второй, мягкий случай: обёртка на ней есть, но ноды сложены в один ряд намеренно, шарды сливают симметрично. ## Как ревьюировали Два круга по две линии, каждая свежей сессией; после правок первого круга прогон повторён, плюс прошлые сессии опрошены на закрытие своих находок. Главную находку второго круга — текст спорил с собственной приёмкой про окно дашборда — нашли независимо трое.
ddmitry added 3 commits 2026-08-21 22:33:43 +03:00
- Зачем:
  - ADR 0002 обещает три дашборда; собран был один, а симптом инфраструктуры
    как следствие решения человека показать было негде.
- Что:
  - cluster.json — семь панелей: процессор, память с пределом коробки, диски,
    части по таблицам, слияния, keeper, очередь распределённых DDL.
  - queries.json — четыре панели поверх system.query_log: тяжёлые запросы,
    поток запросов, аппетит по пользователям, ошибки.
  - системные таблицы читаются через clusterAllReplicas; очередь DDL — без
    обёртки, она живёт в keeper и у обеих нод одна.
  - устройство обоих дашбордов записано в docs/architecture/monitoring/,
    правило про пороги поднято из data.md в README набора.
- Проверка:
  - make config-test; make smoke 21/21; make check-clickhouse 10/10.
  - все одиннадцать панелей отвечают через /api/ds/query.
- Зачем:
  - слияния в верхних строках показывали только журналы самого сервера, а
    предел в 15 строк рвал пару нод пополам: панели отвечали не на свой вопрос.
- Что:
  - «Слияния» стали столбиками по слоям: журналы сервера отделены, ряды ods и
    stg видны своими.
  - «Части» показывают все таблицы слоёв целиком, без предела и без обрезанных
    пар.
  - у «Запросов» убран «Поток запросов» — его пол составляли пробники
    состояния; у «Кто спрашивает» убрана лишняя колонка.
  - ряд «коробка» назван «отведено» — как в заголовке панели.
  - доводы дописаны в cluster.md и queries.md, отступления от ADR 0002
    записаны в сам ADR.
- Проверка:
  - make config-test; make smoke 21/21; make check-clickhouse 10/10.
  - все десять панелей отвечают через /api/ds/query в окнах на полчаса, час и
    шесть часов.
- Зачем:
  - второй круг ревью нашёл, что текст спорит с собственной приёмкой: окно
    держалось доводом «слияния за минуту-две», а замер даёт двадцать секунд;
    довод панели ошибок опирался на отказ по памяти, которого ADR 0004 на этом
    стенде не обещает.
- Что:
  - «Части» сортируются по таблице: сортировка по числу частей разводила две
    ноды одной таблицы, как только между ними вставала чужая.
  - у «Слияний» столбик шириной в минуту, иначе редкие события выходили
    волосяной линией; из заголовка убран «слой» — фильтр отсекает журналы
    сервера, а не выбирает слои.
  - в cluster.md исправлены довод за окно, ложное «времени в system.parts нет»,
    счёт панелей без нод (их две, не одна) и разрешение, в котором снят замер
    процессора.
  - панель ошибок и её запись в ADR 0002 переписаны под проверенное: отказ на
    шарде воспроизведён принудительным пределом памяти.
  - из queries.md убран абзац про SELECT 1 — он объяснял пол удалённой панели.
- Проверка:
  - make config-test; make smoke 21/21; make check-clickhouse 10/10.
  - все десять панелей отвечают через /api/ds/query в окнах на полчаса, час и
    шесть часов; шаг столбика слияний проверен отдельным запросом.
ddmitry merged commit 0340b060f2 into main 2026-08-21 22:34:24 +03:00
ddmitry deleted branch feat/116-cluster-queries-dashboards 2026-08-21 22:34:25 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#123