Перейти к содержанию

Observability: metrics, logs и tracing

Раздел 04 · Типы достоверности

Тип материала: инженерный разбор. Схемы и примеры иллюстративные. Рекомендации — INFERENCE; учебные параметры — HYPOTHETICAL.

Проверка источников: 2026-11-02. Версии и границы первоисточников перечислены в конце. Documented contracts не означают выполненный runtime test.

Принцип работы и границы

Наблюдаемость должна отвечать, принят ли вход, где находится durable progress и какие бизнес-инварианты нарушены. Metrics показывают агрегированный симптом, logs сохраняют события и решения, traces связывают путь исполнения. Эти сигналы описаны в OpenTelemetry; sampling означает, что trace не является полным audit ledger.

INFERENCE: различайте transport lag, oldest unprocessed age, accepted→effect delay, checkpoint age, source retention headroom, DLQ debt и reconciliation exceptions. Для counters указывайте границы: attempts, unique accepted commands и committed effects — разные denominators.

Log event содержит operation_id, event_id, tenant-safe reference, partition/offset, state generation, decision и error class. Не вставляйте payment payload/PII в labels. High-cardinality идентификаторы пригодны для защищённых logs/traces, но плохо подходят для time-series labels.

Иллюстративная архитектура

flowchart LR
 P[Pipeline boundaries] --> M[Metrics with bounded labels]
 P --> L[Redacted structured logs]
 P --> T[Sampled traces]
 M --> A[Alerts and runbook]
 L --> I[Incident evidence]
 T --> I
 A --> I

Failure scenarios

Consumer lag ноль, но половина входов в quarantine. Histogram измеряет только успешные запросы и скрывает timeouts. Trace теряется при asynchronous queue boundary. Monitoring pipeline недоступен одновременно с production, и absence of metrics ошибочно принимают за здоровье.

Recovery protocol

  1. Проверить сам сбор telemetry независимым heartbeat и freshness index.
  2. Коррелировать accepted/effect/rejected/unresolved counts по тому же cut.
  3. Определить последнюю здоровую boundary по durable evidence, а не только trace.
  4. Приложить offsets/generation и redacted logs к incident; перейти к конкретному recovery runbook.
  5. После восстановления проверить business reconciliation, а не закрывать incident по CPU/lag.

Trade-offs и критерии выбора

Подробные logs облегчают расследование, но увеличивают PII risk и storage cost. Tail sampling сохраняет ошибки, но не даёт complete ledger. SLO по freshness может конфликтовать с gate, защищающим correctness; отдельные статусы degraded/incomplete нужны клиенту.

FinTech и iGaming

Для settlement alarm нужен unresolved amount по currency и возраст exception, а не только message rate. Для antifraud feature completeness и watermark age важнее зелёного health endpoint. Tracing не должен раскрывать PAN или документы KYC.

Практический пример

Учебный alert contract: если source принят, но effect не виден после policy-defined deadline, открыть exception с operation_id и authoritative status. Число секунд зависит от продукта и здесь не задаётся как SLA. Добавьте dashboard для восьми строк failure matrix.

Типичные ошибки проектирования

Логировать только exceptions без outcome; offsets без topic/generation; operation_id в metric labels; считать tracing юридически достаточным аудитом; алертить lag без retention headroom.

Вопросы на собеседовании

Как увидеть silent data loss? Независимые accepted/effect counts, key-level сверка и source completeness checks.

Почему traces недостаточно для аудита? Sampling, retention и mutable storage не гарантируют полноты и целостности evidence.

Дополнительные источники