Node.js в производстве — инструмент мониторинга с открытым исходным кодом

Node.js

Как вы думаете, какая самая важная функция может быть в приложении Node.js? Это причудливый полнотекстовый поиск нечетких совпадений или чат в реальном времени с сокетами? Можете ли вы сказать мне, какая самая продвинутая, удивительная и привлекательная функция может быть добавлена ​​в приложение Node.js?

Хотите узнать мой?Высокая производительность и бесперебойная работа. Высокопроизводительные приложения должны делать три вещи:

  1. минимальное время простоя;
  2. Предсказуемое использование ресурсов;
  3. Эффективное масштабирование в зависимости от нагрузки

В части 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
    1. Собирайте метрики, вводя зонды
    2. Оценка работоспособности и эвристика
    3. Дайте рекомендации по ремонту
  • Bubbleprof — совершенно новый, совершенно уникальный подход к профилированию кода Node.js.
    1. Используйте async_hooks для сбора метрик
    2. Задержка между операциями отслеживания
    3. Создайте пузырьковую диаграмму
  • Пламя — используйте графики пламени, чтобы выявить узкие места и горячие пути в вашем коде.
    1. Собирайте метрики с помощью выборки ЦП
    2. верхняя частота стека дорожек
    3. Создайте график пламени

Начнем с запуска 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

использованная литература