Пол мониторинга: источник ClickHouse в Grafana и экспортёр Kafka #114
Notifications
Due Date
No due date set.
Blocks
#115 Дашборд «Данные»: свежесть, поток, брак, сходимость
ddmitry/clickstream-data-platform
#116 Дашборды «Кластер» и «Запросы»: системные таблицы через clusterAllReplicas
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#114
Reference in new issue
Block a user
Part of #11.
Цель
Поставить то, без чего не существует ни одной панели на SQL: свой образ Grafana
с плагином источника ClickHouse, доступ Grafana к ClickHouse и экспортёр метрик
Kafka. Панелей тикет не рисует — их дают #115 и #116.
Что войдёт
infra/grafana/Dockerfile— свой образ по образцу Airflow и Superset, плагинставится сборкой, версия закрепляется (ADR 0002).
compose.yaml: сервисgrafanaпереезжает сimageнаbuild; туда жемонтируется
infra/grafana/provisioning/dashboardsс файлом провайдера.Каталог заводится здесь пустым — чтобы #115 и #116 не лезли в
compose.yamlследом.
infra/grafana/provisioning/datasources/clickhouse.yml— второй источникрядом с
prometheus.yml. Учётные данные через.env; строка в.env.exampleобязательна:make config-testгоняетcompose configименно с ним.
Доступ Grafana к ClickHouse — работа, а не строчка настройки. Читающих
ролей в
infra/clickhouse/users.d/access.xmlдве, и у обеих из системныхтаблиц только
GRANT SELECT ON system.settings. Дашборды #116 живут наsystem.query_log, частях MergeTree и очереди DDL черезclusterAllReplicas— этоSELECT ON system.*,CLUSTERиREMOTE, а онисейчас есть лишь у пишущей роли
etl_writer.Решение владельца при нарезке: заводится своя роль
monitoring_readerисвой пользователь
grafana— по той же схеме, что уже в файле, у каждогопотребителя своя роль. Права:
SELECTнаstg.*,ods.*,dds.*,dm.*,dic.*плюсSELECT ON system.*,CLUSTERиREMOTE. Догрузитьнедостающее в
analyst_readerотвергнуто: аналитик получил бы системныетаблицы и
REMOTEзаодно, а вsystem.query_logзапросы Grafana стали бынеотличимы от человеческих — ровно там, где дашборд «Запросы» и должен их
различать. Пускать Grafana под
etlотвергнуто сразу: читатель не получаетправа писать.
Решение идёт в ADR 0007 и README тем же PR (там сейчас «пять пользователей и
четыре роли»).
Экспортёр метрик Kafka отдельным сервисом плюс цель в
infra/prometheus/prometheus.yml, версия образа закрепляется.Проверки, которые от этого покраснеют, чинятся здесь же.
check_prometheus_targetsвscripts/stand-smoke.shутверждает, чтоPrometheus видит ровно три цели, и делает это дважды — по
upи поactiveTargets. Четвёртая цель красит смоук. Новый сервис добавляется и вLONG_LIVED_SERVICES(scripts/stand-common.sh), иначе он остаётся вневопроса «не убивало ли его ядро». README, строка про «три цели Prometheus», —
тем же PR.
docs/architecture/monitoring.md— справочник зоны (ADR 0011): из чегомониторинг состоит и что скребёт Prometheus.
Границы
Кому что
monitoring.mdи правку ADR 0007 пишет Opus — их читает человек. Кодексу:Dockerfile, правки
compose.yaml,prometheus.yml,access.xmlи скриптовпроверок, прогоны.
Сначала прочитать
docs/adr/0002-monitoring-scope.md— почему образ свой; раздел «Чтопроверено» — там плагин уже искали запросом;
docs/adr/0007-clickhouse-access.mdиinfra/clickhouse/users.d/access.xml—устройство ролей;
scripts/stand-smoke.sh, функцияcheck_prometheus_targets— что именноутверждается про цели;
infra/superset/Dockerfile— образец своего образа.Проверка
make config-test; на стендеmake smokeиmake check-servicesзелёные.GET /api/plugins?type=datasourceу Grafana возвращает плагин ClickHouse(ADR 0002 снимал этот же запрос — тогда плагина не было).
запрос к
system.*черезclusterAllReplicas.up, отставание чтениявидно метрикой.
make clean && make upпроходит с нуля; время подъёма названо в теле PR.