Node.js: различия между версиями

Материал из Документация Ключ-АСТРОМ
 
(не показаны 3 промежуточные версии 3 участников)
Строка 1: Строка 1:
Node.js - это серверный фреймворк, основанный на движке JavaScript V8 от Google. Node.js имеет асинхронную модель выполнения и часто используется для склейки или в качестве уровня прокси в корпоративных средах.
'''''[[Поддержка технологий]] / Node.js'''''
 
[https://nodejs.org/en Node.js] - это серверный фреймворк, основанный на движке [https://v8.dev/ JavaScript V8] от Google. Node.js имеет асинхронную модель выполнения и часто используется для склейки или в качестве уровня прокси в корпоративных средах.


== Возможности            ==
== Возможности            ==
Dynatrace предоставляет обширные возможности мониторинга Node.js:
Ключ-Астром предоставляет обширные возможности мониторинга Node.js:
* Куча и метрики процесса
* Метрики процесса
* Heap dumps
* Heap dumps
*Выборка процессора (см. Известные ограничения)
*Выборка процессора (см. Известные ограничения)
Строка 9: Строка 11:
* Анализ входящих и исходящих HTTP-вызовов
* Анализ входящих и исходящих HTTP-вызовов
*Выделенная поддержка для множества баз данных (включая захват запросов)
*Выделенная поддержка для множества баз данных (включая захват запросов)
*Захват следов OpenTelemetry
*Захват трассировок '''OpenTelemetry'''
*OneAgent SDK для пользовательской трассировки
*ЕдиныйАгент '''SDK''' для пользовательской трассировки
См. Нашу матрицу поддерживаемых технологий для получения подробной информации о поддерживаемых технологиях, которые будут использоваться вместе с Node.js.
См. Нашу матрицу поддерживаемых технологий для получения подробной информации о поддерживаемых технологиях, которые будут использоваться вместе с '''Node.js'''.


== Поддержка и отказ от поддержки            ==
== Поддержка и отказ от поддержки            ==
Node.js следует модели выпуска LTS.
'''Node.js''' следует модели выпуска '''LTS'''.


Каждая версия с нечетным номером достигает EOL вскоре после выпуска каждой новой версии с четным номером. Каждая четная версия в конечном итоге становится LTS-выпуском. Для корпоративных производственных сред мы рекомендуем придерживаться выпусков LTS.
Каждая версия с нечетным номером достигает '''EOL''' вскоре после выпуска каждой новой версии с четным номером. Каждая четная версия в конечном итоге становится '''LTS'''-выпуском. Для корпоративных производственных сред мы рекомендуем придерживаться выпусков '''LTS'''.


Каждый раз, когда выпускается новая основная версия Node.js (четная или нечетная), мы добавляем поддержку этой версии.
Каждый раз, когда выпускается новая основная версия '''Node.js''' (четная или нечетная), мы добавляем поддержку этой версии.


Dynatrace будет следовать этой модели поддержки, но будет поддерживать каждую версию Node.js как минимум на полгода дольше, чтобы у наших клиентов было время для обновлений.
Ключ-Астром будет следовать этой модели поддержки, но будет поддерживать каждую версию '''Node.js''' как минимум на полгода дольше, чтобы у наших клиентов было время для обновлений.
{| class="wikitable"
{| class="wikitable"
!Node.js version
!Node.js version
!Vendor released
!Выпущено вендором
!Vendor End of life
!Конец поддержки вендором
!Supported by Dynatrace until
!Первая поддерживаемая версия ЕдиногоАгена
!First supported Dynatrace OneAgent version
!Последняя поддерживаемая версия ЕдиногоАгента
!Last supported Dynatrace OneAgent version
!Поддержка Ключ-Астром до
!Уровень поддержки Ключ-Астром
|-
|23
|2024-10-16
|2025-06-01
|1.305
| -
|2025-12-01
|Поддерживается <sup>1</sup>
|-
|22
|2024-04-23
|2027-04-30
|1.295
| -
|2028-04-30
|Поддерживается <sup>1</sup>
|-
|21
|2023-10-17
|2024-06-01
|1.281
|1.303
|2024-12-01
|Не поддерживается
|-
|20
|2023-04-18
|2026-04-30
|1.271
| -
|2027-04-30
|Поддерживается <sup>1</sup>
|-
|19
|2022-10-18
|2023-06-01
|1.257
|1.285
|2023-12-01
|Не поддерживается
|-
|18
|2022-04-19
|2025-04-30
|1.243
| -
|2026-04-30
|Поддерживается <sup>2</sup>
|-
|17
|2021-10-19
|2022-06-01
|1.235
| -
|2022-12-01
|Не поддерживается
|-
|-
|16
|16
|2021/04/20
|2021-04-20
|2024/04/30
|2024-04-30
|2025/04/30
|1.219
|1.219
|
| -
|2025-04-30
|Ограничено <sup>3</sup>
|-
|-
|15
|15
|2020/10/20
|2020-10-20
|2021/06/01
|2021-06-01
|2021/12/01
|1.207
|1.207
|
|1.233
|2021-12-01
|Не поддерживается
|-
|-
|14
|14
|2020/04/21
|2020-04-21
|2023/04/30
|2023-04-30
|2024/04/30
|1.195
|1.195
|
| -
|2024-04-30
|Ограничено <sup>3</sup>
|-
|-
|13
|13
|2019/10/22
|2019-10-22
|2020/06/01
|2020-06-01
|2020/12/01
|1.183
|1.183
|1.205
|1.205
|2020-12-01
|Не поддерживается
|-
|-
|12
|12
|2019/04/23
|2019-04-23
|2022/04/30
|2022-04-30
|2023/04/30
|1.171
|1.171
|
| -
|2023-04-30
|Ограничено <sup>3</sup>
|-
|-
|11
|11
|2018/10/23
|2018-10-23
|2019/06/30
|2019-06-30
|2019/12/31
|1.159
|
|1.181
|1.181
|2019-12-31
|Не поддерживается
|-
|-
|10
|10
|2015/04/24
|2015-04-24
|2021/04/30
|2021-04-30
|2022/04/30
|1.147
|
| -
|
|2022-04-30
|Устарело <sup>4</sup>
|-
|-
|9
|9
|2017/10/01
|2017-10-01
|2018/06/30
|2018-06-30
|2018/12/31
| -
|
|1.157
|1.157
|2018-12-31
|Не поддерживается
|-
|-
|8
|8
|2017/05/30
|2017-05-30
|2019/12/31
|2019-12-31
|2020/12/31
| -
|
|1.239
|
|2020-12-31
|Не поддерживается
|}
<sup>1</sup> Веб-потоки, клиент WebSocket и функции, помеченные как «экспериментальные», не поддерживаются.
 
<sup>2</sup> Для поддержки архитектуры ЦП s390x требуется ЕдиныйАгент версии 1.271+.
 
<sup>3</sup> Ограниченная поддержка: Ключ-АСТРОМ может решить только те проблемы, которые можно воспроизвести в поддерживаемых версиях.
 
<sup>4</sup> Устарело: инструментирование отключено по умолчанию в ЕдиныйАгент версии 1.321 и выше. Для включения инструментария определите переменную среды <code>DT_SUPPORT_DEPRECATED_NODE_VERSIONS</code>.
 
== Непрерывный анализ для рабочих потоков ==
<code>Node.js версии 12+</code> <code>ЕдиныйАгент версии 1.251+</code> <code>Ключ-АСТРОМ версии 1.256+</code>
 
Непрерывный анализ [https://nodejs.org/api/worker_threads.html#worker-thread рабочих потоков] позволяет автоматически определять потоки с высокой загрузкой процессора и точно определять проблемы масштабируемости, когда работа распределена между несколькими потоками. Это позволяет устранить узкие места производительности до того, как это повлияет на конечных пользователей.
 
Чтобы начать непрерывный анализ рабочих потоков, активируйте функции ЕдиногоАгента: мониторинг рабочих потоков '''Node.js''' и предварительную загрузку модуля кода '''Node.js'''.
{| class="wikitable"
|-
|-
|7
|<u>Ограничения</u>
|2015/10/25
 
|2016/07/30
Метрики, специфичные для Node.js (например, память, сборка мусора и циклы событий), сообщаются только для потока <code>main</code>.
|2017/11/30
 
|
Просмотр классов (необходимый для пользовательских служб обмена сообщениями '''kafkajs''') ограничен потоком <code>main</code>.
|1.131
|-
|6
|2016/04/26
|2019/04/30
|2019/10/31
|
|1.179
|-
|5
|2015/10/29
|2016/06/30
|2017/10/31
|
|1.129
|-
|4
|2015/09/08
|2018/04/30
|2018/12/31
|
|1.157
|-
|0.12
|2015/02/06
|2016/12/31
|2017/10/31
|
|1.129
|-
|0.10
|2013/03/01
|
|2017/10/31
|
|1.129
|}
|}
Автоматическая трассировка <code>main</code> транзакций между потоками и не реализована <code>worker</code>. Для трассировки транзакций между потоками можно использовать трассировку OpenTelemetry или ЕдиныйАгент SDK.


== Известные ограничения            ==
== Известные ограничения            ==


*Из-за ограничений платформы JavaScript и Node.js видимость на уровне кода ограничена по сравнению с .NET или Java.
* Из-за ограничений платформы '''JavaScript''' и '''Node.js''' видимость на уровне кода ограничена по сравнению с '''.NET''' или '''Java'''.
* В сочетании с неподдерживаемыми сторонними модулями контекст может быть потерян в асинхронных обратных вызовах. В таких случаях свяжитесь со специалистом по продукту Dynatrace ONE, нажав кнопку чата в правом верхнем углу строки меню Dynatrace.
* В сочетании с неподдерживаемыми сторонними модулями контекст может быть потерян в асинхронных обратных вызовах. В таких случаях обратитесь к эксперту по продукту Ключ-АСТРОМ через онлайн-чат в вашей среде Ключ-АСТРОМ.
*Использование модуля NPM esm в варианте 1 для пакетов может привести к снижению видимости (особенно, если он используется для основного сценария приложения). Предпочтительно использовать вариант 2 для предварительной загрузки esm с помощью параметра командной строки -r.
* <code>ЕдиныйАгент версии 1.279+</code> Время ЦП для сервисов '''Node.js''' не указывается. Эти цифры вводили в заблуждение, поскольку по умолчанию большая часть любой операции выполняется асинхронно внутри среды выполнения '''Node.js''', без возможности соотнести фактическое время ЦП с конкретным сервисом.
*В настоящее время существует только ограниченная поддержка модулей ECMAScript (также известных как «модули ES6»):
* Использование модуля [https://github.com/standard-things/esm NPM esm] в [https://github.com/standard-things/esm/tree/3.2.25#getting-started варианте 1] для пакетов может привести к снижению видимости (особенно при использовании для основного скрипта приложения). Предпочтительнее использовать вариант 2 для предварительной загрузки <code>esm</code> через командную строку <code>-r</code>.
**Если сам основной файл сценария является модулем ECMAScript, OneAgent версии 1.219+ с включенной предварительной загрузкой агента необходим для внедрения OneAgent в процесс Node.js.
* В настоящее время существует только ограниченная поддержка модулей [https://nodejs.org/api/esm.html ECMAScript] (также известных как «модули ES6»):
** Инструментарий модулей ECMAScript в настоящее время недоступен. Это ограничивает поддержку kafkajs в случае, если пользовательская точка входа для датчика KafkaJs находится внутри модуля ECMAScript.
** Если основной файл скрипта представляет собой модуль '''ECMAScript''', то для внедрения ЕдиногоАгента в процесс '''Node.js''' необходим ЕдиныйАгент версии 1.219+ с включенной предварительной загрузкой агента.
* По умолчанию '''Webpack''' объединяет все модули в один файл. OneAgent не может инструментировать связанные модули. Чтобы обойти это ограничение, все модули, которые необходимо инструментировать с помощью OneAgent (например, express, mongodb, pg,…), должны быть экстернализованы в конфигурации webpack. Подробности см. В документации Webpack Externals.
** Инструментирование модулей '''ECMAScript''' в настоящее время недоступно. Это ограничивает поддержку <code>kafkajs</code> в случае, если пользовательская точка входа для датчика '''KafkaJs''' находится внутри модуля '''ECMAScript'''.
* Ограничения внешней выборки для определенных версий OneAgent: Google V8 подвержен ряду проблем с памятью и нагрузкой на ЦП, что препятствует фоновому профилированию ЦП на производственном уровне:
* По умолчанию '''Webpack''' объединяет все модули в один файл. ЕдиныйАгент не может инструментировать связанные модули. Чтобы обойти это ограничение, все модули, которые необходимо инструментировать с помощью ЕдиногоАгента (например, <code>express</code>, <code>mongodb</code> и <code>pg</code>), необходимо вынести в конфигурацию '''Webpack''' как внешние. Подробнее см. в документации по внешним [https://webpack.js.org/configuration/externals/ модулям Webpack].
** утечка памяти
* Использование '''Webpack''' или других сборщиков пакетов также может повлиять на автоматическое обнаружение уязвимостей. Это связано с тем, что компоненты программного обеспечения не могут быть обнаружены, поскольку они скрыты за конфигурацией сборщика пакетов и недоступны во время выполнения. Обнаружение и составление отчётов возможны только для пакетов, развёрнутых как внешние.
**чрезмерное пиковое потребление памяти
**чрезмерная нагрузка на ЦП в системах Windows Таким образом, профилирование ЦП (окружающая выборка) не включено по умолчанию для всех версий OneAgent:
** Внешняя выборка включена по умолчанию в OneAgent версии 1.181. В OneAgent версии 1.181 вышеупомянутые ограничения были устранены за счет отказа от использования v8 CpuProfiler для внешней выборки. Ambient Sampling полностью доступен на всех поддерживаемых платформах и во всех поддерживаемых версиях Node.js без каких-либо ограничений.
**Внешняя выборка отключена по умолчанию для OneAgent версий от 1.157 до 1.179. В Linux внешняя выборка может быть включена для следующих версий Node.js:
*** Node.js version 6
*** Node.js versions ^8.9.4 (8.9.4 <= node.js < 9.0.0)
*** Node.js version 9.3.0 or later  On ''Windows'' ambient sampling is disabled for these OneAgent versions, because it would cause 100% CPU usage for one CPU. OneAgent records a log entry for each unsupported version it detects:  <code>AmbientSampling: <unsupported platform> / <node version></code>


== Further reading            ==
== Журналы процессов с помощью анализаторов технологических пакетов ==
Через '''OpenPipeline''' можно использовать и настраивать технологические пакеты. Технологический пакет — это библиотека парсеров (правил обработки), которые обрабатывают журналы различных технологий, таких как '''Java''', '''.NET''', '''Microsoft IIS''' и т. д.


* How do I monitor Cloud Foundry applications?
Парсеры помогают улучшить фильтрацию, устранение неполадок, метрики, оповещения и панели мониторинга, эффективно извлекая уровни журналов и соответствующие атрибуты. Вы также можете использовать пакеты технологий для структурирования журналов, созданных с использованием технологий, которые не поддерживаются Ключ-АСТРОМ изначально.
* Blog: Understanding Garbage Collection and hunting Memory Leaks in Node.js
[[Файл:Image4080.png|граница]]
* Blog: How to track down CPU issues in Node.js
* Blog: All you need to know to really understand the Node.js Event Loop and its Metrics

Текущая версия на 14:29, 11 ноября 2025

Поддержка технологий / Node.js

Node.js - это серверный фреймворк, основанный на движке JavaScript V8 от Google. Node.js имеет асинхронную модель выполнения и часто используется для склейки или в качестве уровня прокси в корпоративных средах.

Возможности

Ключ-Астром предоставляет обширные возможности мониторинга Node.js:

  • Метрики процесса
  • Heap dumps
  • Выборка процессора (см. Известные ограничения)
  • Показатели цикла событий
  • Анализ входящих и исходящих HTTP-вызовов
  • Выделенная поддержка для множества баз данных (включая захват запросов)
  • Захват трассировок OpenTelemetry
  • ЕдиныйАгент SDK для пользовательской трассировки

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

Поддержка и отказ от поддержки

Node.js следует модели выпуска LTS.

Каждая версия с нечетным номером достигает EOL вскоре после выпуска каждой новой версии с четным номером. Каждая четная версия в конечном итоге становится LTS-выпуском. Для корпоративных производственных сред мы рекомендуем придерживаться выпусков LTS.

Каждый раз, когда выпускается новая основная версия Node.js (четная или нечетная), мы добавляем поддержку этой версии.

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

Node.js version Выпущено вендором Конец поддержки вендором Первая поддерживаемая версия ЕдиногоАгена Последняя поддерживаемая версия ЕдиногоАгента Поддержка Ключ-Астром до Уровень поддержки Ключ-Астром
23 2024-10-16 2025-06-01 1.305 - 2025-12-01 Поддерживается 1
22 2024-04-23 2027-04-30 1.295 - 2028-04-30 Поддерживается 1
21 2023-10-17 2024-06-01 1.281 1.303 2024-12-01 Не поддерживается
20 2023-04-18 2026-04-30 1.271 - 2027-04-30 Поддерживается 1
19 2022-10-18 2023-06-01 1.257 1.285 2023-12-01 Не поддерживается
18 2022-04-19 2025-04-30 1.243 - 2026-04-30 Поддерживается 2
17 2021-10-19 2022-06-01 1.235 - 2022-12-01 Не поддерживается
16 2021-04-20 2024-04-30 1.219 - 2025-04-30 Ограничено 3
15 2020-10-20 2021-06-01 1.207 1.233 2021-12-01 Не поддерживается
14 2020-04-21 2023-04-30 1.195 - 2024-04-30 Ограничено 3
13 2019-10-22 2020-06-01 1.183 1.205 2020-12-01 Не поддерживается
12 2019-04-23 2022-04-30 1.171 - 2023-04-30 Ограничено 3
11 2018-10-23 2019-06-30 1.159 1.181 2019-12-31 Не поддерживается
10 2015-04-24 2021-04-30 1.147 - 2022-04-30 Устарело 4
9 2017-10-01 2018-06-30 - 1.157 2018-12-31 Не поддерживается
8 2017-05-30 2019-12-31 - 1.239 2020-12-31 Не поддерживается

1 Веб-потоки, клиент WebSocket и функции, помеченные как «экспериментальные», не поддерживаются.

2 Для поддержки архитектуры ЦП s390x требуется ЕдиныйАгент версии 1.271+.

3 Ограниченная поддержка: Ключ-АСТРОМ может решить только те проблемы, которые можно воспроизвести в поддерживаемых версиях.

4 Устарело: инструментирование отключено по умолчанию в ЕдиныйАгент версии 1.321 и выше. Для включения инструментария определите переменную среды DT_SUPPORT_DEPRECATED_NODE_VERSIONS.

Непрерывный анализ для рабочих потоков

Node.js версии 12+ ЕдиныйАгент версии 1.251+ Ключ-АСТРОМ версии 1.256+

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

Чтобы начать непрерывный анализ рабочих потоков, активируйте функции ЕдиногоАгента: мониторинг рабочих потоков Node.js и предварительную загрузку модуля кода Node.js.

Ограничения

Метрики, специфичные для Node.js (например, память, сборка мусора и циклы событий), сообщаются только для потока main.

Просмотр классов (необходимый для пользовательских служб обмена сообщениями kafkajs) ограничен потоком main.

Автоматическая трассировка main транзакций между потоками и не реализована worker. Для трассировки транзакций между потоками можно использовать трассировку OpenTelemetry или ЕдиныйАгент SDK.

Известные ограничения

  • Из-за ограничений платформы JavaScript и Node.js видимость на уровне кода ограничена по сравнению с .NET или Java.
  • В сочетании с неподдерживаемыми сторонними модулями контекст может быть потерян в асинхронных обратных вызовах. В таких случаях обратитесь к эксперту по продукту Ключ-АСТРОМ через онлайн-чат в вашей среде Ключ-АСТРОМ.
  • ЕдиныйАгент версии 1.279+ Время ЦП для сервисов Node.js не указывается. Эти цифры вводили в заблуждение, поскольку по умолчанию большая часть любой операции выполняется асинхронно внутри среды выполнения Node.js, без возможности соотнести фактическое время ЦП с конкретным сервисом.
  • Использование модуля NPM esm в варианте 1 для пакетов может привести к снижению видимости (особенно при использовании для основного скрипта приложения). Предпочтительнее использовать вариант 2 для предварительной загрузки esm через командную строку -r.
  • В настоящее время существует только ограниченная поддержка модулей ECMAScript (также известных как «модули ES6»):
    • Если основной файл скрипта представляет собой модуль ECMAScript, то для внедрения ЕдиногоАгента в процесс Node.js необходим ЕдиныйАгент версии 1.219+ с включенной предварительной загрузкой агента.
    • Инструментирование модулей ECMAScript в настоящее время недоступно. Это ограничивает поддержку kafkajs в случае, если пользовательская точка входа для датчика KafkaJs находится внутри модуля ECMAScript.
  • По умолчанию Webpack объединяет все модули в один файл. ЕдиныйАгент не может инструментировать связанные модули. Чтобы обойти это ограничение, все модули, которые необходимо инструментировать с помощью ЕдиногоАгента (например, express, mongodb и pg), необходимо вынести в конфигурацию Webpack как внешние. Подробнее см. в документации по внешним модулям Webpack.
  • Использование Webpack или других сборщиков пакетов также может повлиять на автоматическое обнаружение уязвимостей. Это связано с тем, что компоненты программного обеспечения не могут быть обнаружены, поскольку они скрыты за конфигурацией сборщика пакетов и недоступны во время выполнения. Обнаружение и составление отчётов возможны только для пакетов, развёрнутых как внешние.

Журналы процессов с помощью анализаторов технологических пакетов

Через OpenPipeline можно использовать и настраивать технологические пакеты. Технологический пакет — это библиотека парсеров (правил обработки), которые обрабатывают журналы различных технологий, таких как Java, .NET, Microsoft IIS и т. д.

Парсеры помогают улучшить фильтрацию, устранение неполадок, метрики, оповещения и панели мониторинга, эффективно извлекая уровни журналов и соответствующие атрибуты. Вы также можете использовать пакеты технологий для структурирования журналов, созданных с использованием технологий, которые не поддерживаются Ключ-АСТРОМ изначально. Image4080.png