awesome-everything EN
↑ Обратно к восхождению

Наблюдаемость

Observability-капстоун: чтение сигналов и запросов

Суть Чтение PromQL burn-rate-выражения, заголовка traceparent, flame graph и коррелированной строки лога — предсказать поведение и выбрать senior-прочтение.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Артефакты трека — это запросы и wire-форматы: строка burn-rate PromQL, строка traceparent, flame graph, запись лога с trace-id. Прочитайте каждый так, как читали бы в 2 ночи, потом выберите вывод senior-инженера.

Цель

Потренировать чтение четырёх конкретных артефактов главы — SLO-алерт-запроса, заголовка propagation, профиля и коррелированного лога — и превращение каждого в следующий шаг воронки.

Сниппет 1 — multi-window burn-rate-алерт

# SLO: 99.9% availability за 30 дней. Error budget = 0.1%.
- alert: CheckoutFastBurn
  expr: |
    (
      sum(rate(http_requests_total{job="checkout",code=~"5.."}[5m]))
      / sum(rate(http_requests_total{job="checkout"}[5m]))
    ) > (14.4 * 0.001)
    and
    (
      sum(rate(http_requests_total{job="checkout",code=~"5.."}[1h]))
      / sum(rate(http_requests_total{job="checkout"}[1h]))
    ) > (14.4 * 0.001)
  for: 2m
Викторина

Чего добиваются множитель 14.4 и two-window AND-клауза в этом алерте?

Сниппет 2 — заголовок traceparent

traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
Викторина

Downstream-сервис получает этот заголовок. Читая четыре поля через дефис, что он должен сделать, чтобы корректно продолжить trace?

Сниппет 3 — flame graph (текстовая форма)

checkout.HandleOrder            100%  (root, 1.50s wall)
  inventory.Lookup               87%  (1.30s)
    json.Marshal                 73%  (1.10s)   <-- широчайший лист
    grpc.Invoke                   9%  (0.13s)
  payment.Charge                  8%  (0.12s)
Викторина

Этот профиль отфильтрован по медленному trace-id из trace view. Какое прочтение верное и какой следующий шаг воронки?

Сниппет 4 — коррелированная строка лога

{"level":"error","ts":"2026-05-29T02:14:07Z","service":"inventory",
 "msg":"marshal failed: schema v3 field overflow","trace_id":"4bf92f3577b34da6a3ce929d0e0e4736",
 "span_id":"00f067aa0ba902b7","http.route":"/inventory/lookup"}
Викторина

Как эта одна строка лога привязывается к trace и профилю из предыдущих сниппетов и почему это важно?

Итог

Четыре артефакта — одна цепочка. Multi-window burn-rate-запрос даёт алерт (короткое окно для скорости, длинное для подтверждения, 14.4x = burn бюджета за 2 дня). Заголовок traceparent держит trace-id постоянным, чеканя новый span-id на каждом hop. Flame graph называет широчайший лист как self-time-hotspot — оптимизируй лист, а не предка. А структурированный лог несёт тот же trace_id, поэтому джойнится точно к тому запросу. Прочитанные последовательно, это воронка, сделанная конкретной.

Продолжить восхождение ↑Observability-капстоун: инструментируй сервис и продебажь инцидент
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.