Как вы думаете, какая самая важная функция может быть в приложении Node.js? Это причудливый полнотекстовый поиск нечетких совпадений или чат в реальном времени с сокетами? Можете ли вы сказать мне, какая самая продвинутая, удивительная и привлекательная функция может быть добавлена в приложение Node.js?
Хотите узнать мой?Высокая производительность и бесперебойная работа. Высокопроизводительные приложения должны делать три вещи:
- минимальное время простоя;
- Предсказуемое использование ресурсов;
- Эффективное масштабирование в зависимости от нагрузки
В части 1,Ключевые показатели для мониторинга Node.jsВ разделе мы обсудили ключевые показатели Node.js, которые вы должны отслеживать, чтобы понять состояние вашего приложения. Я также объясню плохие практики в Node.js, которых вам следует избегать, такие как блокировка потоков и возникновение утечек памяти, и некоторые изящные приемы, которые вы можете использовать для повышения производительности вашего приложения, такие как использование модуля кластера для создания рабочих процессов и добавление Запущенные задачи отделены от основного потока и выполняются в отдельных потоках.
В этой статье я опишу, как отслеживать приложения Node.js с помощью 5 различных инструментов с открытым исходным кодом. они могут быть не такимиSematext
илиDatadog
Это полнофункциональные, но продукты с открытым исходным кодом, которые дают вам полный контроль над собой.
Appmetrics
Панель мониторинга Node Application Metrics отображает данные о производительности для запущенных приложений Node.js. Это простой модуль, который применяется и инициализируется в верхней части файла записи Node.js. Вы можете установить из npm, выполнив следующую команду в терминале.
$ npm install appmetrics-dash
Appmetrics предоставляет очень простую в использовании веб-панель. Чтобы получить информационную панель всех HTTP-сервисов, созданных вашим приложением, все, что вам нужно сделать, это добавить следующий фрагмент в ваш файл app.js (или как там он называется, файл входа).
// Before all other 'require' statements
require('appmetrics-dash').attach()
После этого вы пройдете этот путь запроса/appmetrics-dash
увидеть множество полезных метрик.
- CPU Profiling
- Входящий HTTP-запрос
- пропускная способность HTTP
- Среднее время отклика (топ-5)
- CPU
- ОЗУ
- куча
- Время цикла событий
- окружающая обстановка
- другие запросы
- Исходящий HTTP-запрос
Этот инструмент не просто отображает метрики. Он позволяет создавать отчеты Node.js и моментальные снимки кучи прямо с панели управления. В дополнение к этому вы также можете использовать Flame Graphs, очень классный инструмент с открытым исходным кодом.
Express Status Monitor
Express.js — это фреймворк, который выбирают текущие разработчики Node.js.Express Status Monitor— это очень простой автономный модуль, который вы можете добавить в свое приложение Express. это раскрывает/status
Маршрутизация, отчеты о метриках сервера в реальном времени с помощью Socket.io и Chart.js.
Просто установите из npm.
$ npm install express-status-monitor
После установки этого модуля вам необходимо добавить его перед другим промежуточным ПО или маршрутами.
app.use(require('express-status-monitor')())
После этого, как только вы запустите свое приложение, вы можете пройти/status
Маршрутизация проверяет ваши показатели Node.js.
Prometheus
Если вы не живете в первобытные времена, вы наверняка слышалиPrometheus. Это самый известный инструмент мониторинга с открытым исходным кодом, который мы можем использовать на данный момент. Prometheus имеет 100% открытый исходный код и управляется сообществом. Все компоненты имеют открытый исходный код под лицензией Apache 2 и могут быть загружены с GitHub. это изCNCF(Cloud Native Computing Foundation) управлял и закончилучастник проектаОдин из тех же проектов участников, поскольку он включает в себяKubernetes
а такжеFluentd
Ждать.
Чтобы начать мониторинг с помощью Prometheus, вам необходимо скачать последнюю версию и установить ее.
$ tar xvfz prometheus-\*.tar.gz
$ cd prometheus-\*
Затем запустите его, запустив исполняемый файл, но перед запуском этой команды вам необходимо создатьprometheus.yml
документ. Это файл конфигурации, который настраивает, какие цели и какие показатели отслеживаются путем очистки данных конечной точки HTTP.
# prometheus.yml
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 1s
static_configs:
- targets: ['127.0.0.1:3000']
labels:
service: 'test-prom'
group: 'production'
Теперь вы можете использовать Прометей.
$ ./prometheus --config.file=prometheus.yml
Однако я ленивый и мне очень нравится Docker. Итак, мой подход заключается в том, чтобы запустить официальныйДокер-образ Прометея, чтобы избежать всех хлопот с его загрузкой.
Prometheus and Docker
Сначала перейдите в корневой каталог вашего приложения Node.js. Здесь создайтеprometheus-data
каталог иprometheus.yml
файл в него. Как только это будет сделано, запустите контейнер Prometheus Docker.
Получите официальный образ Prometheus Docker и запустите его с помощью команды docker run.
$ docker run -d \
--name prometheus \
--network="host" \
-v "$(pwd)/prometheus-data":/prometheus-data \
prom/prometheus \
--config.file=/prometheus-data/prometheus.yml
Я решил запустить контейнер с параметром -network="host", чтобы сделать контейнер Prometheus доступным через собственный адрес локального хоста, а также через собственный HTTP-порт приложения Node.js. В противном случае, если вы запускаете Prometheus и Node.js в отдельных контейнерах, вам необходимо установитьИнтернет, так что они могут добраться только друг до друга.
-v
возможность использоватьprometheus-data
Каталог хоста сопоставляется с одноименным каталогом внутри контейнера.
После запуска контейнера Prometheus вам необходимо добавить код конфигурации в приложение Node.js, чтобы открыть интерфейс данных мониторинга. Сначала нужно установить из npm для Node.jsклиент прометея.
$ npm install prom-client
Затем добавьте соответствующий код конфигурации, связанный с Prometheus.
// after all 'require' statements
const client = require('prom-client')
const collectDefaultMetrics = client.collectDefaultMetrics
collectDefaultMetrics({ timeout: 1000 })
app.get('/metrics', (req, res) => {
res.set('Content-Type', client.register.contentType)
res.end(client.register.metrics())
})
Далее вам просто нужно запустить приложение Node.js, пройтиhttp://localhost:9090/graph
Вы можете увидеть график Прометея
Clinic.js
Clinic.js включает в себя три инструмента, помогающих диагностировать и выявлять проблемы с производительностью Node.js. Его использование очень просто. Все, что вам нужно сделать, это установить модуль из npm и запустить его. Он будет генерировать отчеты для вас, чтобы упростить устранение неполадок.
Установите Clinic.js с помощью следующей команды
$ npm install clinic
После установки вы можете выбрать тип отчета для генерации. Вы можете выбрать один из следующих трех типов отчетов.
- Doctor
- Собирайте метрики, вводя зонды
- Оценка работоспособности и эвристика
- Дайте рекомендации по ремонту
- Bubbleprof — совершенно новый, совершенно уникальный подход к профилированию кода Node.js.
- Используйте async_hooks для сбора метрик
- Задержка между операциями отслеживания
- Создайте пузырьковую диаграмму
- Пламя — используйте графики пламени, чтобы выявить узкие места и горячие пути в вашем коде.
- Собирайте метрики с помощью выборки ЦП
- верхняя частота стека дорожек
- Создайте график пламени
Начнем с запуска Doctor и тестирования приложения node.js.
$ clinic doctor -- node app.js
Во время работы программы используйте инструмент стресс-тестирования для запуска нагрузочных тестов.
$ loadtest -n 1000 -c 100 [http://localhost:3000/api](http://localhost:3000/api)
После завершения работы остановите сервер, и Clinic.js Doctor откроет отчет, который вы можете просмотреть.
Используя тот же метод, вы можете запустить Bubbleprof или Flame и получить графические отчеты из соответствующего инструмента.
PM2
Запуск приложений Node.js в производственной среде с PM2 стал проще. Это менеджер процессов, который позволяет легко запускать приложения в кластерном режиме. С точки зрения непрофессионала, он будет порождать один процесс на ядро ЦП вашего хоста.
Установить первымPM2
$ npm install pm2 -g
После установки, если вашим основным исходным файлом является app.js, сгенерируйте демон PM2, выполнив эту команду в терминале.
$ pm2 start app.js -i 0
-i 0
Количество экземпляров флага. Это запустит приложение Node.js в кластерном режиме, где число 0 представляет количество ядер ЦП. Вы можете вручную ввести любое число, но проще позволить PM2 подсчитать количество ядер и автоматически создать соответствующее количество рабочих процессов.
Просмотр с PM2Данные мониторинга Node.jsтакже легко
$ pm2 monit
Эта команда откроет панель инструментов в терминале. Здесь вы можете отслеживать процессы, журналы, задержку цикла, память процесса и ЦП.
Используйте инструменты с открытым исходным кодом для обертывания решений Node.js для мониторинга
Показатели производительности имеют решающее значение для поддержания удовлетворенности пользователей. В этой статье я показал вам, как добавить мониторинг в приложение Node.js, используя 5 различных инструментов с открытым исходным кодом. Узнав о первой части этой серииКлючевые показатели для мониторинга Node.jsПосле этого добавление инструментов для мониторинга реальных приложений становится естественным процессом обучения. Последняя часть этой серии познакомитМониторинг Node.js в производстве с помощью Sematext.
Если вы хотите увидеть пример кода, вот тот, который содержит всеПример репозитория кода.你还可以克隆下来并选择任何工具打开。
Если вам нужна полная наблюдаемость стека для большего количества программного обеспечения, проверьтеSematext. мы толкаемНаши продукты с открытым исходным кодоми иметь влияние.
оригинал:Node.js Open-Source Monitoring Tools