Überwachen Ihrer Node.js-Dienste und -Apps mit Application Insights
Application Insights überwachte Ihre Komponenten nach der Bereitstellung, um Leistungsprobleme und andere Probleme zu erkennen. Sie können Application Insights für Node.js-Dienste verwenden, die in Ihrem Rechenzentrum, auf virtuellen Azure-Computern, in Web-Apps und sogar in anderen öffentlichen Clouds gehostet werden.
Um Ihre Überwachungsdaten zu erhalten, zu speichern und zu durchsuchen, beziehen Sie das SDK in den Code ein. Richten Sie anschließend eine entsprechende Application Insights-Ressource in Azure ein. Das SDK sendet Daten zur weiteren Analyse und Untersuchung an diese Ressource.
Die Node.js-Clientbibliothek kann ein- und ausgehende HTTP-Anforderungen, Ausnahmen und einige Systemmetriken automatisch überwachen. Ab Version 0.20 kann die Clientbibliothek auch einige allgemeine Drittanbieterpakete überwachen, z. B. MongoDB, MySQL und Redis.
Alle Ereignisse, die sich auf eine eingehende HTTP-Anforderung beziehen, werden zur Beschleunigung der Problembehandlung korreliert.
Sie können die TelemetryClient-API verwenden, um weitere Aspekte Ihrer App und Ihres Systems manuell zu instrumentieren und zu überwachen. Die TelemetryClient-API wird weiter unten in diesem Artikel näher beschrieben.
Achtung
Wir empfehlen die Azure Monitor OpenTelemetry Distro für neue Anwendungen oder Kunden, um Azure Monitor Application Insights zu betreiben. Die Azure Monitor OpenTelemetry Distro bietet eine ähnliche Funktionalität und Benutzererfahrung wie das Application Insights SDK. Es ist möglich, mithilfe der Migrationsleitfäden für .NET, Node.js und Python vom Application Insights SDK zu migrieren, wir arbeiten jedoch an der Integration zusätzlicher Funktionen für die Abwärtskompatibilität.
Erste Schritte
Führen Sie die folgenden Aufgaben durch, um die Überwachung für eine App oder einen Dienst einzurichten.
Voraussetzungen
Stellen Sie zuerst sicher, dass Sie über ein Azure-Abonnement verfügen, oder beschaffen Sie sich kostenlos ein neues Abonnement. Falls Ihre Organisation bereits über ein Azure-Abonnement verfügt, kann Ihr Administrator Sie anhand dieser Anleitung hinzufügen.
Einrichten einer Application Insights-Ressource
- Melden Sie sich beim Azure-Portal an.
- Erstellen Sie eine Application Insights-Ressource.
Hinweis
Am 31. März 2025 wird der Support für die auf Instrumentierungsschlüsseln basierende Erfassung eingestellt. Die Erfassung von Instrumentierungsschlüsseln funktioniert zwar weiterhin, wir stellen jedoch keine Updates und keinen Support mehr für das Feature bereit. Wechseln Sie zu Verbindungszeichenfolgen, damit Sie neue Funktionen nutzen können.
Einrichten der Node.js-Clientbibliothek
Beziehen Sie das SDK in Ihre App ein, damit sie Daten sammeln kann.
Kopieren Sie die Verbindungszeichenfolge Ihrer Ressource aus der neuen Ressource. Die Verbindungszeichenfolge wird von Application Insights verwendet, um Ihrer Azure-Ressource Daten zuzuordnen. Damit die Verbindungszeichenfolge vom SDK verwendet werden kann, müssen Sie die Verbindungszeichenfolge in einer Umgebungsvariablen oder im Code angeben.
Fügen Sie die Node.js-Clientbibliothek per
package.json
den Abhängigkeiten Ihrer App hinzu. Führen Sie im Stammordner Ihrer App Folgendes aus:npm install applicationinsights --save
Hinweis
Installieren Sie bei Verwendung von TypeScript keine separaten Pakete mit Typisierungen. Dieses npm-Paket enthält integrierte Typisierungen.
Laden Sie die Bibliothek explizit im Code. Da das SDK die Instrumentierung auch in viele andere Bibliotheken einbettet, sollten Sie die Bibliothek so früh wie möglich laden – noch vor anderen
require
-Anweisungen.let appInsights = require('applicationinsights');
Sie können eine Verbindungszeichenfolge auch über die Umgebungsvariable
APPLICATIONINSIGHTS_CONNECTION_STRING
bereitstellen, anstatt sie manuell ansetup()
odernew appInsights.TelemetryClient()
zu übergeben. Mit dieser Vorgehensweise können Sie Verbindungszeichenfolgen aus festgelegtem Quellcode heraushalten und unterschiedliche Verbindungszeichenfolgen für unterschiedliche Umgebungen angeben. Rufen SieappInsights.setup('[your connection string]');
auf, um die Konfiguration manuell durchzuführen.Weitere Konfigurationsoptionen finden Sie in den folgenden Abschnitten.
Sie können das SDK auch ohne das Senden von Telemetriedaten testen, indem Sie
appInsights.defaultClient.config.disableAppInsights = true
festlegen.Rufen Sie
appInsights.start();
auf, um mit dem automatischen Sammeln und Senden von Daten zu beginnen.
Hinweis
Im Rahmen der Verwendung der Application Insights-Instrumentierung sammeln und senden wir Diagnosedaten an Microsoft. Diese Daten helfen uns, Application Insights auszuführen und zu verbessern. Sie haben die Möglichkeit, die Sammlung nicht wesentlicher Daten zu deaktivieren. Weitere Informationen.
Überwachen Ihrer App
Das SDK sammelt automatisch Telemetriedaten zur Node.js-Laufzeit und zu einigen gängigen Drittanbietermodulen. Verwenden Sie Ihre Anwendung, um einige dieser Daten zu generieren.
Navigieren Sie im Azure-Portal dann zu der zuvor erstellten Application Insights-Ressource. Suchen Sie in der Übersichtszeitachse nach Ihren ersten Datenpunkten. Wählen Sie in den Diagrammen verschiedene Komponenten aus, um detailliertere Daten anzuzeigen.
Sie können die Topologie, die für Ihre App ermittelt wird, über die Anwendungsübersicht anzeigen.
Keine Daten
Da das SDK Daten zur Übermittlung in Batches zusammenfasst, kann es ggf. eine Weile dauern, bis die Elemente im Portal angezeigt werden. Falls in Ihrer Ressource keine Daten angezeigt werden, können Sie folgende Lösungsmöglichkeiten ausprobieren:
- Fahren Sie mit der Verwendung der Anwendung fort. Führen Sie mehr Aktionen durch, um mehr Telemetriedaten zu generieren.
- Wählen Sie in der Ressourcenansicht des Portals Aktualisieren aus. Diagramme aktualisieren sich regelmäßig selbst, aber bei der manuellen Aktualisierung wird der Vorgang sofort erzwungen.
- Stellen Sie sicher, dass die erforderlichen ausgehenden Ports geöffnet sind.
- Verwenden Sie Suchen, um nach bestimmten Ereignissen zu suchen.
- Lesen Sie die häufig gestellten Fragen.
Grundlegende Verwendung
Für die sofort einsetzbare Sammlung von HTTP-Anforderungen, Ereignissen von beliebten Drittanbieterbibliotheken, nicht behandelten Ausnahmen und Systemmetriken:
let appInsights = require("applicationinsights");
appInsights.setup("[your connection string]").start();
Hinweis
Ist die Verbindungszeichenfolge in der Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING
festgelegt, kann .setup()
ohne Argumente aufgerufen werden. Dies erleichtert die Verwendung verschiedener Verbindungszeichenfolgen für unterschiedliche Umgebungen.
Laden Sie noch vor anderen Paketen die Application Insights-Bibliothek (require("applicationinsights")
) so früh wie möglich in Ihre Skripts. Dieser Schritt ist erforderlich, damit die Application Insights-Bibliothek spätere Pakete für die Nachverfolgung vorbereiten kann. Treten Konflikte mit anderen Bibliotheken auf, die eine ähnliche Vorbereitung durchführen, laden Sie die Application Insights-Bibliothek danach.
Aufgrund der Art und Weise, wie JavaScript Rückrufe verarbeitet, sind für die Verfolgung einer Anforderung über mehrere externe Abhängigkeiten und spätere Rückrufe hinweg weitere Arbeitsschritte erforderlich. Standardmäßig ist diese zusätzliche Nachverfolgung aktiviert. Deaktivieren Sie sie, indem Sie setAutoDependencyCorrelation(false)
aufrufen, wie im Abschnitt SDK-Konfiguration beschrieben.
Migrieren von Versionen vor Version 0.22
Mit Version 0.22 wurden wichtige Änderungen eingeführt. Mit diesen Änderungen wurde die Konsistenz mit anderen Application Insights SDKs erhöht, und künftige Erweiterungen wurden ermöglicht.
Im Allgemeinen können Sie die Migration mit folgenden Aktionen durchführen:
- Ersetzen Sie Verweise auf
appInsights.client
durchappInsights.defaultClient
. - Ersetzen Sie Verweise auf
appInsights.getClient()
durchnew appInsights.TelemetryClient()
. - Ersetzen Sie alle Argumente für „client.track*“-Methoden durch ein einzelnes Objekt, das als Argumente benannte Eigenschaften enthält. Das erwartete Objekt der einzelnen Telemetrietypen finden Sie in den integrierten Typhinweisen Ihrer IDE oder unter TelemetryTypes.
Wenn Sie ohne Verkettung mit appInsights.setup()
auf die SDK-Konfigurationsfunktionen zugreifen, befinden sich diese Funktionen jetzt unter appInsights.Configurations
. z. B. appInsights.Configuration.setAutoCollectDependencies(true)
. Informationen zu Änderungen an der Standardkonfiguration finden Sie im nächsten Abschnitt.
SDK-Konfiguration
Das appInsights
-Objekt stellt eine Vielzahl von Konfigurationsmethoden bereit. Diese werden im folgenden Codeausschnitt mit den jeweiligen Standardwerten aufgelistet.
let appInsights = require("applicationinsights");
appInsights.setup("<connection_string>")
.setAutoDependencyCorrelation(true)
.setAutoCollectRequests(true)
.setAutoCollectPerformance(true, true)
.setAutoCollectExceptions(true)
.setAutoCollectDependencies(true)
.setAutoCollectConsole(true)
.setUseDiskRetryCaching(true)
.setSendLiveMetrics(false)
.setDistributedTracingMode(appInsights.DistributedTracingModes.AI)
.start();
Legen Sie .setAutoDependencyCorrelation(true)
fest, um die Ereignisse für einen Dienst vollständig zu korrelieren. Wenn diese Option festgelegt ist, kann das SDK den Kontext übergreifend für asynchrone Rückrufe in Node.js nachverfolgen.
Ausführliche Informationen zu den Methoden und optionalen sekundären Argumenten finden Sie in den Beschreibungen der integrierten Typhinweise Ihrer IDE oder unter applicationinsights.ts.
Hinweis
Mit der Standardkonfiguration von setAutoCollectConsole
werden Aufrufe von console.log
(sowie anderer Konsolenmethoden) ausgeschlossen. Es werden nur Aufrufe von unterstützten Protokollierungen von Drittanbietern (wie Winston und Bunyan) gesammelt. Mit setAutoCollectConsole(true, true)
können Sie dieses Verhalten ändern, um künftig Aufrufe von console
-Methoden einzuschließen.
Stichproben
Standardmäßig sendet das SDK alle gesammelten Daten an den Application Insights-Dienst. Wenn Sie die Stichprobenentnahme aktivieren möchten, um die Datenmenge zu reduzieren, legen Sie das samplingPercentage
-Feld für das config
-Objekt eines Clients fest. Wenn Sie dabei samplingPercentage
auf „100“ festlegen (Standardeinstellung), werden alle Daten gesendet. Bei „0“ werden keine Daten gesendet.
Bei der automatischen Korrelation werden alle Daten, die einer einzelnen Anforderung zugeordnet sind, als Einheit ein- oder ausgeschlossen.
Fügen Sie etwa folgenden Code hinzu, um die Stichprobenerstellung zu aktivieren:
const appInsights = require("applicationinsights");
appInsights.setup("<connection_string>");
appInsights.defaultClient.config.samplingPercentage = 33; // 33% of all telemetry will be sent to Application Insights
appInsights.start();
Mehrere Rollen für Anwendungen mit mehreren Komponenten
In einigen Szenarien kann Ihre Anwendung aus mehreren Komponenten bestehen, die Sie alle mit derselben Verbindungszeichenfolge instrumentieren möchten. Sie können diese Komponenten weiterhin als separate Einheiten im Portal anzeigen, als ob sie separate Verbindungszeichenfolgen verwenden würden. Ein Beispiel sind separate Knoten in der Anwendungsübersicht. Sie müssen das Feld RoleName
manuell konfigurieren, um die Telemetrie einer Komponente von anderen Komponenten zu unterscheiden, die Daten an Ihre Application Insights-Ressource senden.
Verwenden Sie den folgenden Code, um das Feld RoleName
festzulegen:
const appInsights = require("applicationinsights");
appInsights.setup("<connection_string>");
appInsights.defaultClient.context.tags[appInsights.defaultClient.context.keys.cloudRole] = "MyRoleName";
appInsights.start();
Browser SDK-Ladeprogramm
Hinweis
Als öffentliche Vorschauversion verfügbar. Ergänzende Nutzungsbedingungen für Microsoft Azure-Vorschauversionen
Die automatische Web-Instrumentierung kann für Node Server über die Einschleusung von JavaScript (Web) SDK Loader-Skripten per Konfiguration aktiviert werden.
let appInsights = require("applicationinsights");
appInsights.setup("<connection_string>")
.enableWebInstrumentation(true)
.start();
oder durch Festlegen der Umgebungsvariable APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_ENABLED = true
aktiviert werden.
Die Webinstrumentierung wird für Knotenserver-Antworten aktiviert, wenn alle folgenden Anforderungen erfüllt sind:
- Die Antwort weist den Statuscode
200
auf. - Die Antwortmethode lautet
GET
. - Die Serverantwort weist „html“ als
Content-Type
auf. - Die Serverantwort enthält sowohl das Tag
<head>
als auch das Tag</head>
. - Wenn die Antwort komprimiert ist, darf sie nur einen
Content-Encoding
-Typ aufweisen, und der Codierungstyp mussgzip
,br
oderdeflate
sein. - Die Antwort enthält keine aktuellen oder Sicherungs-CDN-Endpunkte für die Webinstrumentierung. (Aktuelle und Sicherungs-CDN-Endpunkte für die Webinstrumentierung finden Sie hier.)
Der CDN-Endpunkt für die Webinstrumentierung kann durch Festlegen der Umgebungsvariable APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_SOURCE = "web Instrumentation CDN endpoints"
geändert werden.
Die Verbindungszeichenfolge für die Webinstrumentierung kann durch Festlegen der Umgebungsvariable APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_CONNECTION_STRING = "web Instrumentation connection string"
geändert werden.
Hinweis
Die Webinstrumentierung kann die Antwortzeit des Servers verlangsamen, insbesondere dann, wenn die Antwort sehr groß oder komprimiert ist. Falls mittlere Schichten angewendet werden, kann dies dazu führen, dass die Webinstrumentierung nicht funktioniert und die ursprüngliche Antwort zurückgegeben wird.
Automatische Instrumentierung von Drittanbietern
Damit Kontext über mehrere asynchrone Aufrufe hinweg nachverfolgt werden kann, müssen Sie in Drittanbieterbibliotheken wie MongoDB und Redis einige Änderungen vornehmen. Standardmäßig verwendet Application Insights diagnostic-channel-publishers
, um einige dieser Bibliotheken mit einem Monkey-Patch zu versehen. Sie können diese Funktion ändern, indem Sie die Umgebungsvariable APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL
festlegen.
Hinweis
Wenn Sie diese Umgebungsvariable festlegen, werden Ereignisse möglicherweise dem entsprechenden Vorgang nicht korrekt zugeordnet.
Sie können einzelne Monkey-Patches deaktivieren, indem Sie die APPLICATION_INSIGHTS_NO_PATCH_MODULES
-Umgebungsvariable auf eine durch Kommas getrennte Liste mit Paketen festlegen, die deaktiviert werden sollen. Verwenden Sie beispielsweise APPLICATION_INSIGHTS_NO_PATCH_MODULES=console,redis
, um das Patchen der Pakete console
und redis
zu vermeiden.
Derzeit werden neun Pakete instrumentiert: bunyan
,console
,mongodb
,mongodb-core
,mysql
,redis
,winston
,pg
und pg-pool
. Informationen zu den genauen Versionen der Pakete, die mit einem Patch versehen werden, finden Sie in der Infodatei zu diagnostic-channel-publishers.
Je nachdem, ob setAutoCollectConsole
aktiviert ist oder nicht, werden durch die bunyan
-, winston
- und console
-Patches Application Insights-Ablaufverfolgungsereignisse generiert. Die restlichen Patches generieren, wenn setAutoCollectDependencies
aktiviert ist, Application Insights-Abhängigkeitsereignisse.
Livemetriken
Verwenden Sie setSendLiveMetrics(true)
, um Livemetriken von Ihrer App an Azure zu senden. Das Filtern von Livemetriken wird im Portal derzeit nicht unterstützt.
Erweiterte Metriken
Hinweis
Ab Version 1.4.0 wird das Senden von erweiterten nativen Metriken unterstützt.
Wenn Sie das Senden von erweiterten nativen Metriken von Ihrer App an Azure aktivieren möchten, installieren Sie das separate Paket für native Metriken. Das SDK wird nach der Installation automatisch geladen und beginnt mit dem Sammeln von nativen Node.js-Metriken.
npm install applicationinsights-native-metrics
Derzeit sammelt das Paket für native Metriken automatisch die CPU-Zeit für die automatische Speicherbereinigung, für die Takte von Ereignisschleifen sowie für die Heapnutzung:
- Automatische Speicherbereinigung: Die für die einzelnen Typen der automatischen Speicherbereinigung aufgewendete CPU-Zeit sowie die Anzahl der Vorkommen der einzelnen Typen.
- Ereignisschleife: Die Anzahl der Takte sowie die insgesamt aufgewendete CPU-Zeit.
- Heapnutzung und Nicht-Heapnutzung: Anteil der Heap-Speicherauslastung Ihrer App.
Modi der verteilten Ablaufverfolgung
Standardmäßig sendet das SDK Header, die von anderen Anwendungen oder Diensten, die mit einem Application Insights SDK instrumentiert sind, gelesen werden. Sie können das Senden und Empfangen der Header für W3C-Ablaufverfolgungskontext zusätzlich zu den vorhandenen KI-Headern aktivieren. Auf diese Weise unterbrechen Sie keine Korrelation mit Ihren vorhandenen Legacydiensten. Durch Aktiveren von W3C-Headern kann Ihre Anwendung eine Korrelation mit anderen Diensten herstellen, die zwar nicht mit Application Insights instrumentiert sind, aber diesen W3C-Standard übernehmen.
const appInsights = require("applicationinsights");
appInsights
.setup("<your connection string>")
.setDistributedTracingMode(appInsights.DistributedTracingModes.AI_AND_W3C)
.start()
TelemetryClient-API
Eine vollständige Beschreibung der TelemetryClient-API finden Sie unter Application Insights-API für benutzerdefinierte Ereignisse und Metriken.
Sie können alle Anforderungen, Ereignisse, Metriken oder Ausnahmen mit der Application Insights-Clientbibliothek für Node.js nachverfolgen. Im folgenden Codebeispiel werden einige APIs veranschaulicht, die Sie verwenden können:
let appInsights = require("applicationinsights");
appInsights.setup().start(); // assuming connection string in env var. start() can be omitted to disable any non-custom data
let client = appInsights.defaultClient;
client.trackEvent({name: "my custom event", properties: {customProperty: "custom property value"}});
client.trackException({exception: new Error("handled exceptions can be logged with this method")});
client.trackMetric({name: "custom metric", value: 3});
client.trackTrace({message: "trace message"});
client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL"});
client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});
let http = require("http");
http.createServer( (req, res) => {
client.trackNodeHttpRequest({request: req, response: res}); // Place at the beginning of your request handler
});
Nachverfolgen Ihrer Abhängigkeiten
Nutzen Sie den folgenden Code, um Ihre Abhängigkeiten nachzuverfolgen:
let appInsights = require("applicationinsights");
let client = new appInsights.TelemetryClient();
var success = false;
let startTime = Date.now();
// execute dependency call here....
let duration = Date.now() - startTime;
success = true;
client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:duration, resultCode:0, success: true, dependencyTypeName: "ZSQL"});;
Das folgende Beispiel zeigt ein Hilfsprogramm, das mithilfe von trackMetric
die Dauer der Zeitplanung von Ereignisschleifen misst:
function startMeasuringEventLoop() {
var startTime = process.hrtime();
var sampleSum = 0;
var sampleCount = 0;
// Measure event loop scheduling delay
setInterval(() => {
var elapsed = process.hrtime(startTime);
startTime = process.hrtime();
sampleSum += elapsed[0] * 1e9 + elapsed[1];
sampleCount++;
}, 0);
// Report custom metric every second
setInterval(() => {
var samples = sampleSum;
var count = sampleCount;
sampleSum = 0;
sampleCount = 0;
if (count > 0) {
var avgNs = samples / count;
var avgMs = Math.round(avgNs / 1e6);
client.trackMetric({name: "Event Loop Delay", value: avgMs});
}
}, 1000);
}
Hinzufügen einer benutzerdefinierten Eigenschaft zu allen Ereignissen
Verwenden Sie den folgenden Code, um allen Ereignissen eine benutzerdefinierte Eigenschaft hinzuzufügen:
appInsights.defaultClient.commonProperties = {
environment: process.env.SOME_ENV_VARIABLE
};
Nachverfolgen von HTTP GET-Anforderungen
Verwenden Sie den folgenden Code, um HTTP GET-Anforderungen manuell nachzuverfolgen:
Hinweis
- Standardmäßig werden alle Anforderungen nachverfolgt. Zum Deaktivieren der automatischen Sammlung rufen Sie
.setAutoCollectRequests(false)
vorstart()
auf. - Native Fetch-API-Anforderungen werden nicht automatisch von klassischen Application Insights-Instanzen nachverfolgt. Eine manuelle Abhängigkeitsnachverfolgung ist erforderlich.
appInsights.defaultClient.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});
Alternativ dazu können Sie Anforderungen auch mithilfe der trackNodeHttpRequest
-Methode nachverfolgen:
var server = http.createServer((req, res) => {
if ( req.method === "GET" ) {
appInsights.defaultClient.trackNodeHttpRequest({request:req, response:res});
}
// other work here....
res.end();
});
Nachverfolgen der Serverstartzeit
Verwenden Sie den folgenden Code, um die Serverstartzeit nachzuverfolgen:
let start = Date.now();
server.on("listening", () => {
let duration = Date.now() - start;
appInsights.defaultClient.trackMetric({name: "server startup time", value: duration});
});
Leerung
Standardmäßig wird die Telemetrie 15 Sekunden lang gepuffert, bevor sie an den Erfassungsserver gesendet wird. Wenn Ihre Anwendung eine kurze Lebensdauer hat (z. B. bei Befehlszeilenschnittstellentools), ist es möglicherweise erforderlich, die gepufferten Telemetriedaten manuell zu leeren, wenn die Anwendung beendet wird, und zwar mithilfe von appInsights.defaultClient.flush()
.
Wenn das SDK erkennt, dass die Anwendung abstürzt, ruft sie für Sie das Leeren mittels appInsights.defaultClient.flush({ isAppCrashing: true })
auf. Wenn die Option isAppCrashing
von Flush angegeben wird, wird angenommen, dass sich die Anwendung in einem nicht ordnungsgemäßen Zustand befindet und die Telemetriedaten nicht senden kann. Stattdessen speichert das SDK alle gepufferten Telemetriedaten im persistenten Speicher und beendet die Anwendung. Wenn Ihre Anwendung erneut gestartet wird, versucht sie, alle Telemetriedaten zu senden, die im persistenten Speicher gespeichert wurden.
Vorverarbeiten von Daten mit Telemetrieprozessoren
Mithilfe von Telemetrieprozessoren können Sie die gesammelten Daten vor der Aufbewahrung verarbeiten und filtern. Telemetrieprozessoren werden nacheinander in der Reihenfolge aufgerufen, in der sie hinzugefügt wurden, bevor das Telemetrieelement an die Cloud gesendet wird.
public addTelemetryProcessor(telemetryProcessor: (envelope: Contracts.Envelope, context: { http.RequestOptions, http.ClientRequest, http.ClientResponse, correlationContext }) => boolean)
Gibt ein Telemetrieprozessor false
zurück, wird das entsprechende Telemetrieelement nicht gesendet.
Alle Telemetrieprozessoren erhalten zur Überprüfung und Änderung die Telemetriedaten und deren Umschlag. Zudem erhalten sie auch ein Kontextobjekt. Der Inhalt dieses Objekts wird durch den contextObjects
-Parameter beim Aufruf einer Nachverfolgungsmethode für manuell nachverfolgte Telemetriedaten definiert. Für automatisch gesammelte Telemetriedaten wird dieses Objekt mit den verfügbaren Anforderungsinformationen und dem permanenten Anforderungsinhalt aufgefüllt, die von appInsights.getCorrelationContext()
bereitgestellt werden (wenn die automatische Abhängigkeitskorrelation aktiviert ist).
Der TypeScript-Typ eines Telemetrieprozessors lautet:
telemetryProcessor: (envelope: ContractsModule.Contracts.Envelope, context: { http.RequestOptions, http.ClientRequest, http.ClientResponse, correlationContext }) => boolean;
Ein Prozessor zum Entfernen von Daten der Stapelüberwachung aus Ausnahmen könnte beispielsweise folgendermaßen aussehen:
function removeStackTraces ( envelope, context ) {
if (envelope.data.baseType === "Microsoft.ApplicationInsights.ExceptionData") {
var data = envelope.data.baseData;
if (data.exceptions && data.exceptions.length > 0) {
for (var i = 0; i < data.exceptions.length; i++) {
var exception = data.exceptions[i];
exception.parsedStack = null;
exception.hasFullStack = false;
}
}
}
return true;
}
appInsights.defaultClient.addTelemetryProcessor(removeStackTraces);
Verwenden mehrerer Verbindungszeichenfolgen
Sie können mehrere Application Insights-Ressourcen erstellen, denen jeweils unterschiedliche Daten gesendet werden, wenn Sie für die einzelnen Ressourcen den entsprechenden Verbindungszeichenfolgen verwenden.
Beispiel:
let appInsights = require("applicationinsights");
// configure auto-collection under one connection string
appInsights.setup("Connection String A").start();
// track some events manually under another connection string
let otherClient = new appInsights.TelemetryClient("Connection String B");
otherClient.trackEvent({name: "my custom event"});
Erweiterte Konfigurationsoptionen
Das Clientobjekt enthält eine config
-Eigenschaft mit vielen optionalen Einstellungen für erweiterte Szenarios. Um sie festzulegen, verwenden Sie Folgendes:
client.config.PROPERTYNAME = VALUE;
Diese Eigenschaften sind clientspezifisch, d. h. dass Sie appInsights.defaultClient
-Clients und new appInsights.TelemetryClient()
-Clients getrennt voneinander konfigurieren können.
Eigenschaft | Beschreibung |
---|---|
connectionString | Ein Bezeichner für Ihre Application Insights-Ressource. |
endpointUrl | Der Erfassungsendpunkt, an den die Telemetrienutzlasten gesendet werden sollen. |
quickPulseHost | Der Host für Live Metrics Stream, an den die Telemetriedaten der Livemetriken gesendet werden sollen. |
proxyHttpUrl | Ein Proxyserver für SDK-HTTP-Datenverkehr. (Optional. Standard wird aus der http_proxy -Umgebungsvariable abgerufen.) |
proxyHttpsUrl | Ein Proxyserver für SDK-HTTPS-Datenverkehr. (Optional. Standard wird aus der https_proxy -Umgebungsvariable abgerufen.) |
httpAgent | Ein HTTP-Agent für den HTTP-Datenverkehr des SDK. (Optional. Standard ist nicht definiert.) |
httpsAgent | Ein HTTPS-Agent für den HTTPS-Datenverkehr des SDK. (Optional. Standard ist nicht definiert.) |
maxBatchSize | Die maximale Anzahl von Telemetrieelementen, die in eine Nutzlast zum Erfassungsendpunkt eingeschlossen werden sollen. (Der Standardwert ist 250 .) |
maxBatchIntervalMs | Die maximale Wartezeit, bis eine Nutzlast „maxBatchSize“ erreicht. (Der Standardwert ist 15000 .) |
disableAppInsights | Ein Flag, das angibt, ob die Übertragung von Telemetriedaten deaktiviert ist. (Der Standardwert ist false .) |
samplingPercentage | Der Prozentsatz der nachverfolgten Telemetrieelemente, der übertragen werden soll. (Der Standardwert ist 100 .) |
correlationIdRetryIntervalMs | Die Wartezeit bis zum erneuten Versuch, die ID für komponentenübergreifende Korrelationen abzurufen. (Der Standardwert ist 30000 .) |
correlationHeaderExcludedDomains | Eine Liste der Domänen, die von Header Injection für komponentenübergreifende Korrelationen ausgeschlossen werden sollen. (Standard. Siehe Config.ts.) |
Häufig gestellte Fragen
Wie kann ich die Telemetriekorrelation deaktivieren?
Verwenden Sie die correlationHeaderExcludedDomains
-Eigenschaft in der Konfiguration, um die Telemetriekorrelation zu deaktivieren. Weitere Informationen finden Sie unter ApplicationInsights-node.js.
Problembehandlung
Informationen zur Problembehandlung, einschließlich Szenarien, in denen keine Daten verfügbar sind, und das Anpassen von Protokollen, finden Sie unter Problembehandlung bei der Application Insights-Überwachung von Node.js-Apps und -Diensten.