fix(monitoring): панели уточнены по ревью, приёмка снята под нагрузкой

- Зачем:
  - слияния в верхних строках показывали только журналы самого сервера, а
    предел в 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 в окнах на полчаса, час и
    шесть часов.
This commit is contained in:
ddadmin committed 2026-08-21 15:11:21 -04:00
1 parent 7ffb4606f1
commit 42075ff9fb
6 files changed
+122 -138

No files matched your search

+22 -19
View File
@@ -1,14 +1,14 @@
# Дашборд «Запросы»
`infra/grafana/provisioning/dashboards/queries.json` — четыре панели поверх
одной таблицы, `system.query_log`. Вопрос у экрана один: что выполнялось и во
что это обошлось? Состав панелей и довод за каждую —
`infra/grafana/provisioning/dashboards/queries.json` — три панели поверх одной
таблицы, `system.query_log`. Вопрос у экрана один: что выполнялось и во что это
обошлось? Состав панелей и довод за каждую —
[ADR 0002](../../adr/0002-monitoring-scope.md).
Свой вопрос каждая панель называет заголовком прямо на экране. Здесь — только
то, чего в заголовке не скажешь.
Обе ноды пишут журнал каждая свой, поэтому все четыре панели читают его через
Журнал у каждой ноды свой, поэтому все три панели читают его через
`clusterAllReplicas` — то же правило, что и на [«Кластере»](cluster.md).
Окно — час, обновление — полминуты. Час взят потому, что сюда приходят с
@@ -21,15 +21,18 @@
Grafana ходит в ClickHouse обычным пользователем, и её запросы ложатся в
журнал наравне с человеческими. На спокойном стенде верх списка тяжёлых
запросов занимает `grafana`: панель свежести с дашборда «Данные» читает по
полмиллиона строк раз в минуту.
полмиллиона строк за каждое обновление.
Это не помеха, а первое, что дашборд рассказывает: мониторинг тоже стоит
денег, и цену видно там же, где и всё остальное. Скрывать свои запросы
фильтром означало бы прятать эту цену — и заодно сделать панель «Кто
спрашивает» неполной ровно на самого частого посетителя.
Так и надо: мониторинг тоже стоит денег, и цену видно там же, где и всё
остальное. Спрячь мы свои запросы фильтром — цена ушла бы с глаз, а панель «Кто
спрашивает» недосчиталась бы самого частого посетителя.
Различать пользователей дашборд умеет потому, что у Grafana своя учётка со
своей ролью ([ADR 0007](../../adr/0007-clickhouse-access.md)). Ходи она под
Там же, в «Кто спрашивает», стоит `default` с сотнями запросов и одной
прочитанной строкой на каждый: это `SELECT 1` от проверки состояния
контейнера, она ходит к каждой ноде раз в несколько секунд.
Различать посетителей дашборд умеет потому, что у Grafana своя учётка со своей
ролью ([ADR 0007](../../adr/0007-clickhouse-access.md)). Ходи она под
аналитиком, панель «Кто спрашивает» показывала бы одну строку на всех.
## Что отброшено и почему
@@ -39,7 +42,7 @@ Grafana ходит в ClickHouse обычным пользователем, и
ещё неоткуда взять. Панели считают по строкам конца.
Распределённый запрос кладёт в журнал не только себя. Инициатор пишет свою
строку, а каждый шард — свою, про доставшийся ему кусок. Три панели из четырёх
строку, а каждый шард — свою, про доставшийся ему кусок. Две панели из трёх
считают только запросы инициатора: иначе один запрос человека выглядел бы
тремя, а прочитанные строки сложились бы дважды.
@@ -58,14 +61,14 @@ Grafana ходит в ClickHouse обычным пользователем, и
Дашборд проверен на живом стенде 21 августа 2026 года.
- Дашборд поднимается из каталога сам, все четыре панели отвечают через
- Дашборд поднимается из каталога сам, все три панели отвечают через
`/api/ds/query` в окне на час. Пустых нет.
- Тяжёлый запрос виден. `GROUP BY` по `ods.event_dist` от учётки `analyst`
приехал в панель со своими числами: 741 мс, 53,32 МиБ памяти, 701 994
прочитанные строки.
- Ошибки видны, и обе стороны различаются: отказ по правам (`bi` без `SELECT`
на `ods`) и ошибка в тексте запроса (несуществующая колонка) легли в панель
разными строками с полным текстом обеих.
- Панель «Кто спрашивает» разделила семь посетителей: `grafana`, `analyst`,
`etl`, `dict`, `bi`, `default` и фоновую работу сервера. Больше всех
прочитала `grafana` — её же панели, 11,5 млн строк за час.
- Ошибки видны и различаются по природе: отказ по правам (`bi` без `SELECT` на
`ods`) и ошибка в тексте запроса (несуществующая колонка) легли в панель
разными строками, каждая с полным текстом.
- Панель «Кто спрашивает» разделила шесть учёток — `grafana`, `analyst`, `etl`,
`dict`, `bi`, `default` — и фоновую работу сервера. Больше всех прочитала
`grafana`: 11,5 млн строк за час, своими же панелями.