Skip to content
PПромтбук
RUEN
07Пайплайны

Observability data-пайплайнов: latency, throughput, lineage, SLO

Что мерить на каждой стадии, lineage через OpenLineage/Marquez, SLO для свежести, как алертить без шума.

Действуй как platform-инженер data-команды. Спроектируй observability. Стек: {{stack}}. Consumers: {{consumers}}.

Зачем formal observability

Без неё цикл инцидента: "BI показывает ноль за вчера" → инженер открывает 5 dashboard'ов → лезет в логи → находит, что step X упал. 4 часа MTTR. С observability — алерт прилетел в момент падения, lineage показал blast radius. 15 минут MTTR.

Четыре измерения

1. Latency per stage

Сколько занимает каждая стадия. Раздели:

  • Extract latency: время выгрузки из источника
  • Load latency: запись в raw
  • Transform latency: staging → intermediate → mart
  • Total end-to-end: source event → доступно в mart

Метрики: p50, p95, p99 за окно. Bottleneck = стадия с самым высоким p95.

2. Throughput

Сколько данных прошло:

  • Rows processed per stage per run
  • Bytes processed
  • Cost (compute $ per run для cloud warehouse)

Резкое падение throughput (но pipeline зелёный) = upstream сломался, источник вернул 0 rows.

3. Freshness lag

Главная метрика для consumer'ов. NOW() - max(loaded_at) для каждого критичного mart'а. Сравнивай с SLO.

SELECT
  table_name,
  EXTRACT(EPOCH FROM (NOW() - MAX(loaded_at)))/60 AS lag_minutes,
  CASE WHEN ... THEN 'BREACH' ELSE 'OK' END AS slo_status
FROM marts.freshness_view;

4. Failure rate

  • Failures per pipeline per day
  • Retries (много retries без падения = signal, что что-то нестабильно)
  • MTTR (mean time to recovery)
  • MTBF (mean time between failures)

Тренд важнее абсолютных значений. Рост retries за неделю = долг копится, скоро упадёт.

Lineage — кто откуда зависит

Без lineage невозможно понять blast radius. Сломался stg_orders → какие mart'ы протухли → какие dashboard'ы / ML-модели / алерты?

Инструменты:

  • OpenLineage — открытый стандарт для emit'а событий: jobs, runs, datasets, версии схем
  • Marquez — референсный backend для OpenLineage, граф lineage + UI
  • Datahub / Atlan / OpenMetadata — full platform: lineage + catalog + governance
  • dbt docs — column-level lineage внутри dbt-проекта, ограниченный source/target

Что emit'ить:

  • Job started/completed (input datasets, output dataset, run_id, duration)
  • Schema снапшоты на каждом запуске (детектировать drift)
  • Custom facets: row count, freshness, тесты pass/fail

Lineage без column-level — половинчатый. Хочешь знать "колонка X в mart'е сломалась — где источник?". OpenLineage поддерживает column-level через facets.

SLO для свежести

Не "пытаемся обновлять каждый час", а формальный SLO:

| Mart | SLO | Окно | Error budget | | fct_orders | 99% < 60 min lag | 30d | 7.2h breach allowed | | fct_revenue_daily | 99% < 24h lag | 30d | 7.2h breach allowed | | dim_customer | 95% < 4h lag | 30d | 36h breach allowed |

Error budget показывает: "если уже сожгли 80% за неделю — стоп фичи, чиним стабильность".

Alerting без шума

Принципы:

  • Алерт = action required. Если на алерт нечего сделать — не алертить
  • Severity: page (будит ночью), ticket (smoothe in business hours), info (только дашборд)
  • Group: 10 связанных fail = один алерт, не 10
  • Rate limit: один алерт на конкретный signal в час
  • Контекст в алерте: lineage link, last green run, runbook URL — чтобы не искать
Алерт: fct_orders freshness breach
Lag: 87 min (SLO 60 min)
Upstream: stg_orders (last loaded 90 min ago — likely cause)
Affected: 12 dashboards, ML model 'churn_v3'
Runbook: ...
On-call: @data-oncall

Что положить в дашборд

Один view, который отвечает на "пайплайны здоровы?":

  • Heatmap freshness (mart × hour) — красное = breach
  • Top-10 slowest jobs (p95 latency, тренд w/w)
  • Failure rate за 7d, разбивка по jobs
  • Error budget consumption per SLO
  • Lineage map для топ-10 критичных mart'ов

Вывод

## Метрики, которые emit'им
| Стадия | Метрика | Тип | Source |

## SLO contracts
| Asset | SLO | Window | Owner | Consumers |

## Lineage strategy
- Tool: OpenLineage + Marquez / Datahub / ...
- Column-level: yes/no
- Что emit'им: jobs, datasets, schema, custom facets

## Alerting matrix
| Signal | Severity | Channel | Runbook | Suppression |

## Дашборды
1. Freshness heatmap
2. Latency p95 trends
3. Failure rate + retries
4. Error budget burn

Anti-patterns

  • ❌ Только success/failure без latency — pipeline зелёный, но идёт в 5 раз медленнее, ловишь только когда SLO breach'нут
  • ❌ Lineage в виде Confluence-страницы — устаревает за неделю, никто не доверяет
  • ❌ Алерт на каждый retry — alert fatigue, реальные инциденты пропустят
  • ❌ SLO без error budget — нет формального триггера "стоп фичи, чиним надёжность"
  • ❌ Метрики только в логах, не в metric store — невозможно построить тренд за квартал
К подразделу «Пайплайны»
Похожие промты