В мене бомбить з логів

Привіт друзі, сподіваюсь, ви всі в безпеці!
Нещодавно шукав root cause чергового хитрого багу, який повідомили користувачі. І для цього вирішив проаналізувати логи мікросервісів, задіяних у функції, що містить баг. І згадав, що вже давно хочу нажалітись вам, як же в мене бомбить з логів 🤬

Не від самого факту присутності логів, а від того, як же по дурному більшість логів створюється. Коли я був менш досвідченим інженером, я лише страждав від недостатньої інформативності логів і придумував різні хаки, щоб отримати більше інформації про роботу програми.

Проблема в тому – що багато розробників пишуть логи досить рандомно, бо вони не планують ними користуватись!

Типові проблеми, з яких в мене пригорає:
🔥 Логи дублюються – так буває, коли один розробник логує, що викликає функції, а інший, автор функції, – логує, що його функція викликана 😄
🔥 Логи не містять конкретних даних – уявіть собі логи інтернет магазину, і там щось на кшталт “товар куплено”. Який? Ким? Вимагайте деталей у ваших логах!
🔥 Логи містять безпекову інформацію. Зазвичай це виявляє аудит безпеки, але можна діяти проактивно – побачили в логах паролі, токени безпеки – повідомте, що їх треба прибрати
🔥 Логи не містять міток для трасування. Це не критично, якщо у вас один бекенд, але якщо вже кілька сервісів, і запит відправляється від одного мікросервіса до іншого, його можна легко загубити. Тому правильним підходом буде для кожного запита ставити унікальний correlation id, чи хоча б який-небудь id (до речі, системам, що агрегують логи, типу kibana теж важливо мати correlation id для відстеження запитів)
🔥 Формат логів не консистентний – один з “плюсів” мікросервісів – різні команди можуть писати модулі окремо, різними мовами і технологіями. А потім тестуєш, а в тебе різні формати таймстемпів в різних системах. А в деяких – взагалі немає 🤷‍♂️
🔥 Інформація в лозі не відповідає його рівню. Іноді дивлюсь код наших продуктів, і жахаюсь – exceptions, помилки, Логується з рівнем trace! А стандартний рівень логування – info. Тобто бачу на екрані помилку, а в логах все чисто. Чи навпаки, інформація рівня trace, як то “запустилась деяка функція”, чомусь логується з рівнем info. І засирає 💩 всі логи мегабайтами непотрібної інформації.

Що робити, якщо маєте/бачите проблеми з логами? Заводьте баги! Погані логи погіршують аспект якості продукту Maintainability, тож якщо вам кажуть, що це мінорний баг – не ведіться! ⚠️ Вам треба, добивайтесь, щоб робили логи корисними! Напишіть розробникам – які саме дані вам потрібні у вимогах, а які – заважають. Потім вони самі вам подякують!

А які логи бісять вас? І що ви з цим робите?

Позначки:
14 Грудня 2022
Автор: 
  • Не тільки баг може стати фічею
  • Risk identification and assessment
  • Карго-культ
  • Environment Matters

Залишити коментар

Залишити вiдгук