📊 Моніторинг та ведення журналів у реальному часі для додатків Node.js

pic

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

Але з чого почати? Не хвилюйтеся, я вас покрию! У цій статті ми розглянемо, як:

  1. Використовувати інструменти, такі як Elastic Stack, Grafana або Prometheus для спостереження.
  2. Агрегувати журнали за допомогою Winston та Morgan.
  3. Налаштувати сповіщення, щоб отримувати попередження до того, як станеться катастрофа.

Давайте побудуємо міцну основу для моніторингу та ведення журналів для ваших Node.js додатків. 🚀

🚀 Чому моніторинг і ведення журналів в реальному часі важливі

Журнали та моніторинг — це не просто модні терміни; вони критично важливі для:

  • Виправлення помилок: Виявляйте помилки до того, як про них повідомлять користувачі.
  • Оптимізація продуктивності: Визначайте вузькі місця.
  • Безпека: Виявляйте спроби несанкціонованого доступу.
  • Час роботи: Залишайте додаток працюючим без перерв завдяки проактивним сповіщенням.

Уявіть, що ваш API на Node.js сповільнюється під навантаженням, або з'єднання з базою даних не вдається. Завдяки моніторингу в реальному часі ви дізнаєтесь про це негайно. Без нього? Ви намагаєтеся наздогнати проблему, поки користувачі страждають.

🔍 Спостереження за допомогою Elastic Stack, Grafana та Prometheus

1. Elastic Stack (ELK Stack)

Elastic Stack (Elasticsearch, Logstash, Kibana) — це потужний набір інструментів для агрегації, пошуку та візуалізації журналів.

Налаштування:

  1. Встановіть Elasticsearch:
    Elasticsearch зберігає ваші журнали та метрики. Використовуйте Docker для швидкого налаштування:
docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.10.0

2. Встановіть Kibana:
Kibana візуалізує ваші дані.

docker run -d --name kibana -p 5601:5601 --link elasticsearch kibana:8.10.0

3. Надсилайте журнали за допомогою Logstash:
Використовуйте Logstash для форматування і надсилання ваших журналів Node.js до Elasticsearch.

4. Підключіть Node.js:
Встановіть пакет winston-elasticsearch:

npm install winston winston-elasticsearch
  1. Налаштуйте Winston для запису журналів у Elastic:
const winston = require('winston');   
const Elasticsearch = require('winston-elasticsearch');   
const esTransportOpts = { level: 'info', clientOpts: { node: 'http://localhost:9200' } };   
const logger = winston.createLogger({ transports: [new Elasticsearch(esTransportOpts)] });   
logger.info('Hello, Elastic Stack!');

Тепер ви можете переглядати журнали в Kibana та налаштовувати інформаційні панелі для моніторингу продуктивності додатку в реальному часі.

2. Grafana + Prometheus

Чому Grafana?

Grafana є чудово інтерактивною та безперешкодно інтегрується з інструментами для метрик, такими як Prometheus.

Налаштування Prometheus + Grafana:

  1. Встановіть Prometheus:
    Prometheus збирає метрики з вашого додатку.
docker run -d -p 9090:9090 --name prometheus prom/prometheus

2. Відкрийте метрики в Node.js:
Встановіть prom-client:

npm install prom-client
  1. Додайте метрики Prometheus до вашого додатку:
const express = require('express');  
const client = require('prom-client');  
const app = express();  
const collectDefaultMetrics = client.collectDefaultMetrics;  
collectDefaultMetrics();  
app.get('/metrics', (req, res) => {  
 res.set('Content-Type', client.register.contentType);  
 res.end(client.register.metrics());  
});  
app.listen(3000, () => console.log('Server running on port 3000'));

4. Встановіть Grafana:
Grafana візуалізує метрики Prometheus.

docker run -d -p 3000:3000 --name=grafana grafana/grafana

5. Додайте Prometheus як джерело даних в Grafana.
Створення панелей моніторингу: Моніторинг запитів на секунду, використання пам'яті та багато іншого у приголомшливих графіках в реальному часі.

🛠️ Агрегація журналів за допомогою Winston і Morgan

Winston: Потужний інструмент для ведення журналів

Winston — це гнучка бібліотека для ведення журналів, що підтримує кілька транспортів, таких як файли, бази даних або хмарні сервіси.

Налаштування:

Встановіть Winston:

npm install winston

Основне використання:

const winston = require('winston');  

const logger = winston.createLogger({  
 level: 'info',  
 transports: [  
 new winston.transports.Console(),  
 new winston.transports.File({ filename: 'app.log' }),  
 ],  
});  
logger.info('Сервер запущено');

Morgan: Логування HTTP запитів

Morgan ідеально підходить для логування HTTP запитів у додатках на Express.

Налаштування:

Встановіть Morgan:

npm install morgan

Додайте його до вашого додатку:

const morgan = require('morgan');  
const express = require('express');  

const app = express();  
app.use(morgan('combined'));  
app.listen(3000, () => console.log('Сервер запущено на порту 3000'));

🔔 Налаштування сповіщень

Журнали та панелі моніторингу чудові, але сповіщення рятують день, коли щось йде не так.

Використання сповіщень у Grafana:

  1. Встановіть порогові значення для метрик, таких як використання процесора, час відповіді чи кількість помилок.
  2. Налаштуйте сповіщення через Slack, email або PagerDuty.

Winston зі сповіщеннями:

Інтегруйте Winston з сервісами сповіщень, такими як Slack:

npm install winston-slack-webhook-transport

Додайте транспорт для Slack:

const SlackHook = require('winston-slack-webhook-transport');  

const logger = winston.createLogger({  
 transports: [  
 new SlackHook({  
 webhookUrl: 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL',  
 level: 'error',  
 }),  
 ],  
});  
logger.error('Критична помилка! Перевірте негайно.');

🌟 Поради для професіоналів

  1. Централізоване логування: Використовуйте інструменти, такі як Loggly, Papertrail або Datadog для агрегації журналів.
  2. Відстеження запитів: Використовуйте інструменти, такі як Jaeger або Zipkin для розподіленого трасування в мікросервісах.
  3. Моніторинг всього: Включайте метрики для процесора, пам'яті, використання диска та специфічні для додатка.

🎯 Підсумки

Моніторинг і ведення журналів в реальному часі змінюють те, як ви управляєте додатками на Node.js. Використовуючи інструменти, такі як Elastic Stack, Grafana або Prometheus, разом з бібліотеками, як Winston і Morgan, ви отримуєте повне спостереження за здоров'ям вашого додатку.

А завдяки проактивним сповіщенням ви можете виправляти проблеми до того, як вони стануть проблемами для користувачів.

Пора покласти край реактивному підходу і почати діяти проактивно! Створюйте, моніторьте та процвітайте. 🚀

Поділіться своїми думками або улюбленими інструментами моніторингу в коментарях нижче. 👇

Перекладено з: 📊 Real-Time Monitoring and Logging for Node.js Applications

Leave a Reply

Your email address will not be published. Required fields are marked *