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