- Зачем:
- 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.
5.7 KiB
Дашборд «Запросы»
infra/grafana/provisioning/dashboards/queries.json — четыре панели поверх
одной таблицы, system.query_log. Вопрос у экрана один: что выполнялось и во
что это обошлось? Состав панелей и довод за каждую —
ADR 0002.
Свой вопрос каждая панель называет заголовком прямо на экране. Здесь — только то, чего в заголовке не скажешь.
Обе ноды пишут журнал каждая свой, поэтому все четыре панели читают его через
clusterAllReplicas — то же правило, что и на «Кластере».
Окно — час, обновление — полминуты. Час взят потому, что сюда приходят с вопросом о прошлом: «почему у меня всё стояло десять минут назад». Полминуты — чтобы только что запущенный тяжёлый запрос не пришлось ждать: в журнал он попадает через несколько секунд после конца.
Первым в списке видно сам мониторинг
Grafana ходит в ClickHouse обычным пользователем, и её запросы ложатся в
журнал наравне с человеческими. На спокойном стенде верх списка тяжёлых
запросов занимает grafana: панель свежести с дашборда «Данные» читает по
полмиллиона строк раз в минуту.
Это не помеха, а первое, что дашборд рассказывает: мониторинг тоже стоит денег, и цену видно там же, где и всё остальное. Скрывать свои запросы фильтром означало бы прятать эту цену — и заодно сделать панель «Кто спрашивает» неполной ровно на самого частого посетителя.
Различать пользователей дашборд умеет потому, что у Grafana своя учётка со своей ролью (ADR 0007). Ходи она под аналитиком, панель «Кто спрашивает» показывала бы одну строку на всех.
Что отброшено и почему
Каждый запрос попадает в журнал дважды: строкой начала и строкой конца. В строке начала нет ни длительности, ни памяти, ни прочитанных строк — там их ещё неоткуда взять. Панели считают по строкам конца.
Распределённый запрос кладёт в журнал не только себя. Инициатор пишет свою строку, а каждый шард — свою, про доставшийся ему кусок. Три панели из четырёх считают только запросы инициатора: иначе один запрос человека выглядел бы тремя, а прочитанные строки сложились бы дважды.
Панель ошибок, наоборот, куски шардов показывает. Отказ по памяти случается там, где считали, — на шарде; инициатор в своей строке передаст только текст ошибки, а нода, на которой всё случилось, останется неназванной.
Пустой пользователь
Часть строк журнала приходит без имени пользователя: так записана собственная работа сервера — чтение топиков движком Kafka, вставки материализованных представлений, обслуживание. Панели подписывают такие строки «фоновая работа сервера»: пустая клетка в таблице читается как поломка, а это не она.
Что проверено
Дашборд проверен на живом стенде 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 млн строк за час.