feat(monitoring): подготовлена основа мониторинга Kafka и ClickHouse
- Зачем: - подготовлен пол мониторинга для SQL-панелей и метрик отставания Kafka. - Что: - добавлены отдельная роль ClickHouse, источник Grafana и Kafka exporter. - образ Grafana собирается с закреплённым плагином вне тома данных. - Prometheus, смоук и документация обновлены под четыре цели. - Проверка: - make config-test; make lint. - make smoke; make check-clickhouse; make check-services. - make -C generator lint typecheck test.
This commit is contained in:
1 parent
0bb07fd91d
commit
c5dd9c2d34
14 files changed
+326
-47
No files matched your search
@@ -1,10 +1,11 @@
|
||||
# ADR 0007. Доступ к ClickHouse: пользователи файлом, доверие нод секретом
|
||||
|
||||
Дата: 9 августа 2026 года. Статус: принято.
|
||||
Дата: 9 августа 2026 года. Статус: принято; роль `monitoring_reader`
|
||||
и пользователь `grafana` добавлены 21 августа 2026 года (#114).
|
||||
|
||||
## Решение
|
||||
|
||||
У кластера пять пользователей и четыре роли.
|
||||
У кластера шесть пользователей и пять ролей.
|
||||
|
||||
- `default` — с паролем, только служебный: проверки здоровья нод и работа
|
||||
изнутри контейнеров. Приложения им не ходят.
|
||||
@@ -14,6 +15,8 @@
|
||||
Им ходит Superset.
|
||||
- `analyst` с ролью `analyst_reader` — чтение всех слоёв и справочников. Им
|
||||
человек подключается снаружи, из своего клиента.
|
||||
- `grafana` с ролью `monitoring_reader` — чтение слоёв, таблиц базы `dic` и
|
||||
системных таблиц, `CLUSTER` и `REMOTE`. Им ходит Grafana, и больше никто.
|
||||
- `dict` с ролью `dict_reader` — чтение одной базы `dic`, пароля нет. Им
|
||||
словарь читает свою подложку, и больше он никем не используется
|
||||
([ADR 0012](0012-dictionary-home.md)).
|
||||
@@ -58,6 +61,20 @@ DDS под ними, потому что так чаще всего и быва
|
||||
есть положить секрет в git. Ходить этой учёткой некуда: право у неё одно —
|
||||
`SELECT` на `dic`, и хост источника локальный.
|
||||
|
||||
**Своя роль дашбордам.** Панели мониторинга живут не на витринах, а на
|
||||
`system.query_log`, частях MergeTree и очереди распределённых DDL — и читают
|
||||
их через `clusterAllReplicas`, потому что системные таблицы у каждой ноды свои
|
||||
([ADR 0002](0002-monitoring-scope.md)). Для этого нужны `SELECT` на `system.*`
|
||||
и `REMOTE`; контракт роли также включает `CLUSTER` для запросов `ON CLUSTER`.
|
||||
Такого набора не было ни у одного читателя: у обеих читающих ролей из
|
||||
системных таблиц только `system.settings`. Догрузить
|
||||
недостающее в `analyst_reader` отвергнуто: аналитик получил бы системные
|
||||
таблицы и `REMOTE` заодно, а в `system.query_log` запросы Grafana стали бы
|
||||
неотличимы от человеческих — ровно там, где дашборд «Запросы» и должен их
|
||||
различать. Пускать Grafana под `etl` отвергнуто сразу: читатель не получает
|
||||
права писать. Осталась своя роль по здешней общей схеме — у каждого
|
||||
потребителя она своя.
|
||||
|
||||
**Секрет, а не учётные данные по репликам.** У каждой реплики в описании
|
||||
кластера своя учётка — вписанная явно или подразумеваемая, и тогда это
|
||||
беспарольный `default`. Подключение к соседней ноде идёт от неё, а не от
|
||||
@@ -141,6 +158,25 @@ DDS под ними, потому что так чаще всего и быва
|
||||
настройки ClickHouse.
|
||||
- Весь DDL репозитория идёт через `IF NOT EXISTS` (файлы `sql/ddl/`).
|
||||
|
||||
Права роли `monitoring_reader` сверены 21 августа 2026 года по документации
|
||||
ClickHouse через MCP Context7 (#114).
|
||||
|
||||
- Системные таблицы выдаются обычным `SELECT`: в документации это
|
||||
`GRANT SELECT ON system.query_log`, значит `SELECT ON system.*` и есть «все
|
||||
системные таблицы». Отдельного права на них нет.
|
||||
- `GRANT CLUSTER ON *.*` — документированная форма права на запросы
|
||||
`ON CLUSTER`; текущий запрос `clusterAllReplicas` его не использует.
|
||||
- `clusterAllReplicas` документация держит в одном ряду с `remote`,
|
||||
`remoteSecure` и `cluster`: это табличная функция, которая берёт имя
|
||||
кластера из `remote_servers` и идёт на каждую его реплику. Отсюда `REMOTE` —
|
||||
без права на удалённое обращение запрос дальше своей ноды не пойдёт, а
|
||||
панели ADR 0002 читают `system.*` именно так.
|
||||
|
||||
Набор проверен на живом стенде 21 августа 2026 года (#114): пользователь
|
||||
`grafana` из Grafana выполнил
|
||||
`SELECT count() AS replicas FROM clusterAllReplicas('clickstream_cluster', system.one)`
|
||||
и получил 2 — прав хватает, чтобы прочесть системную таблицу с обеих нод.
|
||||
|
||||
Проверено на живом стенде 13 августа 2026 года, ClickHouse 26.3.17.56.
|
||||
|
||||
- Секрет кластера принимается внутри `remote_servers` в виде
|
||||
|
||||
Reference in new issue
Block a user