Наблюдаемость без боли: логи, метрики, трейсы
Шесть часов мы искали причину деградации API, хотя все данные были в системе. Проблема в том, что логи, метрики и трейсы жили в трёх разных мирах и не имели общего ключа — trace id.
Наблюдаемость начинается не с дашборда, а с договора: каждый запрос получает trace id на входе, прокидывает его через все сервисы и пишет его в каждую строчку лога.
app.use((req, res, next) => {
const traceId = req.headers["x-trace-id"] ?? crypto.randomUUID();
res.setHeader("x-trace-id", traceId);
ctx.run({ traceId }, next);
});
Метрики: начните с четырёх золотых сигналов — latency, traffic, errors, saturation. Красивые дашборды приходят потом, сначала алерты на то, что реально будит.
Логи: пишите события, а не отладку. «order.created» с полями полезнее, чем «entered function handleOrder».
Хороший инцидент-разбор отвечает на вопрос «что система рассказала нам сама?». Если ответ «ничего» — вы платите за наблюдаемость, но не владеете ею.
Комментарии 1
Trace id в каждой строчке лога — да. Но добавьте ещё соглашение об именовании span-ов, иначе трейс на 200 span-ов нечитаем.