Quando um aplicativo é lançado em produção, surge a necessidade de trabalhar com registros e compreender os processos ocorridos durante o ciclo de vida do sistema. Para lidar com depuração, auditoria e outros processos que envolvem a análise das etapas internas do sistema, é necessário ter uma boa camada de logs. Como visão geral, apresento questionamentos básicos que devem ser considerados ao capturar e armazenar logs.
1. У чому різниця між логуванням та моніторингом?
Логування (Logging) відноситься до процесу реєстрації подій та інформації про виконання системи чи програми. Ці записи (логи) можуть включати помилки, попередження, інформацію про роботу системи та інші важливі деталі для аудиту та налагодження. Логи зазвичай зберігаються у файлах або спеціалізованих системах для подальшого аналізу.
Моніторинг (Monitoring), з іншого боку, передбачає постійне спостереження за поведінкою систем і інфраструктури в реальному часі. Моніторинг має на меті виявлення проблем з продуктивністю, збоїв або аномалій, що є критичним для того, щоб попередити команди ІТ про необхідність вжиття коригувальних заходів до того, як проблема стане критичною.
2. Що слід логувати? Чи можна встановити “рівні” логів?
Типи інформації, які слід логувати:
- Помилки та винятки: Ключові для налагодження.
- Попередження: Для індикації збоїв чи проблем, що потребують уваги.
- Події системи: Як от автентифікація, зміни конфігурації.
- Взаємодії користувача: Залежно від типу програми.
Рівні логів допомагають категоризувати серйозність повідомлень. Найпоширеніші рівні:
- Error: Критичні помилки, що впливають на роботу.
- Warn: Проблеми, які не переривають роботу, але потребують моніторингу.
- Info: Загальна інформація про нормальну роботу.
- Debug: Деталі низького рівня, що використовуються для налагодження.
- Trace: Ще більш детальні повідомлення для налагодження.
3. Які є варіанти бібліотек у JS та чому варто використовувати бібліотеки зі стандартизацією логів?
Використання бібліотек зі стандартизацією логів має такі переваги:
- Послідовність: Полегшує читання та аналіз логів.
- Масштабованість: Дозволяє легко інтегруватися з інструментами для аналізу логів, такими як ELK, Fluentd або інші.
- Обслуговування: Спрощує обслуговування та зміну формату або місця збереження логів у різних частинах коду.
Бібліотеки у JavaScript:
- Winston: Дозволяє легко налаштовувати транспорти для логів та структурувати їх, наприклад, у форматі JSON.
- Pino: Орієнтована на продуктивність, також генерує логи у форматі JSON та легко інтегрується.
Приклад реалізації з Winston:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('Важлива інформація');
logger.error('Щось пішло не так');
4. Який хороший стандарт для логування інформації?
Добре сформатований лог має бути структурованим, легким для читання та індексації, містити релевантну та стандартизовану інформацію.
Хороший стандарт для логів включає:
- Структурований формат: JSON або інші формати, що зручні для машинного зчитування.
- Необхідна інформація: Часова мітка (timestamp), рівень логів, повідомлення, контекст (наприклад, ID транзакції), стек викликів (для помилок).
- Стандартизація: Використання одного формату по всій програмі для полегшення аналізу.
5. Де слід зберігати дані логів?
Дані логів не повинні зберігатися безпосередньо в базі даних програми, оскільки це може вплинути на продуктивність та масштабованість.
Logs повинні зберігатися у спеціалізованих системах, таких як:
- Файлові системи або спеціалізовані рішення: Як ELK Stack, Graylog або хмарні рішення.
- Зберігання логів у хмарі: Як AWS CloudWatch або Google Cloud Logging.
- Розподілені файлові системи: Як Hadoop, коли обсяги логів дуже великі.
Використання реляційної або NoSQL бази даних для зберігання логів може бути корисним для записів аудиту або подій, які потребують складних запитів, але зазвичай не рекомендується для безперервних логів програми через вплив на продуктивність.
6. Як впоратися з витратами? Чи є хороші практики, яких варто дотримуватися? Які?
Витрати на логування та моніторинг можуть бути високими залежно від обсягу даних та інфраструктури, необхідної для їх зберігання та обробки. Декілька хороших практик включають:
- Визначити обмеження для зберігання логів: Не зберігати логи нескінченно.
- Ефективне зберігання логів: Стиснення, індексація та використання багаторівневого зберігання (дешевше для старих даних).
- Використання open-source інструментів або хмарних рішень: Залежно від обсягу даних, open-source інструменти, як ELK Stack (Elasticsearch, Logstash і Kibana), можуть бути економнішими. Сервіси, як AWS CloudWatch або Google Stackdriver, також пропонують рішення для масштабованості з цінами, що залежать від використання.
- Використання політик зберігання та архівування: Старі логи можуть бути переміщені на дешевше зберігання, наприклад, Amazon S3, з чітко визначеною політикою зберігання.
7. Як зберігати старі логи і на скільки часу? Як витрати впливають на це рішення?
Зберігання старих логів залежить від регуляторних політик, потреб аудиту чи вимог відповідності. Вартість зберігання логів у довгостроковій перспективі впливає на це рішення. Декілька порад:
- Зберігання на довгий термін: Використання рішень для зберігання за низькою ціною (наприклад, Amazon Glacier, Google Cloud Storage) для старих логів.
- Політика зберігання: Може бути заснована на часі (наприклад, зберігати логи 6 місяців, 1 рік) або кількості (наприклад, зберігати логи до досягнення певного обсягу даних).
- Стиснення логів: Зберігання стислих логів може значно знизити витрати.
8. Які існують open-source рішення для роботи з презентацією логів?
Деякі популярні open-source рішення для візуалізації та аналізу логів:
- ELK Stack (Elasticsearch, Logstash, Kibana): Одне з найбільш популярних рішень для збору, обробки та візуалізації логів.
- Fluentd: Висококонфігурований збирач логів, який може бути інтегрований з різними інструментами.
- Graylog: Інша open-source система для централізованого збору логів, з акцентом на простоту використання та масштабованість.
- Loki + Grafana: Loki — це рішення для агрегації логів, яке інтегрується з Grafana для візуалізації.
Перекладено з: Logs além do console.log