Наблюдаемость
Структурное логирование: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый — это решение, которое ты принимаешь, пока сервис горит в 03:00: не определение для заучивания, а компромисс между счётом, алертом, аудитом и расследованием.
Убедись, что связываешь контракт схемы, лестницу log level, экономику sampling, защиту от PII и injection, корреляцию по trace и разделение audit-логов — тот синтез, к которому вели отдельные уроки.
Два сервиса одной команды пишут JSON-логи, но один называет поле http.response.status_code, а другой — status. Оба валидный JSON. Почему это всё равно ломает on-call?
Хелпер ретраев пишет ERROR на каждой из 5 попыток, включая 3 успешные. Канал on-call стал шумом, а реальный ERROR на прошлой неделе пропустили. Какой правильный фикс и почему?
Один сервис на 1000 req/s с JSON-логами по 1 КБ стоит ~$260/мес на ingest. Какой первый рычаг, чтобы срезать ~90% без потери возможности расследовать сбои?
Хендлер интерполирует присланный пользователем текст комментария прямо в строку лог-сообщения. Пользователь шлёт комментарий с переводом строки, за которым идёт поддельный ERROR-объект JSON. Какой это класс сбоя и какой структурный фикс?
Node-сервис сообщает, что ~5% лог-строк несут trace_id = '00000000000000000000000000000000'. Как это читать?
Команда хранит операционные логи и audit-логи (логины, выдача ролей, доступ к регулируемым данным) в одном индексе с retention 30 дней. Почему это сбой комплаенса, а не вопрос аккуратности?
Сквозная линия юнита — это один конвейер решений: стабильная схема (имена полей OTel) делает логи запрашиваемыми и соединяемыми; лестница log level маршрутизирует объём в хранилище, а severity — к людям; sampling держит счёт пропорциональным инцидентам, всегда сохраняя WARN/ERROR; дисциплина PII и защита от CWE-117 injection — это заботы безопасности первого порядка, решаемые у источника и на коллекторе; trace_id делает лог-строку узлом графа observability, а не островом; и audit-логи разделяют JSON-схему, но требуют своего pipeline, retention, immutability и доступа. Каждый ответ сводится к тому, чтобы относиться к лог-строке как к API-контракту, на который полагаются и твой on-call, и твой аудитор.