Node.js
- Instalowanie pakietu kolektora Node.js
- Wspólne pułapki
- Zaawansowane Scenariusze Wdrażania
- Zaawansowane scenariusze budowania
- Dodatki rodzime
- Wyłączanie Kolektora Node.js Podczas Programowania
- Zmiana nazwy pakietu
- Aktualizowanie pakietu @instana/collector
- Patrz także:
Instalowanie pakietu kolektora Node.js
Uwaga: Jeśli aplikacje są uruchamiane wyłącznie w systemie Kubernetes, należy rozważyć użycie metody Instana AutoTrace WebHook .
Instalacja kolektora Instana Node.js jest prostym procesem dwuetapowym. Najpierw zainstaluj pakiet npm @instana/collector w aplikacji za pomocą:
npm install --save @instana/collector
CommonJS
Po zainstalowaniu modułu gromadzącego dane należy go aktywować z poziomu aplikacji. W tym celu należy ją i zainicjować jako pierwszą instrukcję w aplikacji. Należy zwrócić uwagę, że jest to pierwsza instrukcja , ponieważ w przeciwnym razie kolektor nie będzie mógł uzyskać dostępu do pewnych informacji.
require('@instana/collector')();
// All other require statements must be done after the collector is initialized.
// Note the () after the require statement of the collector which initializes it.
// const express = require('express');
Powyższy kod inicjuje kolektor z domyślnymi opcjami konfiguracyjnymi. Można również przekazać obiekt konfiguracyjny podczas inicjowania kolektora Instana Node.js . Lista poprawnych opcji konfiguracji znajduje się na stronie konfiguracji , a w szczególności w sekcji Komunikacja agenta , aby uzyskać szczegółowe informacje na temat konfigurowania połączenia między monitorowaną aplikacją i agentem Instana.
Moduły ECMAScript produktu 
Jeśli program @instana/collector jest instalowany jako zależność, należy aktywować kolektor dla aplikacji, ładując kolektor Instana Node.js za pomocą programu Argument --experimental-loaders. Więcej informacji na ten temat zawiera sekcja Moduły ECMAScript.
Wspólne pułapki
Niepoprawna integracja kolektora zwykle prowadzi do utraty obserwowalności. Aplikacja Node.js będzie nadal wyświetlana na Instana, ale śledzenie będzie działać tylko częściowo. Niektóre połączenia zostaną prześledzone, ale inne znikną.
Ważne: Nie wystarczy, aby instrukcja require była pierwszą instrukcją w aplikacji, a funkcja została później wyeksportowana przez require('@instana/collector') . Oznacza to, że następujące elementy nie są obsługiwane:
// WRONG!
require('@instana/collector'); // @instana/collector is not initialized
require('something');
require('another-thing');
...
i nie jest to:
// WRONG!
const instana = require('@instana/collector');
require('something');
require('another-thing');
instana(); // TOO LATE!
...
Zamiast tego funkcja eksportowana przez require('@instana/collector') musi zostać wywołana natychmiast przed wszystkimi innymi instrukcjami require lub import . Można to zrobić w jednej instrukcji, jak pokazano powyżej (zwróćmy uwagę na drugą parę nawiasów w require('@instana/collector')()) lub w dwóch następujących po sobie instrukcjach:
// Correct:
const instana = require('@instana/collector');
instana(); // this is fine
// Now all other modules can be required:
require('something');
require('another-thing');
...
W przypadku używania modułów ECMAScript (ESM) nie należy importować ani wymagać kolektora w kodzie w następujący sposób:
import instana from '@instana/collector'
instana()
import { something, else } from 'some-module';
Zamiast tego należy załadować kolektor za pomocą flagi eksperymentalnych programów ładujących.
Śledzenie z wieloma śledzeniem
Nie jest obsługiwane śledzenie pojedynczej aplikacji Node.js za pomocą Instana i programu śledzącego innej firmy, na przykład z New Relic, Dynatrace lub Datadog w tym samym czasie.
Opentelemetry
Używanie zarówno pakietu SDK OpenTelemetry , jak i kolektora Instana w tej samej aplikacji Node.js nie jest obsługiwane. Może to spowodować następujące problemy:
- Brak połączenia na Instana
- Zduplikowane dane na Instanie
- Uszkodzone instrumentacje
Nie zaleca się używania zarówno pakietu OpenTelemetry SDK, jak i kolektora Instana w tej samej aplikacji Node.js . Aby użyć pakietu Opentelemetry SDK, należy zapoznać się z sekcją Integracja z produktemNode.js OpenTelemetry.
Zaawansowane scenariusze wdrażania
Kubernetes & OpenShift
Instana AutoTrace WebHook
Uwaga: Ta metoda instalacji jest obecnie w wersji wstępnej do oceny technicznej.
Instana AutoTrace WebHook jest implementacją kontrolera WebHook Admission Controller dla systemu Kubernetes , który automatycznie konfiguruje wszystkie wymagania dotyczące uruchamiania aplikacji Node.js w całym klastrze Kubernetes .
Jeśli w klastrach Kubernetes zostanie zainstalowana opcja Instana AutoTrace WebHook , nie ma potrzeby ręcznego wykonywania żadnych kroków w celu śledzenia aplikacji Node.js działających w tych klastrach.
Uwaga: Jeśli używany jest hak WWW Instana AutoTrace i ma być używany pakiet SDK Instana Node.js , należy przejrzeć plik , korzystając z interfejsu API, a także sekcję AutoTrace WebHook .
Instalacja ręczna
Jeśli aplikacja Node.js i agent Instana działają w klastrze Kubernetes , zapoznaj się z dokumentacją na stronie Kubernetes network access , aby uzyskać informacje na temat wymaganej konfiguracji w tej konfiguracji.
Cloud Foundry
Uwaga: W tej sekcji przyjęto założenie, że agent Instana działa obecnie w komórkach Diego platformy Cloud Foundry . Bez agenta działającego w komórce Diego, monitorowanie aplikacji Cloud Foundry nie jest obsługiwane.
Informacje na temat konfigurowania agentów Instana i powiązanych z nimi funkcji Cloud Foundry lub Pivotal Platform można znaleźć w dokumentacji produktów Cloud Foundry i Pivotal Platform .
W produkcie Cloud Foundrykonfiguracja nie jest wymagana na poziomie produktu cf push i w manifeście aplikacji. Jedynym niezbędnym krokiem jest dodanie pakietu @instana/collector do aplikacji Cloud Foundry Node.js zgodnie z powyższym opisem.
Mikrobrama Apigee
Informacje na temat używania pakietu kolektora Instana Node.js z produktem Apigee Microgateway (zwanym również edgemicro) można znaleźć na stronie Apigee Microgateway .
Next.js
W przypadku aplikacji Next.js zaleca się użycie metody opisanej w sekcji Instalacja bez modyfikowania kodu źródłowego.
Instalacja bez modyfikowania kodu źródłowego
Istnieją sytuacje, w których nie można (lub nie chcesz) modyfikować kodu źródłowego monitorowanej aplikacji. W przypadku tych scenariuszy można zastosować następujące podejście. Jest to również preferowane podejście dla aplikacji zbudowanych z Webpack, Babel lub innego rodzaju bundler lub transpiler. Co więcej, jest to zalecane podejście dla aplikacji Next.js .
Istnieją dwa rodzaje tej metody:
- Instalowanie produktu
@instana/collectorjako lokalnej zależności projektu lub - instalowanie
@instana/collectorglobalnie w systemie docelowym.
Oba rodzaje są szczegółowo opisane w następujący sposób.
Instalacja Lokalna Jako Zależność
Dodaj pakiet @instana/collector do zależności projektu, uruchamiając komendę npm install -- save @instana/collector lub yarn add @instana/collector. Nie należy dodawać instrukcji require('@instana/collector')(); do kodu. W rzeczywistości żaden z plików JavaScript lub TypeScript nie musi wspominać o żadnym pakiecie @instana .
CommonJS
Ustaw zmienną środowiskową NODE_OPTIONS lub dodaj dodatkowy parametr --require podczas uruchamiania pliku wykonywalnego node .
Wykonaj jeden z następujących kroków:
Ustaw zmienną NODE_OPTIONS przed uruchomieniem procesu Node.js :
NODE_OPTIONS="--require ./node_modules/@instana/collector/src/immediate"Jeśli aplikacja jest budowana z użyciem systemu Docker, należy to zrobić, dodając następujący wiersz do pliku
Dockerfile(po ostatniej instrukcjiFROMi przed końcową instrukcjąCMDlubENTRYPOINT, która uruchamia procesnode):ENV NODE_OPTIONS="--require ./node_modules/@instana/collector/src/immediate"Uwaga: Część
src/immediatejest ważna, dlatego nie należy jej przypadkowo pomijać. Ścieżka musi rozpoczynać się od łańcucha./, aby aplikacja Node.js wiedziała, że jest to ścieżka względna, a nie identyfikator modułu. Ścieżka jest określana na podstawie bieżącego katalogu roboczego.Zamiast ustawiać zmienną NODE_OPTIONS , można dodać parametr
--requiredo komendy, która uruchamia Node.js. Jeśli zwykle aplikacja jest uruchamiana przez wykonanie czynności podobnej do następującej:node app/index.js, należy dodać dodatkowy argument wiersza komend--require. Na przykład zmień komendęnode app/index.jsna następującą:node --require ./node_modules/@instana/collector/src/immediate app/index.jsUwaga: Część
src/immediatejest istotna, dlatego należy upewnić się, że nie została przypadkowo pominięta. Ścieżka musi rozpoczynać się od łańcucha./, dlatego serwer Node.js wie, że jest to ścieżka względna, a nie identyfikator modułu. Ścieżka jest określana na podstawie bieżącego katalogu roboczego. Jeśli aplikacja została zbudowana i uruchomiona przy użyciu systemu Docker, należy odpowiednio zmodyfikować końcowy plikCMDlub plikENTRYPOINTw kataloguDockerfile.Więcej informacji na temat parametru
--requirezawiera sekcja -r, -- require module w dokumentacji Node.js .
Ustawienie zmiennej NODE_OPTIONS lub dodanie zmiennej --require w ten sposób spowoduje załadowanie i zainicjowanie kolektora Node.js przed kodem aplikacji.
Ważne jest, aby program @instana/collector został zainstalowany w systemie docelowym przez menedżera pakietów, dlatego wszystkie jego zależności również zostały poprawnie zainstalowane. Uruchomienie pliku npm install lub yarn/yarn install w innym miejscu (na przykład w systemie budowania), a następnie skopiowanie wynikowego folderu node_modules do systemu docelowego nie jest zalecane. Krok instalacji pakietu obejmuje kompilację rodzimych dodatków, które muszą zostać wykonane w architekturze docelowej i dla poprawnej wersji Node.js .
Moduły ECMAScript produktu 
Wykonaj kroki opisane w poprzedniej sekcji, ale użyj następującego argumentu zamiast argumentu --require:
--experimental-loader /path/to/instana/node_modules/@instana/collector/esm-loader.mjs
Uwagi:
- Dodano obsługę języka ECMAScript z kolektora Node.js 2.14.0.
- eksperymentalne programy ładujące są dostępne w węźle v16.
- Moduł gromadzący dane Instana Node.js zostanie zainicjowany automatycznie przez program ładujący.
Instalacja globalna
Udostępnij pakiet @instana/collector ze wszystkimi zależnościami w systemie docelowym w dobrze znanym położeniu, takim jak /path/to/instana/node_modules/@instana/collector.
Na przykład można uruchomić komendę npm install -g @instana/collector w systemie docelowym. Jeśli używana jest komenda yarn zamiast npm, uruchom komendę yarn global add zamiast komendy npm install -g. Jeśli kolektor jest instalowany w aplikacji skonteneryzowanej, można dodać tę instrukcję do pliku Dockerfile. Należy wiedzieć, gdzie komenda npm install -g umieszcza pakiet, co zależy od systemu operacyjnego. Więcej informacji na temat miejsc, w których npm umieszcza zainstalowane pakiety, zawiera dokumentacja Node.js dotycząca folderów.
CommonJS
Ustaw zmienną środowiskową NODE_OPTIONS lub dodaj dodatkowy parametr --require podczas uruchamiania pliku wykonywalnego node .
Wykonaj jeden z następujących kroków:
Ustaw zmienną NODE_OPTIONS przed uruchomieniem procesu Node.js :
NODE_OPTIONS="--require /path/to/instana/node_modules/@instana/collector/src/immediate"Wartość
/path/to/instananależy zastąpić rzeczywistą ścieżką. Jeśli aplikacja jest budowana z użyciem systemu Docker, należy to zrobić, dodając następujący wiersz do plikuDockerfile(w dowolnym miejscu po ostatniej instrukcjiFROMi przed końcową instrukcjąCMDlubENTRYPOINT, która uruchamia procesnode):ENV NODE_OPTIONS="--require /path/to/instana/node_modules/@instana/collector/src/immediate"Uwaga: Część
src/immediatejest istotna, dlatego należy upewnić się, że nie została przypadkowo pominięta. Ścieżka musi rozpoczynać się od łańcucha/lub./, aby poinformować Node.js , że jest to ścieżka bezwzględna lub względna, a nie identyfikator modułu.Zamiast ustawiania zmiennej NODE_OPTIONS można dodać parametr
--requiredo komendy, która uruchamia Node.js. Jeśli zwykle aplikacja jest uruchamiana przez wykonanie czynności podobnej do następującej:node /path/to/app/, należy dodać dodatkowy argument wiersza komend--require. Na przykład zmień komendęnode /path/to/appna następującą:node --require /path/to/instana/node_modules/@instana/collector/src/immediate /path/to/app`.Uwaga: Część
src/immediatejest istotna, dlatego należy upewnić się, że nie została przypadkowo pominięta. Ścieżka musi rozpoczynać się od łańcucha/lub./, aby poinformować Node.js , że jest to ścieżka bezwzględna lub względna, a nie identyfikator modułu. Jeśli aplikacja została zbudowana i uruchomiona przy użyciu systemu Docker, należy odpowiednio zmodyfikować końcowy plikCMDlub plikENTRYPOINTw kataloguDockerfile.Więcej informacji na temat parametru
--requirezawiera sekcja -r, -- require module w dokumentacji Node.js .
Ustawienie zmiennej NODE_OPTIONS lub dodanie zmiennej --require w ten sposób spowoduje załadowanie i zainicjowanie kolektora Node.js przed kodem aplikacji.
Ważne jest, aby program @instana/collector został zainstalowany w systemie docelowym przez menedżera pakietów, dlatego wszystkie jego zależności również zostały poprawnie zainstalowane. Instalowanie produktu @instana/collector w innym miejscu (na przykład w systemie budowania), a następnie kopiowanie pakietu do systemu docelowego nie jest zalecane. Krok npm install obejmuje kompilację rodzimych dodatków, które muszą zostać wykonane w architekturze docelowej i dla poprawnej wersji Node.js .
Moduły ECMAScript produktu 
Wykonaj kroki opisane w poprzedniej sekcji, ale użyj następującego argumentu zamiast argumentu --require:
--experimental-loader /path/to/instana/node_modules/@instana/collector/esm-loader.mjs
Uwagi:
- Eksperymentalne programy ładujące są obecnie niekompatybilne z Node.js v20.
- Dodano obsługę języka ECMAScript z kolektora Node.js 2.14.0.
- eksperymentalne programy ładujące są dostępne w węźle v16.
Zaawansowane scenariusze budowania
Pakunki (Webpack i podobne)
Preferowana metoda instalacji podczas wstępnego przetwarzania aplikacji serwera Node.js z pakunkiem, takim jak pakiet WWW lub kumulowanie, jest opisana w sekcji Instalacja bez modyfikowania kodu źródłowego.
Alternatywnie, jeśli można również zainstalować produkt @instana/collector jako normalną zależność.
W obu przypadkach należy upewnić się, że został utworzony pakunek tylko własnego kodu, a nie kodu zależności z folderu node_modules . Istnieją dwa powody takiej sytuacji:
- Moduł
@instana/collectornie obsługuje wstępnego przetwarzania z użyciem pakietu Webpack. Między innymi dynamiczne instrukcje require używane w naszym kodzie nie zostaną poprawnie rozwiązane. - Aby instrumentować biblioteki innych firm, pakiet npm
@instana/collectorprzechwytuje procesrequireśrodowiska Node.js. Jeśli jednak te biblioteki nie są ładowane w czasie wykonywania, a zamiast tego są spakowane z własnym kodem w czasie budowania, nie jest wykonywany żaden procesrequire, a instrumentacja nie jest stosowana. Śledzenie Instana nie działa lub działa częściowo w takiej konfiguracji. (Dokładne śledzenie działa tylko dla podstawowych modułów Node.js , takich jakhttp, ponieważ te moduły są domyślnie wykluczone z tworzenia pakunków).
Dlatego zaleca się skonfigurowanie pakunku w taki sposób, aby wszystkie elementy w produkcie node_modules były wykluczone ze wszystkich transformacji kodu.
Moduł webpack-node-externals umożliwia:
// your webpack.config.js:
const nodeExternals = require('webpack-node-externals');
module.exports = {
...
// externals: nodeModules,
externals: [nodeExternals()],
...
};
W przypadku korzystania z interfejsu CLI Angular, w szczególności z Angular Universal/SSR, należy dodać do pliku angular.json bibliotekę "externalDependencies": ["@instana/collector"] (i ewentualnie inne biblioteki, które są używane przez instrumenty @instana/collector ), aby wykluczyć ją z tworzenia pakunków (patrz tutaj).
Transpilery (Babel itp.)
Preferowana metoda instalacji w przypadku korzystania z transponera (takiego jak Babel, Traceur lub kompilator TypeScript tsc) jest opisana w sekcji Instalacja bez modyfikowania kodu źródłowego.
Alternatywnie można zainstalować produkt @instana/collector jako normalną zależność, ale nie jest to zalecane. Wymaga to zwrócenia szczególnej uwagi na sposób, w jaki instrukcje import i require są traktowane przez transponler. Jest to szczególnie istotne, jeśli transponler przetwarza instrukcje ES6 import . Po prostu umieszczenie czegoś takiego na początku pliku głównego nie będzie działać w takiej konfiguracji:
import instana from '@instana/collector';
// THIS WILL NOT WORK because transpilers change the order of imports and statements.
instana();
import express from 'express';
Dlaczego jest to
niemożliwe? Zgodnie ze specyfikacją ES6 wszystkie importy są wartościowane przed wykonaniem treści modułu. Program Babel i inne transponlery są zgodne z tą regułą i podczas transponowania plików źródłowych wszystkie importy są przenoszone na początek. Wszystkie faktyczne stany zostaną umieszczone po imporcie. W związku z tym import dla express w tym przykładzie zostanie umieszczony przed wywołaniem instana(); . Skończysz z czymś takim w transponowanym pliku:
var _instana = _interopRequireDefault(require("@instana/collector"));
var _express = _interopRequireDefault(require("express"));
var _morgan = _interopRequireDefault(require("morgan"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
(0, _instana.default)(); // <- This is too late, since all other modules will already have been required.
...
Jak widać, rzeczywiste wywołanie funkcji init kolektora @instana/collector jest wykonywane po tym, jak wszystkie instrukcje będą wymagane w transponowanym pliku.
Zamiast tego można zrobić coś takiego:
// Put this import at the top of your main file. Only the import here,
// don't change this to "import instana from './instanaInit'"!
import './instanaInit';
// Now all the other imports can follow:
import express from 'express';
import morgan from 'morgan';
// The following statement is optional; it is only required if you want to use
// Instana's Node.js API (https://www.ibm.com/docs/en/instana-observability/current?topic=nodejs-instana-api):
// @ts-ignore (in case you are using TypeScript, to avoid 'Could not find a declaration file for '@instana/collector')
import instana from '@instana/collector';
Plik instanaInit.js (lub instanaInit.ts , jeśli używany jest skrypt TypeScript) powinien zawierać tylko jedną instrukcję:
require('@instana/collector')();
W ten sposób funkcja init jest wywoływana natychmiast po uruchomieniu procesu.
Ogólnie rzecz biorąc, w przypadku korzystania z dowolnego transponera dobrym pomysłem jest sprawdzenie plików wyjściowych transponera podczas integrowania produktu @instana/collector.
Niektóre informacje nie są dostępne dla programów Node.js bez pomocy rodzimych dodatków. W szczególności kolektor Instana Node.js używa następujących dodatków:
- Pobieranie informacji o czyszczeniu pamięci
- Pobieranie informacji o działaniu pętli zdarzeń
- Dla profilowania
Wszystkie dodatki rodzime są zależnościami opcjonalnymi. Kolektor będzie działał poprawnie bez tych rodzimych dodatków, ale funkcje wymienione powyżej zostaną wyłączone. Jeśli brakuje którejkolwiek z tych zależności, podczas uruchamiania w dzienniku aplikacji zostanie zapisany komunikat dziennika, który ma następującą postać:
Could not load @instana/autoprofile. You will not get profiling information for this Node.js app in Instana, although
autoprofiling has been enabled. This typically occurs when native add-ons could not be built during module installation
(npm install/yarn) or when npm install --no-optional or yarn --ignore-optional have been used to install dependencies.
See the instructions to learn more about the requirements of the collector:
https://www.ibm.com/docs/de/obi/current?topic=nodejs-collector-installation#native-add-ons
Uwaga: Ten komunikat można zignorować, jeśli dodatkowe wielkości mierzone czyszczenia pamięci i pętli zdarzeń nie są odpowiednie dla użytkownika i jeśli nie jest planowane użycie funkcji Instana AutoProfile w środowisku Node.js.
Istnieją dwie możliwe przyczyny braku rodzimych dodatków:
- Instalowanie zależności z systemem
npm install --no-optionallubyarn --ignore-optional. Jeśli ta opcja jest obecna, npm/yarn nie podejmie nawet próby zainstalowania tych zależności. Aby to naprawić, należy usunąć opcję--no-optional/--ignore-optionalz kroku instalacji lub dodać jawne kroki instalacji dla omawianych zależności po krokunpm install --no-optional/yarn --ignore-optional:npm install @instana/autoprofile/yarn add @instana/autoprofilenpm install event-loop-stats/yarn add event-loop-statsnpm install gcstats.js/yarn add gcstats.js
- Kompilacja programu dodatkowego nie powiodła się w kroku
npm install/yarn. W pozostałej części tej sekcji wyjaśniono, dlaczego taka sytuacja może wystąpić i w jaki sposób można ją naprawić.
Rodzime dodatki są kompilowane automatycznie dla systemu i wersji Node.js po zainstalowaniu zależności kolektora Node.js na Instana (w ramach kroku npm install lub yarn ). Aby kompilacja działała, w systemie muszą być zainstalowane narzędzia, takie jak make, g++ i python . Narzędzia te mogą być często instalowane przy użyciu pakunku o nazwie build-essential lub podobnego (w zależności od menedżera pakietów i rejestru systemu operacyjnego). W poniższych przykładach przedstawiono sposób wykonania tej czynności dla popularnych dystrybucji systemu Linux :
# for Debian-based distributions (including Ubuntu)
apt-get install build-essential
# or, for Fedora-based distributions (CentOS, Red Hat, etc.)
yum groupinstall "Development Tools"
# or, for Alpine Linux
apk add build-base python
Ważne: Zależności muszą zostać zainstalowane na komputerze, na którym będzie uruchamiana aplikacja. W przeciwnym razie dodatki rodzime mogą być niezgodne z architekturą systemu komputera docelowego lub używaną wersją Node.js . Dlatego złą praktyką jest instalowanie zależności przez uruchomienie komendy npm install/yarn na serwerze budowania, a następnie skopiowanie aplikacji (wraz z zależnościami) na komputer docelowy.
Jeśli aplikacja Node.js jest uruchamiana w kontenerze, ten aspekt zasługuje na szczególną uwagę. Można sprawdzić dane wyjściowe budowania Docker dla błędów systemu node-gyp (patrz gyp ERR! i node-pre-gyp ERR!). Jeśli są one obecne, należy je sprawdzić i ocenić. Niektóre z nich można bezpiecznie zignorować. Na przykład niektóre pakiety mogą próbować pobrać prekompilowane pliki binarne. Jeśli to się nie powiedzie, zostaną one ponownie skompilowane za pośrednictwem komendy node-gyp , co oznacza, że błąd pobierania można zignorować, jeśli krok kompilacji zadziałał. Inne pakiety emitują wiele notatek i ostrzeżeń podczas kompilacji, które również mogą być ignorowane.
Jeśli instalacja opcjonalnej zależności kończy się łańcuchem gyp ERR! not ok, warto ją sprawdzić. Chociaż Instana nie może niestety zapewnić wsparcia dla naprawy konkretnego systemu Dockerfile, udostępniamy kilka przykładowych plików Dockerfile.
Jeśli rodzime zależności programów dodatkowych, takie jak gcstats.js i event-loop-stats , nie zostały pomyślnie zainstalowane podczas działania programu npm install, pakiet @instana/collector automatycznie podejmie próbę użycia wstępnie zbudowanych plików binarnych, które są zgodne z systemem operacyjnym, wersją Node.js i wariantem libc . Ta funkcja jest dostępna tylko w systemie x64 Linux. Można ją wyłączyć, ustawiając właściwość INSTANA_COPY_PRECOMPILED_NATIVE_ADDONS=false.
Wyłączanie Kolektora Node.js Podczas Programowania
Najprostszym sposobem wyłączenia kolektora Node.js dla programowania lokalnego jest użycie zmiennych środowiskowych. W tym celu środowisko Express spopularyzowało zmienną środowiskową NODE_ENV , której użycie jest zalecane w tym celu. Załaduj moduł gromadzący dane Node.js w następujący sposób:
if (process.env.NODE_ENV !== 'development') {
require('@instana/collector')();
}
Następnie należy uruchomić aplikację lokalnie ze zmienną NODE_ENV ustawioną na wartość development. Przykład:
export NODE_ENV=development
# -or-
NODE_ENV=development node myApp.js
Zmiana nazwy pakietu
Pakiet instana-nodejs-sensor nie jest już aktualizowany.
Uwaga: Nadal używasz nazwy pakietu instana-nodejs-sensor? Przejdź do katalogu @instana/collector.
Aktualizowanie pakietu @instana/collector
Stale ulepszamy wsparcie dla Node.js Instana i zalecamy, aby zawsze używać najnowszej dostępnej wersji pakietu @instana/collector , aby korzystać z tych ulepszeń. Dobrym zwyczajem jest aktualizowanie pakietu do jego najnowszej wersji za każdym razem, gdy tworzysz/rozszerzajesz swoją aplikację. Aktualizacja działa tak samo jak z każdym innym pakietem npm.
Po początkowym npm install --save @instana/collector (patrz powyżej) plik package.json będzie zawierał deklarację zależności, taką jak "@instana/collector": "^1.68.2". Daszek (^) oznacza zakres wersji SemVer (w tym przykładzie ^1.68.2 oznacza >= 1.68.2 && < 2.0.0). Zakresy wersji narzuca zachowanie komend npm install i npm update .
Określenie wersji jako "@instana/collector": "1.68.2" (bez kursora lub bardziej ogólnie, bez zakresu wersji) spowoduje, że ta dokładna wersja, czyli npm install i npm update zawsze będzie używać wersji 1.68.2. To NIE jest zalecane. Więcej szczegółów zawiera dokumentacja npm dotycząca zakresów wersji .
- Wykonanie komendy
npm update @instana/collectorw projekcie spowoduje zainstalowanie najnowszej wersji, która jest zgodna z zakresem wersji w plikupackage.json. Spowoduje to również zaktualizowanie łańcucha zakresu wersji w plikupackage.json. Jeśli plik blokady (package-lock.json) jest obecny, zostanie on również odpowiednio zaktualizowany. Więcej informacji na ten temat zawiera dokument npm update(Aktualizacja npm). - Wykonanie komendy
npm installw projekcie spowoduje również zainstalowanie najnowszej wersji, która jest zgodna z zakresem wersji w plikupackage.json, ale tylko wtedy, gdy- folder
node_modulesnie zawiera jeszcze wersji@instana/collector, która jest zgodna z zakresem wersji, oraz - brak pliku
package-lock.json, który blokuje wersję pakietu.
- folder
Podsumowując, jeśli budujesz aplikację na elemencie CI i za każdym razem wykonujesz nową operację npm install (folder node_modules nie jest zachowywany między operacjami budowania) oraz jeśli nie zatwierdzasz package-lock.json do kontroli wersji, uruchomienie npm install jako kroku budowania jest wystarczające do uzyskania najnowszej wersji. We wszystkich innych przypadkach (pozostawienie wartości node_modules między operacjami budowania i/lub posiadanie wartości package-lock.json w kontroli wersji) zaleca się uruchomienie komendy npm update @instana/collector w ramach procesu budowania.
W przypadku użycia języka yarn zamiast języka npmnależy zapoznać się z dokumentacją narzędzia yarn, w szczególności z dokumentacją narzędzia yarn update , aby uzyskać szczegółowe informacje, ale zasadniczo rekomendacje i procedury są takie same.