Рубрики
Uncategorized

Мониторинг Node.js сделал простой

Node.js Мониторинг — сложная задача. Есть определенные проблемы, на которые нужно обратить внимание. Потому что node.js … с меткой узла, JavaScript, DevOps, ShowDev.

Node.js мониторинг в производстве (6 серии деталей)

Node.js Мониторинг — сложная задача. Есть определенные проблемы, на которые нужно обратить внимание. Поскольку node.js является динамически напечатанным языком программирования и однопоточным, вы даете переводчику и времени выполнения большую свободу для принятия решений. Это может легко привести к утечкам памяти и высокой загрузке процессора. Параллельное выполнение моделируется в node.js с использованием асинхронного выполнения функций. Но, если одна функция блокирует поток или очередь событий, производительность приложения получит огромный удар.

Эта статья будет погружаться в то, как вы можете отслеживать свое приложение и убедиться, что эти проблемы не произошли. Я расскажу Управление эффективностью приложения (APM) И почему это важно, но и Управление журналом И как вы можете создать структурированные журналы, чтобы помочь вам отладки, устранения неполадок и ошибок отслеживать в вашем приложении.

Готовый? Давайте прыгнем.

Что такое управление эффективностью приложений?

Мониторинг вашего программного обеспечения вращается вокруг, чтобы убедиться, что все работает так, как должно. Вы хотите, чтобы ваши пользователи имели приятный опыт использования вашего программного обеспечения. Правильное определение того, что мониторинг, по словарю, звучит что -то вроде этого.

Наблюдать и проверить прогресс или качество (что -то) в течение определенного периода времени; Продолжайте систематический обзор.

Это звучит довольно расплывчато. Итак, давайте пропустим формальности и перейдем к некоторым реальным вариантам использования. Мониторинг обеспечивает способ предотвращения потери клиентов и, что важно, не дать вам тратить время. Время — это деньги, и предотвращение простоя, потеря ресурсов и экономия вашего продукта от проблем с производительностью сэкономит вам деньги в долгосрочной перспективе. Который является и должен быть основным направлением каждого бизнеса, чтобы зарабатывать деньги.

Управление эффективностью приложений (APM) определяет способ мониторинга производительности и доступности программных приложений. Он стандартизирован путем отображения диаграмм с показателями производительности для таких вещей, как количество запросов, время отклика, использование процессора и использование памяти. Эти диаграммы показывают средние значения, процентили и любую пользовательскую группировку, которую вы, возможно, захотите определить. Я проведу вас в следующих нескольких разделах этого учебника. Вы можете легко добавить APM в приложение Node.js с Интеграция Sematext для node.js Анкет

Какие метрик Node.js для мониторинга?

Есть несколько основных факторов, которые вы хотите принять во внимание при мониторинге вашего приложения. Начиная от общей информации о здоровье системы до того, как ваши серверы используют память и циклы процессора. Я рассмотрел это более подробно в части 1 этой серии под названием Top Node.js Metrics для мониторинга. Давайте прыгнем и сделаем быстрое резюме, прежде чем двигаться дальше.

Системная здоровье и время простоя

Если ваше приложение не работает, ваши клиенты не могут тратить деньги. Как вы можете себе представить, это плохо. Что еще хуже, так это то, что это заставляет их терять доверие к вам. Вероятность того, что они вернутся, невелика, если они потеряют доверие к вам и вашему продукту. Ваша цель — настроить решение для мониторинга, чтобы отслеживать, как ведет себя ваша система. Это должно сразу уведомить вас о том, что могут возникнуть о том, что могут возникнуть проблемы с высокими задержками или любыми проблемами обслуживания.

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

Плохо оптимизированные услуги используют больше ресурсов, стоят больше денег и имеют более высокие задержки. Поиск проблем с производительностью и предоставление вам простого способа их решения — это то, почему вам нужно тщательно выбрать свой инструмент APM. Это должно дать вам способ улучшить ваше приложение, чтобы вы не тратили деньги, время и ресурсы на ненужную инфраструктуру из -за ваших плохих навыков кодирования.

Устранение узких мест производительности гарантирует, что вам не нужно масштабировать вашу инфраструктуру, когда у вас есть внезапные всплески движения. Вот почему мониторинг использования процессора и память является важным шагом.

Node.js API задержка

Это факт, которые пользователи не хотят оставаться и ждать загрузки вашего приложения. Среднее время ожидания составляет около 2 секунд. Вот сколько времени вы должны убедиться, что вы не потеряете этого клиента навсегда. Это не секрет, чем быстрее ваш продукт, тем больше у вас клиентов. Более важно, их удовлетворенность пользователя будет выше.

Что вы можете сделать, чтобы заметить медленные услуги, так это собирать данные на уровне обслуживания. Если у вас есть несколько API, обязательно проанализируйте задержку для каждого из них. Это даст вам большее понимание реальной причины, почему ваши услуги медленные.

Node.js Коэффициенты ошибок и обработка ошибок

Особенности могут быстро превратиться в ошибки. Неудачный код может остаться незамеченным в течение длительного периода времени, если у вас нет способа узнать о них. Вы не можете полагаться на то, что ваши пользователи говорят вам. Если они наткнутся на проблему, они с большей вероятностью покинут ваш сайт, чем скажут вам.

Чтобы обнаружить проблемы, необходимые для отслеживания суммы и типа ошибок, которые производит ваше приложение. Это включает в себя коды состояния 4xx/5xx, ошибки времени выполнения и сбои приложений. Если у вас большое количество ошибок, есть вероятность, что у вас есть проблемы с качеством кода.

Чтобы поддерживать низкое количество ошибок, убедитесь, что определить приоритеты качества кода, Tdd И хороший CI/CD Pipeline Анкет Это создаст ощущение ответственности в вашей команде и снят много стресса для ваших разработчиков, поскольку процесс тестирования и развертывания автоматизирован.

Если ваш инструмент APM также собирает данные об ошибках, у вас будет способ найти аналогичные шаблоны ошибок. Это невероятно удобно для экономии времени и улучшения стабильности и производительности вашего приложения.

Я также рекомендую соединить ваш инструмент мониторинга с грузовой грузоподъемник Анкет Использование журналов в качестве поддержки ваших метрик APM даст вам более мелкозернистую информацию о производительности на уровне обслуживания. Подробнее об этом в следующем разделе.

Что такое управление журналами?

Управление журналом является важнейшей основой для получения надлежащего понимания вашего приложения. От поддержки APM с журналами на уровне инфраструктуры до того, как сообщать вам о жизни вашего приложения с помощью журналов уровня обслуживания, журналы поддерживают вас на каждом этапе пути. От устранения неполадок в существующих проблемах до планирования новых функций, регистрация является важным шагом в реализации любого нового кода или исправления старой ошибки.

Журналы рисуют более широкую картину, давая вашему поддержке APM, которая часто может оказаться решающей. В идеале вы всегда отправляете все журналы в одно и то же центральное место, независимо от их происхождения. Даже если они могут быть совершенно разными, такими как журналы инфраструктуры, журналы базы данных или журналы приложений, вы должны взять их в целом, поскольку все они влияют на ваших клиентов. Вы можете захватить журналы сервера с помощью Sematext Logagent Анкет

Что войдите в node.js?

Может быть ясно, почему вы должны войти в систему, но просто чтобы закрыть цикл, давайте перечислим основные причины.

Node.js Производительные журналы

Инструменты APM уже покажут производительность вашего приложения. Причина, по которой ведение журнала важна для производительности, заключается в том, чтобы получить более подробное понимание того, какие API, услуги или функции имеют высокие задержки.

Отладка node.js журналы

Когда все сломается, вам нужен способ устранения неполадок и найти проблему. Отладка, анализируя журналы и в конечном итоге проблему — это первое, что вы, скорее всего, сделаете. Вещи случаются. Это дает вам возможность увидеть, где произошла ошибка, и показать вам трассировку стека.

Отслеживание ошибок с журналами node.js

Чтобы отлаживать ошибки, вам нужно знать, что они вообще произошли. Знание того, когда они произошли и как часто они повторяются, если они были исправлены, или если они возвращаются, имеет решающее значение.

Анализ журналов Node.js

Журналы — богатые источники информации. Вы можете проанализировать журналы, чтобы обнаружить шаблоны использования для руководства решениями.

Вы можете получить информацию об уровне обслуживания с помощью журналов, которая показывает информацию о каждом запросе API, в частности. Это поможет с устранением неполадок, отладкой и отслеживанием ошибок.

Мониторинг для node.js

Позвольте мне показать вам хороший и простой способ добавления мониторинга к вашему существующему Express.js заявление. Мы начнем с простого сервера с несколькими конечными точками API. Во -первых, создайте новый каталог и назовите его Nodejs-Monitoring Анкет Откройте окно терминала, инициализируйте NPM и установите несколько модулей.

$ npm init -y
$ npm i express dotenv spm-agent-nodejs

Это все, что вам нужно, чтобы использовать инструмент APM и мониторинг вашего приложения. Теперь создайте два файла, app.js и а .env . Добавьте этот кусок кода в app.js Анкет

require('dotenv').config()
require('spm-agent-nodejs')
const express = require('express')
const app = express()

app.get('/api', (req, res, next) => {
 res.status(200).send('Api Works.')
})
app.get('/api/fast', (req, res, next) => {
 res.status(200).send('Fast response!')
})
app.get('/api/slow', (req, res, next) => {
 setTimeout(() => {
   res.status(200).send('Slow response...')
 }, 1000)
})
app.get('/api/error', (req, res, next) => {
 try {
   throw new Error('Something broke...')
 } catch (error) {
   res.status(500).send(error)
 }
})
app.listen(3000, () => 
 console.log('Server is running on port 3000'))

Agent Sematext для node.js Требуется конкретный Spm_token переменная среды для правильной работы. Вот почему мы требуем dotenv На вершине app.js Анкет Чтобы получить токен, который является местом, где ваше приложение Node.js отправит метрики, вам нужно создать Приложение для мониторинга Sematext . Откройте свой браузер, Зарегистрироваться в Sematext Cloud Если вы еще этого не сделали, и нажмите «Синий» Создать приложение мониторинга кнопка. Это приводит вас к экрану, где вы должны выбрать, какой тип приложения вы хотите контролировать.

Дайте своему приложению имя и переключите Корабль журналы Переключите также.

Нажмите «Создать», и все готово! Единственное, что сейчас скопирует spm_token.

Как только вы его скопируете, вернитесь в редактор кода. Откройте .env Файл и добавьте токен.

SPM_TOKEN=some-value-for-your-token

Вот и все! Запустите свое приложение и протестируйте конечные точки. Вы увидите, как метрики появляются в Sematext через несколько мгновений.

В приложении Sematext node.js Monitoring вы увидите предопределенный набор мониторинга, в котором показаны более 70 различных метриков Node.js APM и инфраструктуры в предварительно определенных диаграммах, сгруппированных в интуитивно организованный набор мониторинга панелей мониторинга.

Оповещение о метрик node.js

Чтобы сохранить ваше время Sematext, автоматически создает набор правил оповещения по умолчанию, такие как оповещения о низком диске. Вы можете создать дополнительные оповещения по любой метрике. Смотрите оповещения в Sematext Cloud для более подробной информации.

Когда вы создаете приложение для мониторинга, Sematext автоматически создает набор оповещений по умолчанию для того, чтобы сообщить вам о сердцебиении и низком диске. Вы можете создать Три вида оповещений .

  • Уличивания сердцебиения Уведейте вас, когда ваш сервер не работает.
  • Пороговые оповещения Уведомите вас, когда метрическое значение пересекает предопределенный порог.
  • Оповещения, основанные на обнаружении статистической аномалии Уведомите вас, когда значения метрики внезапно изменяются и отклоняются от базовой линии.

Чтобы создать предупреждение, которое вы нависаете над метрикой, и нажимаете крошечный значок колокола.

Правило оповещения применяет фильтры из текущего представления, и вы можете выбрать различные параметры уведомлений, такие как электронная почта или настроенная уведомление крючков Как слабая, толкатель и т. Д. Оповещения запускаются либо обнаружением аномалий, наблюдая за изменениями метрики в данном временном окне или с помощью классических пороговых оповещений.

Добавив один модуль, Agent Sematext для node.js У вас есть полное понимание системы с тремя различными типами оповещений и уведомлений. Вы также можете увидеть подробные показатели производительности для вашего приложения Node.js. Чего у вас нет, так это информация об уровне API и обслуживания о том, какие запросы терпят неудачу и как их устранить. Здесь вступают в игру журнал. Давайте добавим способ структуры и отправим журналы в Sematext.

Управление журналом для node.js

Добавление управления журналами немного сложнее, но ничего, с чем вы не можете справиться. Откройте Sematext Logs App Вы создали вместе с Мониторинг приложения . Это легко найти в левой стороне нав. Под Журналы Анкет Откройте руководство по интеграциям и найдите интеграцию Node.js. Скопируйте токен и добавьте его в свой .env Файл, прямо под Spm_token .

SPM_TOKEN=some-value-for-your-token
LOGS_TOKEN=some-value-for-your-token

Теперь вам нужно установить еще несколько модулей. Есть несколько, четыре, чтобы быть точными.

$ npm install morgan morgan-json winston winston-logsene

Уинстон это регистратор, который вы используете, и Уинстон-Логсен Module — это реализация грузовика Log Sematext, который беспрепятственно работает с Уинстоном. Морган это http logger, который регистрирует все http -запросы, достигающие ваших API. Morgan Json Модуль является простым форматированием для сообщения Morgan выходит.

Редакты кода незначительны, вот как должно выглядеть ваш app.js.

require('dotenv').config()
require('spm-agent-nodejs')
const express = require('express')
const app = express()
// add this part
//////////////////////////////////
const winston = require('winston')
const morgan = require('morgan')
const json = require('morgan-json')
const format = json({
 method: ':method',
 url: ':url',
 status: ':status',
 contentLength: ':res[content-length]',
 responseTime: ':response-time'
})
const Logsene = require('winston-logsene')
const logger = winston.createLogger({
 transports: [new Logsene({
   token: process.env.LOGS_TOKEN, // token
   level: 'info',
   type: 'api_logs',
   url: 'https://logsene-receiver.sematext.com/_bulk'
 })]
})
const httpLogger = morgan(format, {
 stream: {
   write: (message) => logger.info('HTTP LOG', JSON.parse(message))
 }
})
app.use(httpLogger)
/////////////////////////////////
app.get('/api', (req, res, next) => {
 logger.info('Api Works.') // added logger
 res.status(200).send('Api Works.')
})
app.get('/api/fast', (req, res, next) => {
 res.status(200).send('Fast response!')
})
app.get('/api/slow', (req, res, next) => {
 setTimeout(() => {
   res.status(200).send('Slow response...')
 }, 1000)
})
app.get('/api/error', (req, res, next) => {
 try {
   throw new Error('Something broke...')
 } catch (error) {
   logger.error(error) // added logger
   res.status(500).send(error)
 }
})
app.listen(3000, () => 
 console.log('Server is running on port 3000'))

С помощью этой настройки каждый HTTP -запрос, нажимающий на ваши API, будет зарегистрироваться и храниться в журналах Sematext. Уинстон также позволяет определить пользовательские отладки, ошибки и информационные журналы для устранения неполадок в вашем приложении.

Добавив еще 25 строк кода и добавили управление журналами в приложение Node.js. Довольно круто.

Node.js Поиск журнала и панели панели

После того, как у вас есть журналы в Sematext, вы можете искать их при устранении неполадок, сохраните запросы, которые вы часто запускаете, или создавать пользовательские панели журналов.

Поиск журналов естественен и работает так же, как вы бы искали вещи с Google.

  • Используйте И, или не Операторы: (ошибка или предупреждение) не исключение
  • Группа И, или, а не пункты с скобками : Сообщение: (исключение или ошибка или тайм -аут) и серьезность: (ошибка или предупреждение)
  • Используйте + и — к Включить и исключать : +Сообщение: Ошибка -message: Timeout -host: db1.example.com
  • Используйте Полевые ссылки : сообщение: тайм -аут
  • Используйте кавычки Чтобы найти фразы: Сообщение: «Фактальная ошибка»

Копание через журналы может быть повторяющимся процессом. Вы будете использовать те же поиски снова и снова. Чтобы избежать этого, вы можете сохранить запросы и мгновенно запустить их снова, не набирая ничего. Проверьте использование Журналы для устранения неполадок И как это делает вашу жизнь проще.

Предупреждение о журналах node.js

Чтобы создать предупреждение о журналах запустите запрос, который соответствует событиям журналов, которые вы хотите оповещать. Напишите запрос в поле поиска и нажмите на крошечный значок колокола.

Подобно настройке правил оповещения для метрик, мы можем определить пороговое значение или Оповещения обнаружения аномалий На основании количества соответствующих событий журнала, возвращает запрос предупреждения.

Проверьте руководство по предупреждениям в документах, чтобы узнать больше о Создание оповещений о журналах и метриках Анкет

Метрики Node.js и корреляция журнала

Как вы устраиваете приложения Node.js? Я склонен проверять на наличие шипов в моих метрик, а затем копать, чтобы найти основную причину проблемы. В большинстве случаев я просыпаю журналы для мелкозернистой информации, которая вызвала всплеск. Sematext делает это простым. Журналы и метрики связаны, и вы можете увидеть в той же графике, какой журнал коррелирует, с каким всплеском метрик.

Журналы также централизованы. Поиск и фильтрация их быстро пылает, а синтаксис фильтрации, который я показал выше, прост. Наличие показателей, журналов и событий на одном экране, связанных с одной и той же временной шкалой, настолько удовлетворительно и облегчает мою жизнь при устранении неполадок.

Какие метрик Node.js вы должны следить за?

Node.js основан на двигателе JavaScript от Google V8. Node.js Collection Custers Reclaims память, используемая объектами, которые больше не требуются. Коллекция мусора V8 останавливает выполнение программы.

Node.js основан на двигателе JavaScript Google Chrome V8. Как любой современный язык программирования, у него есть сбор мусора, которая восстанавливает память, используемая переменными, которые больше не нужны. Проблема с этим типом сбора мусора заключается в том, что он прекращает выполнение программы.

Ключевым выводом здесь является то, что задержка подключена к пропускной способности. Node.js является однопорядным, но имеет не блокирующие взаимодействия ввода/вывода из-за его асинхронной природы, что означает, что параллелизм может увеличиваться во время нагрузки. Высокая задержка и параллелизм увеличат использование памяти. Когда всплески использования памяти, это также увеличит активность сбора мусора, что стоит драгоценных циклов процессора.

Что касается метрик сборов мусора, вы должны сначала измерить все время, потраченное на сборку мусора. Если в деятельности по сбору мусора растет тенденция, вы можете ожидать, что использование процессора и памяти также быстро вспыхнет.

Заключительный мониторинг Node.js с Sematext

В этой статье вы узнали о концепциях мониторинга и регистрации приложения Node.js с использованием инструментов управления эффективностью приложений и управления журналами. Мы рассмотрели ключевые вещи, на которые можно обратить внимание, чтобы сохранить вашу систему здоровой, сохраняя при этом задержки как можно более низкие. Используя APM, чтобы дать вам обзор того, что происходит, и управление журналом, чтобы уступить подробности информации на уровне сервиса, вы можете получить надлежащее представление о производительности вашей системы.

Вы также узнали, как добавить Sematext APM и управление журналом в свое существующее приложение Express.js. Все, что вам нужно, это добавить 26 строк кода и несколько модулей NPM.

Мы использовали вне коробки и пользовательские панели мониторинга, метрики и корреляцию логарифма, обнаружение аномалий и оповещения. И с другими Интеграции с открытым исходным кодом Как MongoDB или Nginx, вы можете легко контролировать Node.js вместе со всеми другими технологиями в вашей инфраструктуре. При выборе инструмента для мониторинга вашего приложения убедитесь, что выберите тот, который способен дать вам полную наблюдаемость. Видеть метрики для всех систем, которые окружают ваши приложения node.js, драгоценное.

Если вам нужно решение об наблюдении для вашего программного стека, проверьте Sematext Анкет Мы стремимся к Открытый исходный код наши продукты и сделать влияние. Если вы хотите попробовать нас и отслеживать свои приложения Node.js, Зарегистрируйтесь Чтобы получить 30-дневную пробную пробную версию или сразу же выбрать бесплатный уровень.

Надеюсь, вы, ребята и девушки, любили читать это так же, как мне понравилось писать. Если вам это понравилось, пощечивайте эту крошечную кнопку обмена, чтобы все больше людей увидели этот урок. До следующего раза, будьте любопытны и повеселитесь.

Node.js мониторинг в производстве (6 серии деталей)

Оригинал: «https://dev.to/sematext/node-js-monitoring-made-easy-with-sematext-5gh»