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

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

OTel: чтение конфигов и трейсов

Суть Читай реальный YAML Collector, конфиг tail-sampling, строку лога в стиле gctrace и сниппет ручного span — затем выбирай поведение или фикс с наибольшим рычагом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Проблемы OTel диагностируются в YAML, строках лога и коде span — не в слайдах. Прочитай каждый артефакт, предскажи поведение и выбери фикс, который senior platform-инженер сделал бы первым.

Цель

Отработай цикл, который ты гоняешь в каждом инциденте OTel: прочитай конфиг Collector или код span, предскажи, что он делает под нагрузкой, и потянись за изменением, которое реально чинит режим отказа.

Сниппет 1 — порядок процессоров

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [tail_sampling, memory_limiter, batch]
      exporters: [otlp/backend]
Викторина

Под всплеском трафика этот пайплайн OOM-килит gateway. Что не так и каков фикс?

Сниппет 2 — политика tail-sampling

processors:
  tail_sampling:
    decision_wait: 30s
    num_traces: 50000
    policies:
      - name: errors
        type: status_code
        status_code: { status_codes: [ERROR] }
      - name: slow
        type: latency
        latency: { threshold_ms: 1000 }
      - name: baseline
        type: probabilistic
        probabilistic: { sampling_percentage: 1 }
Викторина

При устойчивых 2000 трейсов/с gateway начинает дропать трейсы до принятия решений, а otelcol_processor_tail_sampling_count_traces_on_memory держится выше num_traces. В чём ошибка сайзинга?

Сниппет 3 — строка self-метрик Collector

otelcol_processor_dropped_spans{processor="memory_limiter"} 18432
otelcol_receiver_refused_spans{receiver="otlp"} 9120
otelcol_exporter_send_failed_spans{exporter="otlp/backend"} 0
process_resident_memory_bytes 1.93e+09   # limit 2.0e+09
Викторина

Читая эти четыре self-метрики Collector вместе, каков диагноз?

Сниппет 4 — ручной span

const span = tracer.startSpan("fraud.check");
try {
  const score = await fraud.evaluate(order);
  span.setAttribute("fraud.score", score);
  if (score > threshold) throw new FraudError(order.id);
  return score;
} catch (err) {
  throw err;
}
Викторина

У этого ручного span два дефекта, которые senior-ревьюер отмечает сразу. Какие?

Итог

Каждый артефакт OTel читается одинаково: в пайплайне Collector порядок процессоров — это корректность (memory_limiter первым или OOM); num_traces у tail-sampling должен быть размерен под peak_rate × decision_wait × safety, а не под baseline; собственные self-метрики Collector отличают gateway, ограниченный памятью (dropped/refused высокие, send_failed ноль), от отказа backend (send_failed высокий); а ручной span обязан end() в finally и записывать исключения, иначе он течёт и прячет те самые ошибки, которые должен был ловить. Читай конфиг, предсказывай режим отказа, чини структурную причину.

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

Trademarks belong to their respective owners. Editorial reference only.