Короткий ответ
Метрики (агрегированные числовые ряды во времени), логи (дискретные события с контекстом) и трассировки (путь запроса через систему) — три взаимодополняющих типа сигналов: метрики показывают "что происходит в целом", логи — "что именно случилось", трассировка — "где по времени ушёл запрос".
Как это работает подробнее
метрика — число с меткой времени и набором labels (например, http_requests_total{method="GET"}), хранится компактно и агрегируется; лог — текстовая или структурированная запись конкретного события с деталями (ошибка, запрос, stack trace); трейс — дерево спанов, показывающее, как один запрос прошёл через несколько сервисов и сколько заняла каждая часть.
Пример кода
example.txt
# Метрика (Prometheus)
http_request_duration_seconds_count{service="checkout", status="500"} 42
# Лог (структурированный, JSON)
{"ts":"2024-05-01T10:02:11Z","level":"error","service":"checkout","msg":"payment gateway timeout","trace_id":"7f3a2c"}
# Трейс (упрощённый спан)
trace_id=7f3a2c span=checkout->payment-gateway duration_ms=4200 status=timeoutЧто использовать на практике
- Практика. метрики используют для алертинга и дашбордов, так как их дёшево хранить и быстро агрегировать; логи — для детального разбора конкретного инцидента; трассировку — чтобы найти, какой сервис в цепочке вызовов стал причиной задержки. Сигналы дополняют друг друга: метрика говорит "latency выросла", лог — "у сервиса X ошибка подключения к БД", трейс — "запрос провёл 400 мс именно в вызове к сервису X".
- Практика. По значению
trace_id=7f3a2cодин и тот же инцидент находится во всех трёх системах: метрика покажет рост 500-х, лог — конкретную причину (timeout к payment gateway), трейс — где именно по времени произошла задержка.
Подводные камни
- Частые ошибки. пытаться строить алертинг только на логах, что дорого и медленно при большом объёме данных; добавлять высококардинальные значения (например, user_id) в labels метрики вместо логов; считать трассировку избыточной для монолита, хотя она полезна и там для профилирования внутренних вызовов и SQL-запросов.