Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Come iniziare
Installare il pacchetto
npm install @azure/monitor-opentelemetry
Ambienti attualmente supportati
Avvertimento: Questo SDK funziona solo per ambienti Node.js. Usare Application Insights JavaScript SDK per scenari Web e browser.
Per altri dettagli, vedere i criteri di supporto .
Prerequisiti
Abilitare il client OpenTelemetry di Monitoraggio di Azure
Importante:
useAzureMonitordeve essere chiamato prima di importare qualsiasi altra cosa. Se altre librerie vengono importate per prime, potrebbe verificarsi una perdita di dati di telemetria.
import { AzureMonitorOpenTelemetryOptions, useAzureMonitor } from "@azure/monitor-opentelemetry";
const options: AzureMonitorOpenTelemetryOptions = {
azureMonitorExporterOptions: {
connectionString:
process.env["APPLICATIONINSIGHTS_CONNECTION_STRING"] || "<your connection string>",
},
};
useAzureMonitor(options);
- La stringa di connessione può essere impostata utilizzando la variabile
APPLICATIONINSIGHTS_CONNECTION_STRINGd'ambiente .
Configurazione
import { resourceFromAttributes } from "@opentelemetry/resources";
import { AzureMonitorOpenTelemetryOptions, useAzureMonitor } from "@azure/monitor-opentelemetry";
const resource = resourceFromAttributes({ testAttribute: "testValue" });
const options: AzureMonitorOpenTelemetryOptions = {
azureMonitorExporterOptions: {
// Offline storage
storageDirectory: "c://azureMonitor",
// Automatic retries
disableOfflineStorage: false,
// Application Insights Connection String
connectionString:
process.env["APPLICATIONINSIGHTS_CONNECTION_STRING"] || "<your connection string>",
},
samplingRatio: 1,
instrumentationOptions: {
// Instrumentations generating traces
azureSdk: { enabled: true },
http: { enabled: true },
mongoDb: { enabled: true },
mySql: { enabled: true },
postgreSql: { enabled: true },
redis: { enabled: true },
redis4: { enabled: true },
// Instrumentations generating logs
bunyan: { enabled: true },
winston: { enabled: true },
},
enableLiveMetrics: true,
enableStandardMetrics: true,
browserSdkLoaderOptions: {
enabled: false,
connectionString: "",
},
resource: resource,
logRecordProcessors: [],
spanProcessors: [],
};
useAzureMonitor(options);
| Opzione | Descrizione | Predefinito |
|---|---|---|
azureMonitorExporterOptions |
Configurazione dell'utilità di esportazione OpenTelemetry di Monitoraggio di Azure. Maggiori informazioni qui | |
samplingRatio |
Il rapporto di campionamento deve assumere un valore compreso nell'intervallo [0,1], il che significa che tutti i dati verranno campionati e 0 tutti i dati di tracciamento verranno campionati. | 1 |
instrumentationOptions |
Configurazione delle librerie di strumentazione. Maggiori informazioni qui |
|
browserSdkLoaderOptions |
Consenti la configurazione delle strumentazioni Web. |
|
resource |
Risorsa Opentelemetry. Maggiori informazioni qui | |
enableLiveMetrics |
Abilita/disabilita le metriche in tempo reale. | true |
enableStandardMetrics |
Abilita/disabilita le metriche standard. | true |
logRecordProcessors |
Matrice di processori di record di log da registrare nel provider di logger globale. | |
spanProcessors |
Matrice di processori span da registrare nel provider di traccia globale. | |
enableTraceBasedSamplingForLogs |
Abilitare il campionamento dei log in base alla traccia. | false |
enablePerformanceCounters |
Abilitare i contatori delle prestazioni. | true |
Le opzioni possono essere impostate utilizzando il file applicationinsights.json di configurazione che si trova nella cartella principale della cartella di installazione del @azure/monitor-opentelemetry pacchetto, ad esempio: node_modules/@azure/monitor-opentelemetry. Questi valori di configurazione verranno applicati a tutte le istanze di AzureMonitorOpenTelemetryClient.
{
"samplingRatio": 0.8,
"enableStandardMetrics": true,
"enableLiveMetrics": true,
"instrumentationOptions":{
"azureSdk": {
"enabled": false
}
},
...
}
Il file JSON personalizzato può essere fornito utilizzando la APPLICATIONINSIGHTS_CONFIGURATION_FILE variabile di ambiente.
process.env["APPLICATIONINSIGHTS_CONFIGURATION_FILE"] = "path/to/customConfig.json";
Librerie di strumentazione
Le librerie di strumentazione OpenTelemetry seguenti sono incluse come parte di OpenTelemetry di Monitoraggio di Azure.
Nota: Le strumentazioni Azure SDK, MongoDB, MySQL, PostgreSQL, Redis e Redis-4 sono abilitate per impostazione predefinita per la traccia distribuita. Anche la strumentazione HTTP/HTTPS è abilitata per impostazione predefinita. Tutte le altre strumentazioni sono disabilitate per impostazione predefinita e possono essere abilitate impostando enabled: true nelle opzioni di strumentazione.
Avvertimento: Le librerie di strumentazione si basano su specifiche sperimentali di OpenTelemetry. L'impegno di Microsoft per il supporto dell'anteprima consiste nel garantire che le librerie seguenti generino dati in Application Insights di Monitoraggio di Azure, ma è possibile che le modifiche di rilievo o il mapping sperimentale blocchino alcuni elementi di dati.
Tracciamento distribuito
Metriche
Registrazioni
Altre strumentazioni OpenTelemetry sono disponibili qui e possono essere aggiunte usando TracerProvider in AzureMonitorOpenTelemetryClient.
import { useAzureMonitor } from "@azure/monitor-opentelemetry";
import { registerInstrumentations } from "@opentelemetry/instrumentation";
import { trace, metrics } from "@opentelemetry/api";
import { ExpressInstrumentation } from "@opentelemetry/instrumentation-express";
useAzureMonitor();
registerInstrumentations({
tracerProvider: trace.getTracerProvider(),
meterProvider: metrics.getMeterProvider(),
instrumentations: [new ExpressInstrumentation()],
});
Application Insights Browser SDK Loader
Application Insights Browser SDK Loader consente di inserire l'SDK Web nelle risposte del server del nodo quando si verificano le condizioni seguenti:
- La risposta ha il codice di stato
200. - Il metodo di risposta è
GET. - La risposta del server ha l'intestazione
Conent-Typehtml. - Server resonse contiene sia i tag and.
- La risposta non contiene gli endpoint correnti/di backup della rete CDN della strumentazione Web. (endpoint correnti e di backup della rete CDN della strumentazione Web qui)
Ulteriori informazioni sull'utilizzo del caricatore SDK del browser sono disponibili qui.
Impostare il nome e l'istanza del ruolo cloud
È possibile impostare il nome del ruolo cloud e l'istanza del ruolo cloud tramite gli attributi della risorsa OpenTelemetry .
import { emptyResource } from "@opentelemetry/resources";
import {
ATTR_SERVICE_NAME,
SEMRESATTRS_SERVICE_NAMESPACE,
SEMRESATTRS_SERVICE_INSTANCE_ID,
} from "@opentelemetry/semantic-conventions";
import { AzureMonitorOpenTelemetryOptions, useAzureMonitor } from "@azure/monitor-opentelemetry";
// ----------------------------------------
// Setting role name and role instance
// ----------------------------------------
const customResource = emptyResource();
customResource.attributes[ATTR_SERVICE_NAME] = "my-helloworld-service";
customResource.attributes[SEMRESATTRS_SERVICE_NAMESPACE] = "my-namespace";
customResource.attributes[SEMRESATTRS_SERVICE_INSTANCE_ID] = "my-instance";
const options: AzureMonitorOpenTelemetryOptions = { resource: customResource };
useAzureMonitor(options);
Per informazioni sugli attributi standard per le risorse, vedere Convenzioni semantiche delle risorse.
Modificare la telemetria
Questa sezione illustra come modificare i dati di telemetria.
Aggiungere attributi span
Per aggiungere attributi di span, usare uno dei seguenti due modi:
- Usare le opzioni fornite dalle librerie di strumentazione.
- Aggiungere un processore di estensione personalizzato.
Questi attributi possono includere l'aggiunta di una proprietà personalizzata ai dati di telemetria.
Mancia: Il vantaggio di utilizzare le opzioni fornite dalle librerie di strumentazione, quando sono disponibili, è che l'intero contesto è disponibile. Di conseguenza, gli utenti possono effettuare una selezione per aggiungere o filtrare altri attributi. Ad esempio, l'opzione enrich nella libreria di strumentazione HttpClient consente agli utenti di accedere allo stesso HttpRequestMessage. Da lì, possono selezionare qualsiasi elemento e archiviarlo come attributo.
Aggiungere una proprietà personalizzata a un oggetto Trace
Tutti gli attributi aggiunti agli intervalli vengono esportati come proprietà personalizzate.
Usare un processore personalizzato:
import { SpanProcessor, ReadableSpan } from "@opentelemetry/sdk-trace-base";
import { Span } from "@opentelemetry/api";
import { SEMATTRS_HTTP_CLIENT_IP } from "@opentelemetry/semantic-conventions";
import { AzureMonitorOpenTelemetryOptions, useAzureMonitor } from "@azure/monitor-opentelemetry";
class SpanEnrichingProcessor implements SpanProcessor {
async forceFlush(): Promise<void> {
// Flush code here
}
async shutdown(): Promise<void> {
// shutdown code here
}
onStart(_span: Span): void {}
onEnd(span: ReadableSpan): void {
span.attributes["CustomDimension1"] = "value1";
span.attributes["CustomDimension2"] = "value2";
span.attributes[SEMATTRS_HTTP_CLIENT_IP] = "<IP Address>";
}
}
// Enable Azure Monitor integration.
const options: AzureMonitorOpenTelemetryOptions = {
// Add the SpanEnrichingProcessor
spanProcessors: [new SpanEnrichingProcessor()],
};
useAzureMonitor(options);
Aggiunta del nome dell'operazione a tracce e registri
Utilizzare un processore di estensione personalizzato e un elaboratore di record di log per collegare e correlare il nome dell'operazione dalle richieste alle dipendenze e ai log.
import { SpanProcessor, ReadableSpan } from "@opentelemetry/sdk-trace-base";
import { Span, Context, trace } from "@opentelemetry/api";
import { AI_OPERATION_NAME } from "@azure/monitor-opentelemetry-exporter";
import { LogRecordProcessor, SdkLogRecord } from "@opentelemetry/sdk-logs";
import { AzureMonitorOpenTelemetryOptions, useAzureMonitor } from "@azure/monitor-opentelemetry";
class SpanEnrichingProcessor implements SpanProcessor {
async forceFlush(): Promise<void> {
// Flush code here
}
async shutdown(): Promise<void> {
// shutdown code here
}
onStart(_span: Span, _context: Context): void {
const parentSpan = trace.getSpan(_context);
if (parentSpan && "name" in parentSpan) {
// If the parent span has a name we can assume it is a ReadableSpan and cast it.
_span.setAttribute(AI_OPERATION_NAME, (parentSpan as unknown as ReadableSpan).name);
}
}
onEnd(_span: ReadableSpan): void {}
}
class LogRecordEnrichingProcessor implements LogRecordProcessor {
async forceFlush(): Promise<void> {
// Flush code here
}
async shutdown(): Promise<void> {
// shutdown code here
}
onEmit(_logRecord: SdkLogRecord, _context: Context): void {
const parentSpan = trace.getSpan(_context);
if (parentSpan && "name" in parentSpan) {
// If the parent span has a name we can assume it is a ReadableSpan and cast it.
_logRecord.setAttribute(AI_OPERATION_NAME, (parentSpan as unknown as ReadableSpan).name);
}
}
}
// Enable Azure Monitor integration.
const options: AzureMonitorOpenTelemetryOptions = {
// Add the SpanEnrichingProcessor
spanProcessors: [new SpanEnrichingProcessor()],
logRecordProcessors: [new LogRecordEnrichingProcessor()],
};
useAzureMonitor(options);
Filtrare i dati di telemetria
È possibile usare i modi seguenti per filtrare i dati di telemetria prima che lascino l'applicazione.
Escludere l'opzione URL fornita da molte librerie di strumentazione HTTP.
L'esempio seguente illustra come escludere un determinato URL dal rilevamento usando la libreria di strumentazione HTTP/HTTPS:
import { HttpInstrumentationConfig } from "@opentelemetry/instrumentation-http"; import { IncomingMessage, RequestOptions } from "node:http"; import { AzureMonitorOpenTelemetryOptions, useAzureMonitor } from "@azure/monitor-opentelemetry"; const httpInstrumentationConfig: HttpInstrumentationConfig = { enabled: true, ignoreIncomingRequestHook: (request: IncomingMessage) => { // Ignore OPTIONS incoming requests if (request.method === "OPTIONS") { return true; } return false; }, ignoreOutgoingRequestHook: (options: RequestOptions) => { // Ignore outgoing requests with /test path if (options.path === "/test") { return true; } return false; }, }; const options: AzureMonitorOpenTelemetryOptions = { instrumentationOptions: { http: httpInstrumentationConfig, }, }; useAzureMonitor(options);Utilizzare un processore personalizzato. È possibile usare un processore di intervallo personalizzato per escludere determinati intervalli dall'esportazione. Per contrassegnare gli intervalli da non esportare, impostare
TraceFlagsuDEFAULT. Utilizzare l'esempio di aggiunta di una proprietà personalizzata, ma sostituire le righe di codice seguenti:import { SpanProcessor, ReadableSpan } from "@opentelemetry/sdk-trace-base"; import { Span, Context, SpanKind, TraceFlags } from "@opentelemetry/api"; class SpanEnrichingProcessor implements SpanProcessor { async forceFlush(): Promise<void> { // Force flush code here } onStart(_span: Span, _parentContext: Context): void { // Normal code here } async shutdown(): Promise<void> { // Shutdown code here } onEnd(span: ReadableSpan): void { if (span.kind === SpanKind.INTERNAL) { span.spanContext().traceFlags = TraceFlags.NONE; } } }
Telemetria personalizzata
Questa sezione illustra come raccogliere dati di telemetria personalizzati dall'applicazione.
Aggiungi metriche personalizzate
È possibile raccogliere metriche oltre a quelle raccolte dalle librerie di strumentazione.
L'API OpenTelemetry offre sei "strumenti" di metrica per coprire un'ampia gamma di scenari di metriche e sarà necessario selezionare il "tipo di aggregazione" corretto quando si visualizzano le metriche in Esplora metriche. Questo requisito è vero quando si usa l'API metrica OpenTelemetry per inviare metriche e quando si usa una libreria di strumentazione.
Nella tabella seguente vengono illustrati i tipi di aggregazione consigliati per ognuno degli strumenti metrici OpenTelemetry.
| Strumento OpenTelemetry | Tipo di aggregazione di Monitoraggio di Azure |
|---|---|
| Contatore | Somma |
| Contatore asincrono | Somma |
| Istogramma | Media, Somma, Conteggio (Max, Min solo per Python e Node.js) |
| Misuratore asincrono | Medio |
| UpDownCounter (solo Python e Node.js) | Somma |
| UpDownCounter asincrono (solo Python e Node.js) | Somma |
Cautela: I tipi di aggregazione oltre a quelli mostrati nella tabella in genere non sono significativi.
La specifica OpenTelemetry descrive gli strumenti e fornisce esempi di quando è possibile usare ognuno di essi.
import { useAzureMonitor } from "@azure/monitor-opentelemetry";
import { metrics, ObservableResult } from "@opentelemetry/api";
useAzureMonitor();
const meter = metrics.getMeter("testMeter");
const histogram = meter.createHistogram("histogram");
const counter = meter.createCounter("counter");
const gauge = meter.createObservableGauge("gauge");
gauge.addCallback((observableResult: ObservableResult) => {
const randomNumber = Math.floor(Math.random() * 100);
observableResult.observe(randomNumber, { testKey: "testValue" });
});
histogram.record(1, { testKey: "testValue" });
histogram.record(30, { testKey: "testValue2" });
histogram.record(100, { testKey2: "testValue" });
counter.add(1, { testKey: "testValue" });
counter.add(5, { testKey2: "testValue" });
counter.add(3, { testKey: "testValue2" });
Aggiunta di eccezioni personalizzate
Le librerie di strumentazione selezionate supportano automaticamente le eccezioni ad Application Insights. Tuttavia, è possibile segnalare manualmente le eccezioni oltre a quelle segnalate dalle librerie di strumentazione. Ad esempio, le eccezioni rilevate dal codice non vengono in genere non segnalate e potrebbe essere necessario segnalarle e quindi attirare l'attenzione su di esse nelle esperienze pertinenti, tra cui il pannello degli errori e la visualizzazione delle transazioni end-to-end.
import { useAzureMonitor } from "@azure/monitor-opentelemetry";
import { trace, Exception } from "@opentelemetry/api";
useAzureMonitor();
const tracer = trace.getTracer("testMeter");
const span = tracer.startSpan("hello");
try {
throw new Error("Test Error");
} catch (error) {
span.recordException(error as Exception);
}
Risoluzione dei problemi
Diagnostica self-service
Monitoraggio di Azure OpenTelemetry usa il logger API OpenTelemetry per i log interni. Per abilitarlo, utilizzare il codice seguente:
import { useAzureMonitor } from "@azure/monitor-opentelemetry";
process.env["APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL"] = "VERBOSE";
process.env["APPLICATIONINSIGHTS_LOG_DESTINATION"] = "file";
process.env["APPLICATIONINSIGHTS_LOGDIR"] = "path/to/logs";
useAzureMonitor();
APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL La variabile d'ambiente può essere utilizzata per impostare il livello di log desiderato, supportando i seguenti valori: NONE, ERROR, WARN, INFO, DEBUG, VERBOSE e ALL.
I log possono essere inseriti in un file locale utilizzando APPLICATIONINSIGHTS_LOG_DESTINATION la variabile d'ambiente, i valori supportati sono file e file+console, un file denominato applicationinsights.log verrà generato nella cartella tmp per impostazione predefinita, inclusi tutti i log, /tmp per *nix e USERDIR/AppData/Local/Temp per Windows. La directory di log può essere configurata utilizzando la APPLICATIONINSIGHTS_LOGDIR variabile d'ambiente.
Esempi
Per esempi completi di alcuni scenari di campioni, vedere la samples/ cartella.
Concetti chiave
Per altre informazioni sul progetto OpenTelemetry, vedere le specifiche OpenTelemetry.
Registro dei plugin
Per vedere se è già stato creato un plug-in per una libreria che stai utilizzando, consulta il registro OpenTelemetry.
Se non riesci a inserire la tua libreria nel registro, sentiti libero di suggerire una nuova richiesta di plug-in all'indirizzo opentelemetry-js-contrib.
Contribuire
Per contribuire a questa libreria, leggere la guida per i contributi per altre informazioni su come compilare e testare il codice.
Azure SDK for JavaScript