Стандарт логирования для команды
Вопрос
Интервьюер: «В компании каждый сервис логирует как хочет, найти что-то в инциденте невозможно. Какой стандарт логирования вы предложите?»
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
JSON в stdout, одно событие на строку
Обязательные поля: время UTC, уровень, сервис, версия, окружение, trace_id
Постоянное сообщение и детали в полях
Договорённость об уровнях: что такое ERROR
Запрет на персональные данные, токены и тела запросов, маскирование
Общая библиотека или SDK, ретеншн и метки в хранилище
Что могут спросить следом
- Как внедрить стандарт в 50 сервисов?
- Как проверить, что сервис соответствует стандарту?
Разбор
Образцовый ответ: «Предложу короткий стандарт на одну страницу. Логи в stdout в JSON, одно событие на строку. Обязательные поля: ts в UTC ISO 8601 с миллисекундами, level, service, version, env, trace_id, span_id, msg постоянным текстом, детали отдельными полями. ERROR только когда сервис не сделал работу; ожидаемые 4xx это INFO. Запрещены пароли, токены, номера карт и паспорта, тела запросов целиком; маскирование в общей библиотеке логирования. Чтобы внедрить, даю готовую обёртку логгера для наших языков с подключённым OpenTelemetry, а агент собирает логи и ставит метки. Проверка: линтер на формат в CI и дашборд долей невалидных строк по сервисам».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.