У світі програмного забезпечення неперервна робота — це ворог. Незалежно від того, чи ви управляєте платформою для електронної комерції, фінансовим додатком чи ігровим сервером, моніторинг в реальному часі та ведення журналів — це ваш порятунок для виявлення помилок, відстеження продуктивності та забезпечення безперебійного досвіду користувачів.
Але з чого почати? Не хвилюйтеся, я вас покрию! У цій статті ми розглянемо, як:
- Використовувати інструменти, такі як Elastic Stack, Grafana або Prometheus для спостереження.
- Агрегувати журнали за допомогою Winston та Morgan.
- Налаштувати сповіщення, щоб отримувати попередження до того, як станеться катастрофа.
Давайте побудуємо міцну основу для моніторингу та ведення журналів для ваших Node.js додатків. 🚀
🚀 Чому моніторинг і ведення журналів в реальному часі важливі
Журнали та моніторинг — це не просто модні терміни; вони критично важливі для:
- Виправлення помилок: Виявляйте помилки до того, як про них повідомлять користувачі.
- Оптимізація продуктивності: Визначайте вузькі місця.
- Безпека: Виявляйте спроби несанкціонованого доступу.
- Час роботи: Залишайте додаток працюючим без перерв завдяки проактивним сповіщенням.
Уявіть, що ваш API на Node.js сповільнюється під навантаженням, або з'єднання з базою даних не вдається. Завдяки моніторингу в реальному часі ви дізнаєтесь про це негайно. Без нього? Ви намагаєтеся наздогнати проблему, поки користувачі страждають.
🔍 Спостереження за допомогою Elastic Stack, Grafana та Prometheus
1. Elastic Stack (ELK Stack)
Elastic Stack (Elasticsearch, Logstash, Kibana) — це потужний набір інструментів для агрегації, пошуку та візуалізації журналів.
Налаштування:
- Встановіть 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
- Налаштуйте 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:
- Встановіть Prometheus:
Prometheus збирає метрики з вашого додатку.
docker run -d -p 9090:9090 --name prometheus prom/prometheus
2. Відкрийте метрики в Node.js:
Встановіть prom-client
:
npm install prom-client
- Додайте метрики 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:
- Встановіть порогові значення для метрик, таких як використання процесора, час відповіді чи кількість помилок.
- Налаштуйте сповіщення через 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('Критична помилка! Перевірте негайно.');
🌟 Поради для професіоналів
- Централізоване логування: Використовуйте інструменти, такі як Loggly, Papertrail або Datadog для агрегації журналів.
- Відстеження запитів: Використовуйте інструменти, такі як Jaeger або Zipkin для розподіленого трасування в мікросервісах.
- Моніторинг всього: Включайте метрики для процесора, пам'яті, використання диска та специфічні для додатка.
🎯 Підсумки
Моніторинг і ведення журналів в реальному часі змінюють те, як ви управляєте додатками на Node.js. Використовуючи інструменти, такі як Elastic Stack, Grafana або Prometheus, разом з бібліотеками, як Winston і Morgan, ви отримуєте повне спостереження за здоров'ям вашого додатку.
А завдяки проактивним сповіщенням ви можете виправляти проблеми до того, як вони стануть проблемами для користувачів.
Пора покласти край реактивному підходу і почати діяти проактивно! Створюйте, моніторьте та процвітайте. 🚀
Поділіться своїми думками або улюбленими інструментами моніторингу в коментарях нижче. 👇
Перекладено з: 📊 Real-Time Monitoring and Logging for Node.js Applications