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

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

Три pillarа: чтение кода и конфигов

Суть Читай реальный код инструментирования, log-строку, PromQL-алерт и конфиг tail-sampling; предскажи поведение observability и выбери фикс с наибольшим рычагом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Баги observability написаны в коде инструментирования и конфигах, а не в дашбордах. Читай сниппет, предскажи, что он сделает со стоимостью или корректностью бэкенда, затем выбери фикс, который senior-инженер делает первым.

Цель

Отработай цикл, который ты прогоняешь в каждом инциденте observability: читай инструментирование, предскажи последствие по cardinality, объёму или семплированию, и тянись к фиксу с наибольшим рычагом, прежде чем кого-то будить.

Сниппет 1 — label метрики

requestsTotal := prometheus.NewCounterVec(
    prometheus.CounterOpts{Name: "http_requests_total"},
    []string{"route", "method", "status_class", "customer_email"},
)
// в хендлере:
requestsTotal.WithLabelValues(route, method, statusClass, req.CustomerEmail).Inc()
Викторина

Этот counter задеплоен в сервис со 100k+ активных клиентов. Что произойдёт и какой фикс сохранит per-customer drill-through?

Сниппет 2 — log-строка ретрая

for attempt in range(max_retries):  # max_retries только что подняли 3 -> 20
    try:
        return gateway.charge(order)
    except TimeoutError:
        logger.info("payment retry", extra={"order_id": order.id, "attempt": attempt})
Викторина

Трафик ровный, но счёт за логи скакнул после того, как max_retries вырос с 3 до 20. Какое утверждение верно и какой устойчивый фикс?

Сниппет 3 — алерт на cardinality

# выражение алерта
rate(prometheus_tsdb_head_series_created_total[5m]) > 1000

# triage-запрос, когда сработал:
topk(10, count by (__name__) ({__name__=~".+"}))
Викторина

Что детектит этот алерт и что говорит triage-запрос, когда он срабатывает?

Сниппет 4 — конфиг tail-sampling

policies:
  - name: errors-policy
    type: status_code
    status_code: {status_codes: [ERROR]}
  - name: slow-traces-policy
    type: latency
    latency: {threshold_ms: 1000}
  - name: baseline-policy
    type: probabilistic
    probabilistic: {sampling_percentage: 2}
Викторина

Ревьюер спрашивает: «зачем три политики и какую стоимость мы всё ещё платим, хотя храним только ~2% успешных трейсов?»

Итог

Любая проблема observability читается в коде и конфиге: неограниченный label вроде customer_email — это cardinality-бомба (убери его, держи bounded segment плюс exemplar); log-строка на итерацию умножает объём независимо от трафика (эмить одну сводку плюс counter-метрику); алерт на rate head_series_created ловит бомбу до OOM, а topk-запрос называет виновника; конфиг tail-sampling держит 100% ошибок и медленных трейсов, всё ещё платя стоимость коллектора пропорционально сырому трафику. Читай инструментирование, предсказывай ось стоимости, фикси у источника.

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

Trademarks belong to their respective owners. Editorial reference only.