docs(ui): уточнены подсказки и сообщения учебного стенда
Зачем: до запуска менти должен понимать действие параметров, а после ошибки проверки — где искать причину. Что: уточнены тексты Airflow, самопроверки, DQ и run-dag.sh, подписи Superset и Grafana. Логика, запросы, метрики и идентификаторы сохранены. Проверка: make lint, git diff --check, bash -n; разбор YAML/JSON, сравнение структуры Python и конфигурации, искусственные примеры ошибок. Airflow и Grafana проверены через локальные API, Superset — по YAML. Визуальная проверка интерфейсов не выполнена: браузер недоступен.
This commit is contained in:
1 parent
431fed72ad
commit
d15f4fe4d8
12 files changed
+145
-71
No files matched your search
@@ -11,7 +11,7 @@
|
||||
"panels": [
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Процессор: сколько ядер занимает нода",
|
||||
"title": "Процессор: сколько ядер использует узел",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -51,7 +51,7 @@
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Память: сколько нода занимает и сколько ей отведено",
|
||||
"title": "Память: использование и лимит узла",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -114,7 +114,7 @@
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Диски: сколько нода читает и пишет",
|
||||
"title": "Диски: скорость чтения и записи узла",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -154,7 +154,7 @@
|
||||
},
|
||||
{
|
||||
"type": "table",
|
||||
"title": "Части: сколько их у таблицы и по сколько строк в каждой",
|
||||
"title": "Части таблиц: количество и среднее число строк в части",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -199,7 +199,7 @@
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Слияния: сколько частей они съедают",
|
||||
"title": "Слияния: число объединенных частей",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -280,11 +280,12 @@
|
||||
"min": 0
|
||||
},
|
||||
"overrides": []
|
||||
}
|
||||
},
|
||||
"description": "Узлы дерева Keeper (znode) — записи со служебными данными координации ClickHouse."
|
||||
},
|
||||
{
|
||||
"type": "table",
|
||||
"title": "Распределённый DDL: что прошло по кластеру и чем кончилось",
|
||||
"title": "Распределенный DDL: результаты команд на узлах кластера",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"panels": [
|
||||
{
|
||||
"type": "stat",
|
||||
"title": "Свежесть: сколько прошло с последней доехавшей строки",
|
||||
"title": "Свежесть: время с последней загрузки в ODS",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -48,7 +48,7 @@
|
||||
},
|
||||
{
|
||||
"type": "table",
|
||||
"title": "Брак: сколько приехавшего не разобралось",
|
||||
"title": "Брак: доля строк с ошибками разбора",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -72,11 +72,28 @@
|
||||
"format": 1,
|
||||
"rawSql": "SELECT\n source AS \"Источник\",\n countIf(NOT is_error) AS \"Приехало\",\n countIf(is_error) AS \"Из них в брак\",\n 100 * countIf(is_error) / countIf(NOT is_error) AS \"Доля брака, %\"\nFROM\n(\n SELECT 'события' AS source, 0 AS is_error, _load_ts FROM stg.hits_raw_dist\n UNION ALL\n SELECT 'события', 1, _load_ts FROM ods.event_errors_dist\n UNION ALL\n SELECT 'заказы', 0, _load_ts FROM stg.orders_raw_dist\n UNION ALL\n SELECT 'заказы', 1, _load_ts FROM ods.order_errors_dist\n)\nWHERE $__timeFilter(_load_ts)\nGROUP BY source\nORDER BY source"
|
||||
}
|
||||
]
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Приехало"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "displayName",
|
||||
"value": "Загружено в STG"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "table",
|
||||
"title": "Дневной слепок заказов: какой доехал, когда и после какой паузы",
|
||||
"title": "Дневной слепок заказов: дата и время загрузки",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -100,11 +117,28 @@
|
||||
"format": 1,
|
||||
"rawSql": "SELECT\n \"Слепок\",\n \"Доехал\",\n dateDiff('second', prev, \"Доехал\") AS \"После прошлого, с\",\n \"Строк\"\nFROM\n(\n SELECT\n JSONExtractString(raw, 'snapshot_date') AS \"Слепок\",\n max(_load_ts) AS \"Доехал\",\n count() AS \"Строк\",\n -- Обнуляемый тип нужен, чтобы у самого раннего слепка пауза осталась\n -- пустой, а не превратилась в разницу с началом эпохи.\n lagInFrame(toNullable(max(_load_ts))) OVER (ORDER BY \"Слепок\") AS prev\n FROM stg.orders_raw_dist\n GROUP BY \"Слепок\"\n)\nORDER BY \"Слепок\" DESC\nLIMIT 10"
|
||||
}
|
||||
]
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Доехал"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "displayName",
|
||||
"value": "Время загрузки"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Поток: сколько строк приезжает в сырой слой",
|
||||
"title": "Поток: число сообщений, загруженных в STG",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -136,7 +170,7 @@
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Сходимость: произведено в Kafka против приземлившегося в ClickHouse",
|
||||
"title": "Сходимость: число событий в Kafka и ClickHouse",
|
||||
"datasource": {
|
||||
"type": "datasource",
|
||||
"uid": "-- Mixed --"
|
||||
@@ -161,7 +195,7 @@
|
||||
},
|
||||
"editorMode": "code",
|
||||
"expr": "sum(kafka_topic_partition_current_offset{topic=\"hits\"}) - sum(kafka_topic_partition_current_offset{topic=\"hits\"} offset $__interval)",
|
||||
"legendFormat": "произведено в Kafka",
|
||||
"legendFormat": "поступило в Kafka",
|
||||
"range": true
|
||||
},
|
||||
{
|
||||
@@ -187,7 +221,7 @@
|
||||
"properties": [
|
||||
{
|
||||
"id": "displayName",
|
||||
"value": "приземлилось в ClickHouse"
|
||||
"value": "загружено в ClickHouse"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -197,7 +231,7 @@
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Отставание чтения из Kafka: непрочитанных сообщений",
|
||||
"title": "Отставание чтения из Kafka: число непрочитанных сообщений",
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "prometheus"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"panels": [
|
||||
{
|
||||
"type": "table",
|
||||
"title": "Тяжёлые запросы: что прочитало больше всех",
|
||||
"title": "Запросы с наибольшим числом прочитанных строк",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -56,7 +56,7 @@
|
||||
},
|
||||
{
|
||||
"type": "table",
|
||||
"title": "Кто спрашивает: сколько запросов и какой у них аппетит",
|
||||
"title": "Пользователи: число запросов и потребление ресурсов",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -93,6 +93,10 @@
|
||||
{
|
||||
"id": "unit",
|
||||
"value": "bytes"
|
||||
},
|
||||
{
|
||||
"id": "displayName",
|
||||
"value": "Максимальная память запроса"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -101,7 +105,7 @@
|
||||
},
|
||||
{
|
||||
"type": "table",
|
||||
"title": "Ошибки: на чём запросы споткнулись",
|
||||
"title": "Ошибки выполнения запросов",
|
||||
"datasource": {
|
||||
"type": "grafana-clickhouse-datasource",
|
||||
"uid": "clickhouse"
|
||||
@@ -128,7 +132,20 @@
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {},
|
||||
"overrides": []
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Чем кончилось"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "displayName",
|
||||
"value": "Ошибка"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
slice_name: Сверка purchase и заказов
|
||||
slice_name: Сверка событий покупки и заказов
|
||||
description: null
|
||||
certified_by: null
|
||||
certification_details: null
|
||||
|
||||
@@ -153,7 +153,7 @@ position:
|
||||
chartId: 2
|
||||
height: 44
|
||||
width: 12
|
||||
sliceName: Сверка purchase и заказов
|
||||
sliceName: Сверка событий покупки и заказов
|
||||
uuid: 19600000-0000-4000-8000-000000000102
|
||||
ROW-traffic:
|
||||
id: ROW-traffic
|
||||
|
||||
@@ -37,7 +37,7 @@ metrics:
|
||||
extra: null
|
||||
warning_text: null
|
||||
- metric_name: known_share
|
||||
verbose_name: Доля известных
|
||||
verbose_name: Доля известных пользователей
|
||||
metric_type: null
|
||||
expression: SUM(known_users) / nullIf(SUM(visitors), 0)
|
||||
description: null
|
||||
|
||||
@@ -55,7 +55,7 @@ columns:
|
||||
datetime_format: null
|
||||
extra: null
|
||||
- column_name: declared_revenue
|
||||
verbose_name: Выручка purchase
|
||||
verbose_name: Заявленная сумма покупки из события
|
||||
is_dttm: false
|
||||
is_active: true
|
||||
type: NULLABLE(DECIMAL(18, 2))
|
||||
@@ -120,7 +120,7 @@ columns:
|
||||
datetime_format: null
|
||||
extra: null
|
||||
- column_name: order_id
|
||||
verbose_name: Заказ
|
||||
verbose_name: Номер заказа
|
||||
is_dttm: false
|
||||
is_active: true
|
||||
type: STRING
|
||||
|
||||
@@ -125,7 +125,7 @@ columns:
|
||||
datetime_format: null
|
||||
extra: null
|
||||
- column_name: units
|
||||
verbose_name: Товары
|
||||
verbose_name: Продано единиц товара
|
||||
is_dttm: false
|
||||
is_active: true
|
||||
type: UINT64
|
||||
|
||||
Reference in new issue
Block a user