docs(monitoring): справочник зоны разрезан на набор документов
- Зачем:
- половина справочника была про один дашборд «Данные», а этап приносит ещё
два дашборда и правила оповещения: описание самой зоны утонуло бы.
- Что:
- заведён набор docs/architecture/monitoring/ по ADR 0011: README.md — зона
и каталог дашбордов, data.md — устройство дашборда «Данные».
- обе входящие ссылки перенацелены: README.md репозитория и ADR 0002.
- Проверка:
- make config-test; ссылки из README.md и ADR 0002 открываются.
This commit is contained in:
1 parent
d43a9b348b
commit
91e281fd32
5 files changed
+214
-208
No files matched your search
@@ -0,0 +1,94 @@
|
||||
# Дашборд «Данные»
|
||||
|
||||
`infra/grafana/provisioning/dashboards/data.json` — шесть панелей на один
|
||||
экран. Вопрос у экрана один: с потоком всё в порядке? Состав панелей и довод за
|
||||
каждую — [ADR 0002](../../adr/0002-monitoring-scope.md).
|
||||
|
||||
Порогов и цветовых вердиктов на панелях нет: на дашборд смотрят глазами,
|
||||
красное и зелёное живёт в проверках и дагах DQ.
|
||||
|
||||
| Панель | Откуда берёт | О чём отвечает |
|
||||
|---|---|---|
|
||||
| Свежесть | `ods.event_dist`, `ods.order_dist` | сколько прошло с последней доехавшей строки |
|
||||
| Поток | `stg.hits_raw_dist`, `stg.orders_raw_dist` | сколько строк приезжает в слой сырья |
|
||||
| Брак | те же и `ods.*_errors_dist` | сколько приехавшего не разобралось и какая это доля |
|
||||
| Сходимость | экспортёр Kafka и `stg.hits_raw_dist` | произведённое против приземлившегося |
|
||||
| Отставание | `kafka_consumergroup_lag` | сколько сообщений не прочитано |
|
||||
| Дневной слепок | `stg.orders_raw_dist` | какой слепок доехал, когда и после какой паузы |
|
||||
|
||||
## Почему слои у панелей разные
|
||||
|
||||
Свежесть спрашивают у ODS. Это слой, который читают, и у заказов дорога до него
|
||||
длиннее: сырьё привозит забор, а типизированную строку кладёт разбор. Встань
|
||||
разбор — свежесть ODS это покажет, свежесть сырья нет.
|
||||
|
||||
Читает свежесть физическую `_dist`, а не каноническое `ods.*_v`. Представление
|
||||
прячет за собой `FINAL` и отвечает про текущее состояние сущностей, а вопрос
|
||||
здесь про доставку: местом диагностики доставленных версий физическая таблица
|
||||
названа там же, где заведено представление (`sql/ddl/30-ods-views.sql`).
|
||||
|
||||
Поток и брак считаются по слою сырья. Сырьё записывает каждую доставку и ничего
|
||||
не схлопывает, а `ReplacingMergeTree` в ODS схлопнет и повтор доставки события,
|
||||
и все версии одного заказа. Считай мы поток по ODS — он занизился бы, и тем
|
||||
сильнее, чем дольше живёт стенд.
|
||||
|
||||
Доля брака берётся от приехавшего, а не от суммы «годные плюс брак»: брак не
|
||||
отдельная куча, а часть сырья, которая не прошла разбор.
|
||||
|
||||
Окно у панели брака — окно дашборда, и это не косметика. Сырьё живёт трое
|
||||
суток, а брак — месяц: доля за всё время делила бы месяц брака на трое суток
|
||||
приехавшего и однажды перевалила бы за сотню процентов.
|
||||
|
||||
Панель дневного слепка, наоборот, окна не знает. Её вопрос про состояние, а не
|
||||
про отрезок, и последние десять слепков она показывает всегда.
|
||||
|
||||
Отдельного ряда «против вчерашнего» на панели потока нет, и это решение, а не
|
||||
пропуск. Реальное «вчера» на стенде чаще всего приходится на время, когда
|
||||
стенда ещё не было. А сдвинуть ряд на модельные сутки значит записать в JSON
|
||||
дашборда ускорение мира — ровно ту пометку про тик, которую [ADR
|
||||
0002](../../adr/0002-monitoring-scope.md) в дашборде держать не велит: поменяют
|
||||
ускорение, и панель молча соврёт. Сравнение остаётся глазу: модельные сутки
|
||||
укладываются в минуты реального времени, и соседние дни мира помещаются в одно
|
||||
окно панели сами.
|
||||
|
||||
## Чтецов Kafka панели не читают
|
||||
|
||||
`stg.hits_raw_kafka` и `stg.orders_raw_kafka` — таблицы движка Kafka, а не
|
||||
хранилище: запрос из панели у второго забрал бы слепок себе и сдвинул офсеты
|
||||
(`kafka_commit_on_select`, см. `sql/ddl/10-stg-tables.sql`), а даг приёма
|
||||
приехал бы к пустому топику. Приземлившееся панели считают по `stg.*_raw_dist`,
|
||||
произведённое — по метрикам экспортёра.
|
||||
|
||||
## Как считается сходимость
|
||||
|
||||
Произведённое живёт в Kafka, приземлившееся — в ClickHouse, и со своей стороны
|
||||
ни одна из них не видит другую. Поэтому панель смешанная: ряд «произведено в
|
||||
Kafka» приходит из Prometheus, ряд «приземлилось в ClickHouse» — из ClickHouse.
|
||||
Единицы общие — сообщений за интервал панели. Со стороны Kafka это разность
|
||||
офсетов топика, «сейчас минус интервал назад», с суммой по обеим партициям; со
|
||||
стороны ClickHouse — `count()` строк сырья по тому же интервалу.
|
||||
|
||||
Два соседних способа отвергнуты, и оба по замеру на живом стенде. `increase`
|
||||
растягивает приращение на всё окно и на минутном интервале промахивается на
|
||||
проценты: здоровый стенд выглядел бы расходящимся. Накопленный итог от начала
|
||||
окна точнее обоих приростов, но отсчитывать его надо от края окна — а на
|
||||
свежем стенде окно начинается раньше, чем появился экспортёр, и ряд пропадает
|
||||
целиком.
|
||||
|
||||
Столбцы ClickHouse подписаны правым краем, а не левым. Точка Prometheus — это
|
||||
прирост к моменту времени, а `count()` по интервалу — сумма, которая набирается
|
||||
к его концу; подпиши мы её началом, здоровые ряды разъехались бы ровно на один
|
||||
столбец. Шаг панели при этом не мельче минуты: экспортёр опрашивают раз в
|
||||
пятнадцать секунд, и на более мелком шаге ряд Kafka пошёл бы ступеньками там,
|
||||
где ряд ClickHouse идёт гладко.
|
||||
|
||||
Точка в точку ряды всё равно не совпадут, и ждать этого не надо: опрос
|
||||
экспортёра не попадает на границы столбцов, поэтому на разгоне потока линия
|
||||
Kafka идёт чуть выше. Читается устойчивый разрыв между линиями, а не разница в
|
||||
один столбец.
|
||||
|
||||
Панель смотрит на топик событий. У него приём непрерывный, и разрыв виден
|
||||
сразу. Слепок заказов уезжает пачкой раз в модельные сутки, и вопрос к нему
|
||||
другой — не «сходится ли поток», а «доехала ли выгрузка и вовремя ли». На него
|
||||
отвечает своя панель, и модельный день она берёт из самого сообщения: в сырьё
|
||||
он приезжает полем `snapshot_date`.
|
||||
Reference in new issue
Block a user