Supervisión de servicios y aplicaciones de Node.js con Application InsightsMonitor your Node.js services and apps with Application Insights

Application Insights supervisa los componentes y los servicios back-end después de implementarlos para ayudarle a detectar y diagnosticar rápidamente problemas de rendimiento, entre otros.Application Insights monitors your backend services and components after deployment, to help you discover and rapidly diagnose performance and other issues. Puede usar Application Insights para los servicios de Node.js que se hospedan en el centro de datos, en máquinas virtuales de Azure y en aplicaciones web, e incluso en otras nubes públicas.You can use Application Insights for Node.js services that are hosted in your datacenter, Azure VMs and web apps, and even in other public clouds.

Para recibir, almacenar y explorar los datos de supervisión, incluya el SDK en su código y luego configure el recurso correspondiente de Application Insights en Azure.To receive, store, and explore your monitoring data, include the SDK in your code, and then set up a corresponding Application Insights resource in Azure. El SDK envía datos a ese recurso para realizar el análisis y la exploración posteriormente.The SDK sends data to that resource for further analysis and exploration.

El SDK de Node.js puede supervisar automáticamente las solicitudes HTTP entrantes y salientes, excepciones y varias métricas del sistema.The Node.js SDK can automatically monitor incoming and outgoing HTTP requests, exceptions, and some system metrics. A partir de la versión 0.20, el SDK también puede supervisar algunos paquetes de terceros comunes, como MongoDB, MySQL y Redis.Beginning in version 0.20, the SDK also can monitor some common third-party packages, like MongoDB, MySQL, and Redis. Todos los eventos relacionados con una solicitud HTTP entrante se correlacionan para una solución de problemas más rápida.All events related to an incoming HTTP request are correlated for faster troubleshooting.

Puede usar TelemetryClient API para instrumentar y supervisar manualmente aspectos adicionales de la aplicación y el sistema.You can use the TelemetryClient API to manually instrument and monitor additional aspects of your app and system. TelemetryClient API se describe con más detalle más adelante en este artículo.We describe the TelemetryClient API in more detail later in this article.

IntroducciónGet started

Realice las tareas siguientes para configurar la supervisión para una aplicación o servicio.Complete the following tasks to set up monitoring for an app or service.

Requisitos previosPrerequisites

Antes de empezar, asegúrese de que tiene una suscripción de Azure o bien obtenga una nueva de forma gratuita.Before you begin, make sure that you have an Azure subscription, or get a new one for free. Si su organización ya tiene una suscripción de Azure, un administrador puede seguir estas instrucciones y agregarle a ella.If your organization already has an Azure subscription, an administrator can follow these instructions to add you to it.

Configuración de un recurso de Application InsightsSet up an Application Insights resource

  1. Inicie sesión en Azure Portal.Sign in to the Azure portal.
  2. Creación de recursos en Application InsightsCreate an Application Insights resource

Configuración del SDK de Node.jsSet up the Node.js SDK

Incluya el SDK en la aplicación para que pueda recopilar datos.Include the SDK in your app, so it can gather data.

Importante

Las nuevas regiones de Azure requieren el uso de cadenas de conexión en lugar de claves de instrumentación.New Azure regions require the use of connection strings instead of instrumentation keys. La cadena de conexión identifica el recurso con el que se quieren asociar los datos de telemetría.Connection string identifies the resource that you want to associate your telemetry data with. También permite modificar los puntos de conexión que va a usar el recurso como destino de la telemetría.It also allows you to modify the endpoints your resource will use as a destination for your telemetry. Tiene que copiar la cadena de conexión y agregarla al código de la aplicación o a una variable de entorno.You will need to copy the connection string and add it to your application's code or to an environment variable.

  1. Copie la clave de instrumentación del recurso (también conocida como ikey) desde su recurso recién creado.Copy your resource's instrumentation Key (also called an ikey) from your newly created resource. Application Insights usa el valor de ikey para asignar datos a los recursos de Azure.Application Insights uses the ikey to map data to your Azure resource. Para que el SDK pueda usar el valor de ikey, se debe especificar en una variable de entorno o en el código.Before the SDK can use your ikey, you must specify the ikey in an environment variable or in your code.

    Copia de la clave de instrumentación

  2. Agregue la biblioteca del SDK de Node.js a las dependencias de la aplicación a través de package.json.Add the Node.js SDK library to your app's dependencies via package.json. En la carpeta raíz de la aplicación, ejecute:From the root folder of your app, run:

    npm install applicationinsights --save
    

    Nota

    Si usa TypeScript, no instale paquetes "typings" independientes.If you are using TypeScript, do not install separate "typings" packages. El paquete NPM contiene un archivo typings integrado.This NPM package contains built-in typings.

  3. Cargue explícitamente la biblioteca en el código.Explicitly load the library in your code. Dado que el SDK inserta la instrumentación en muchas otras bibliotecas, cargue la biblioteca tan pronto como sea posible, incluso antes que otras instrucciones require.Because the SDK injects instrumentation into many other libraries, load the library as early as possible, even before other require statements.

    let appInsights = require('applicationinsights');
    
  4. También puede proporcionar una clave ikey mediante la variable de entorno APPINSIGHTS_INSTRUMENTATIONKEY en lugar de pasarla manualmente a setup() o new appInsights.TelemetryClient().You also can provide an ikey via the environment variable APPINSIGHTS_INSTRUMENTATIONKEY, instead of passing it manually to setup() or new appInsights.TelemetryClient(). Esta práctica permite conservar los valores de ikey fuera del código fuente confirmado y también para especificar distintos valores de ikey para los diferentes entornos.This practice lets you keep ikeys out of committed source code, and you can specify different ikeys for different environments. Para realizar la configuración manualmente, llame a appInsights.setup('[your ikey]');.To configure manually call appInsights.setup('[your ikey]');.

    Para conocer opciones de configuración adicionales, consulte las secciones siguientes.For additional configuration options, see the following sections.

    Puede probar el SDK sin enviar telemetría estableciendo appInsights.defaultClient.config.disableAppInsights = true.You can try the SDK without sending telemetry by setting appInsights.defaultClient.config.disableAppInsights = true.

  5. Comience a recopilar y enviar datos automáticamente mediante una llamada a appInsights.start();.Start automatically collecting and sending data by calling appInsights.start();.

Supervisión de la aplicaciónMonitor your app

El SDK recopila automáticamente datos de telemetría sobre el entorno de ejecución de Node.js y algunos módulos de terceros comunes.The SDK automatically gathers telemetry about the Node.js runtime and some common third-party modules. Utilice la aplicación para generar algunos datos.Use your application to generate some of this data.

A continuación, en Azure Portal vaya al recurso de Application Insights que creó antes.Then, in the Azure portal go to the Application Insights resource that you created earlier. En la Escala de tiempo con información general, busque los primeros puntos de datos.In the Overview timeline, look for your first few data points. Para ver datos más detallados, seleccione diferentes componentes en los gráficos.To see more detailed data, select different components in the charts.

Para ver la topología detectada para la aplicación, puede usar el mapa de aplicación.To view the topology that is discovered for your app, you can use Application map.

Sin datosNo data

Dado que el SDK crea lotes de datos para enviar, puede haber un retraso hasta que se muestran los elementos en el portal.Because the SDK batches data for submission, there might be a delay before items are displayed in the portal. Si no ve los datos en el recurso, pruebe algunas de las soluciones siguientes:If you don't see data in your resource, try some of the following fixes:

  • Seguir usando la aplicación.Continue to use the application. Realizar más acciones para generar más datos de telemetría.Take more actions to generate more telemetry.
  • Haga clic en Actualizar en la vista de recursos del portal.Click Refresh in the portal resource view. Los gráficos se actualizan periódicamente por sí mismos, pero si se actualizan de forma manual, se actualizan de inmediato.Charts periodically refresh on their own, but manually refreshing forces them to refresh immediately.
  • Compruebe que los puertos de salida necesarios estén abiertos.Verify that required outgoing ports are open.
  • Use Buscar para buscar eventos específicos.Use Search to look for specific events.
  • Consulte las preguntas más frecuentes.Check the FAQ.

Uso básicoBasic Usage

Para la recopilación integrada de solicitudes HTTP, eventos populares de bibliotecas de terceros, excepciones no controladas y métricas del sistema, use:For out-of-the-box collection of HTTP requests, popular third-party library events, unhandled exceptions, and system metrics:


let appInsights = require("applicationinsights");
appInsights.setup("[your ikey]").start();

Nota

Si la clave de instrumentación se establece en la variable de entorno APPINSIGHTS_INSTRUMENTATIONKEY, se puede llamar a .setup() sin argumentos.If the instrumentation key is set in the environment variable APPINSIGHTS_INSTRUMENTATIONKEY, .setup() can be called with no arguments. Esto facilita el uso de diferentes claves ikey para diferentes entornos.This makes it easy to use different ikeys for different environments.

Cargue la biblioteca de Application Insights, require("applicationinsights"), tan pronto como sea posible en los scripts antes de cargar otros paquetes.Load the Application Insights library ,require("applicationinsights"), as early as possible in your scripts before loading other packages. Esto es necesario para que la biblioteca de Application Insights pueda preparar los paquetes posteriores con fines de seguimiento.This is needed so that the Application Insights library can prepare later packages for tracking. Si encuentra conflictos con otras bibliotecas que realizan una preparación similar, intente cargar la biblioteca de Application Insights después de esas otras.If you encounter conflicts with other libraries doing similar preparation, try loading the Application Insights library after those.

Debido a la forma en la que JavaScript controla las devoluciones de llamada, se requiere trabajo adicional para realizar el seguimiento de una solicitud entre las dependencias externas y las devoluciones de llamada posteriores.Because of the way JavaScript handles callbacks, additional work is necessary to track a request across external dependencies and later callbacks. De forma predeterminada, este seguimiento adicional está habilitado; para deshabilitarlo, llame a setAutoDependencyCorrelation(false) tal y como se describe en la sección de configuración que aparece más abajo.By default this additional tracking is enabled; disable it by calling setAutoDependencyCorrelation(false) as described in the configuration section below.

Migración desde versiones anteriores a la 0.22Migrating from versions prior to 0.22

Hay cambios importantes entre las versiones anteriores y posteriores a la 0.22.There are breaking changes between releases prior to version 0.22 and after. Estos cambios están diseñados para ofrecer coherencia con otros SDK de Application Insights y permitir la extensibilidad futura.These changes are designed to bring consistency with other Application Insights SDKs and allow future extensibility.

En general, puede realizar la migración de las siguientes formas:In general, you can migrate with the following:

  • Reemplace las referencias a appInsights.client por appInsights.defaultClient.Replace references to appInsights.client with appInsights.defaultClient.
  • Reemplace las referencias a appInsights.getClient() por new appInsights.TelemetryClient().Replace references to appInsights.getClient() with new appInsights.TelemetryClient()
  • Reemplace todos los argumentos por métodos client.track* con un único objeto que contenga propiedades con nombre como argumentos.Replace all arguments to client.track* methods with a single object containing named properties as arguments. Vea las sugerencias de tipos integrados del IDE o TelemetryTypes para el objeto de excepción para cada tipo de telemetría.See your IDE's built-in type hinting or TelemetryTypes for the excepted object for each type of telemetry.

Si accede a las funciones de configuración del SDK sin encadenarlas a appInsights.setup(), ahora puede encontrar estas funciones en appInsights.Configurations (por ejemplo, appInsights.Configuration.setAutoCollectDependencies(true)).If you access SDK configuration functions without chaining them to appInsights.setup(), you can now find these functions at appInsights.Configurations (for example, appInsights.Configuration.setAutoCollectDependencies(true)). Revise los cambios realizados en la configuración predeterminada en la siguiente sección.Review the changes to the default configuration in the next section.

Configuración del SDKSDK configuration

El objeto appInsights proporciona varios métodos de configuración.The appInsights object provides a number of configuration methods. Estos métodos se enumeran en el siguiente fragmento de código con sus valores predeterminados.They are listed in the following snippet with their default values.

let appInsights = require("applicationinsights");
appInsights.setup("<instrumentation_key>")
    .setAutoDependencyCorrelation(true)
    .setAutoCollectRequests(true)
    .setAutoCollectPerformance(true, true)
    .setAutoCollectExceptions(true)
    .setAutoCollectDependencies(true)
    .setAutoCollectConsole(true)
    .setUseDiskRetryCaching(true)
    .setSendLiveMetrics(false)
    .setDistributedTracingMode(appInsights.DistributedTracingModes.AI)
    .start();

Para correlacionar totalmente los eventos en un servicio, asegúrese de establecer .setAutoDependencyCorrelation(true).To fully correlate events in a service, be sure to set .setAutoDependencyCorrelation(true). Con esta opción establecida, el SDK puede realizar el seguimiento del contexto a través de las devoluciones de llamada asincrónicas en Node.js.With this option set, the SDK can track context across asynchronous callbacks in Node.js.

Revise las descripciones en las sugerencias de tipos integrados del IDE, o bien consulte applicationinsights.ts para obtener información detallada sobre qué controlan y sobre los argumentos secundarios opcionales.Review their descriptions in your IDE's built-in type hinting, or applicationinsights.ts for detailed information on what these control, and optional secondary arguments.

Nota

De forma predeterminada, setAutoCollectConsole está configurado para excluir las llamadas a console.log (y a otros métodos de consola).By default setAutoCollectConsole is configured to exclude calls to console.log (and other console methods). Solo se recopilarán las llamadas a registradores de terceros admitidos (por ejemplo, Winston y Bunyan).Only calls to supported third-party loggers (for example, winston and bunyan) will be collected. Puede cambiar este comportamiento para incluir las llamadas a métodos console mediante setAutoCollectConsole(true, true).You can change this behavior to include calls to console methods by using setAutoCollectConsole(true, true).

muestreoSampling

De forma predeterminada, el SDK enviará todos los datos recopilados al servicio de Application Insights.By default, the SDK will send all collected data to the Application Insights service. Si recopila una gran cantidad de datos, es posible que quiera habilitar el muestreo para reducir la cantidad de datos enviados.If you collect a lot of data, you might want to enable sampling to reduce the amount of data sent. Para ello, especifique el campo samplingPercentage en el objeto config de un cliente.Set the samplingPercentage field on the config object of a client to accomplish this. Si establece samplingPercentage en 100 (el valor predeterminado), se enviarán todos los datos, y si lo establece en 0, no se enviará nada.Setting samplingPercentage to 100(the default) means all data will be sent and 0 means nothing will be sent.

Si usa la correlación automática, todos los datos asociados a una única solicitud se incluirán o excluirán como una unidad.If you are using automatic correlation, all data associated with a single request will be included or excluded as a unit.

Agregue el siguiente fragmento de código para habilitar el muestreo:Add code such as the following to enable sampling:

const appInsights = require("applicationinsights");
appInsights.setup("<instrumentation_key>");
appInsights.defaultClient.config.samplingPercentage = 33; // 33% of all telemetry will be sent to Application Insights
appInsights.start();

Varios roles para aplicaciones de varios componentesMultiple roles for multi-components applications

Si la aplicación consta de varios componentes que quiere instrumentar con la misma clave de instrumentación, pero quiere seguir viendo estos componentes como unidades independientes en el portal, como si usaran claves de instrumentación independientes (por ejemplo, como nodos independientes en el mapa de aplicación), puede que necesite configurar manualmente el campo RoleName para distinguir la telemetría de un componente de otros componentes que envían datos a su recurso de Application Insights.If your application consists of multiple components that you wish to instrument all with the same instrumentation key and still see these components as separate units in the portal, as if they were using separate instrumentation keys (for example, as separate nodes on the Application Map), you may need to manually configure the RoleName field to distinguish one component's telemetry from other components sending data to your Application Insights resource.

Use el siguiente código para configurar el campo RoleName:Use the following to set the RoleName field:

const appInsights = require("applicationinsights");
appInsights.setup("<instrumentation_key>");
appInsights.defaultClient.context.tags[appInsights.defaultClient.context.keys.cloudRole] = "MyRoleName";
appInsights.start();

Instrumentación de terceros automáticaAutomatic third-party instrumentation

Para realizar un seguimiento del contexto a través de llamadas asincrónicas, es necesario hacer algunos cambios en las bibliotecas de terceros, como MongoDB y Redis.In order to track context across asynchronous calls, some changes are required in third party libraries such as MongoDB and Redis. De forma predeterminada, Application Insights usará diagnostic-channel-publishers para modificar de forma dinámica algunas de estas bibliotecas.By default, Application Insights will use diagnostic-channel-publishers to monkey-patch some of these libraries. Se puede deshabilitar si se establece la variable de entorno APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL.This can be disabled by setting the APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL environment variable.

Nota

Al establecer esa variable de entorno, es posible que los eventos dejen de estar asociados correctamente a la operación adecuada.By setting that environment variable, events may no longer be correctly associated with the right operation.

Las modificaciones dinámicas individuales se pueden deshabilitar si se establece la variable de entorno APPLICATION_INSIGHTS_NO_PATCH_MODULES en una lista de paquetes separados por comas, por ejemplo, APPLICATION_INSIGHTS_NO_PATCH_MODULES=console,redis para evitar la modificación de los paquetes console y redis.Individual monkey-patches can be disabled by setting the APPLICATION_INSIGHTS_NO_PATCH_MODULES environment variable to a comma separated list of packages to disable (for example, APPLICATION_INSIGHTS_NO_PATCH_MODULES=console,redis) to avoid patching the console and redis packages.

Actualmente hay nueve paquetes instrumentados: bunyan, console, mongodb, mongodb-core, mysql, redis, winston, pg y pg-pool.Currently there are nine packages that are instrumented: bunyan,console,mongodb,mongodb-core,mysql,redis,winston,pg, and pg-pool. Consulte el archivo Léame de diagnostic-channel-publishers para obtener información sobre la versión revisada de estos paquetes.Visit the diagnostic-channel-publishers' README for information about exactly which version of these packages are patched.

Las revisiones de bunyan, winston y console generarán eventos de seguimiento de Application Insights en función de si setAutoCollectConsole está habilitado.The bunyan, winston, and console patches will generate Application Insights trace events based on whether setAutoCollectConsole is enabled. El resto generará eventos de dependencia de Application Insights en función de si setAutoCollectDependencies está habilitado.The rest will generate Application Insights Dependency events based on whether setAutoCollectDependencies is enabled.

Live MetricsLive Metrics

Para habilitar el envío de métricas en tiempo real desde la aplicación a Azure, use setSendLiveMetrics(true).To enable sending Live Metrics from your app to Azure, use setSendLiveMetrics(true). Actualmente no se admite el filtrado de métricas en tiempo real en el portal.Filtering of live metrics in the portal is currently not supported.

Métricas extendidasExtended metrics

Nota

La capacidad de enviar métricas nativas extendidas se agregó en la versión 1.4.0.The ability to send extended native metrics was added in version 1.4.0

Para habilitar el envío de métricas nativas extendidas desde su aplicación a Azure, instale el paquete de métricas nativas independiente.To enable sending extended native metrics from your app to Azure, install the separate native metrics package. El SDK se cargará automáticamente cuando se instale y empezará a recopilar métricas nativas de Node.js.The SDK will automatically load when it is installed and start collecting Node.js native metrics.

npm install applicationinsights-native-metrics

Actualmente, el paquete de métricas nativas recopila automáticamente tiempo de CPU de recolección de elementos no utilizados, tics de bucle de eventos e información de uso de montones:Currently, the native metrics package performs autocollection of garbage collection CPU time, event loop ticks, and heap usage:

  • Recolección de elementos no utilizados: cantidad de tiempo de CPU que se dedica a cada tipo de recolección de elementos no utilizados y número de repeticiones de cada tipo.Garbage collection: The amount of CPU time spent on each type of garbage collection, and how many occurrences of each type.
  • Bucle de eventos: número de tics que se han producido y tiempo de CPU que se ha dedicado en total.Event loop: How many ticks occurred and how much CPU time was spent in total.
  • Montón frente a no montón: cantidad de uso de memoria de la aplicación se dedica o no al montón.Heap vs non-heap: How much of your app's memory usage is in the heap or non-heap.

Modos de seguimiento distribuidoDistributed Tracing modes

De forma predeterminada, el SDK enviará los encabezados que entienden otras aplicaciones o servicios instrumentados con un SDK de Application Insights.By default, the SDK will send headers understood by other applications/services instrumented with an Application Insights SDK. Opcionalmente, puede habilitar el envío y la recepción de encabezados de contexto de seguimiento de W3C, además de los encabezados de IA existentes, por lo que no se interrumpirá la correlación con ninguno de los servicios heredados existentes.You can optionally enable sending/receiving of W3C Trace Context headers in addition to the existing AI headers, so you will not break correlation with any of your existing legacy services. La habilitación de encabezados de W3C permitirá que la aplicación se correlacione con otros servicios no instrumentados con Application Insights, pero que adopte este estándar de W3C.Enabling W3C headers will allow your app to correlate with other services not instrumented with Application Insights, but do adopt this W3C standard.

const appInsights = require("applicationinsights");
appInsights
  .setup("<your ikey>")
  .setDistributedTracingMode(appInsights.DistributedTracingModes.AI_AND_W3C)
  .start()

TelemetryClient APITelemetryClient API

Para obtener una descripción completa de TelemetryClient API, consulte API de Application Insights para eventos y métricas personalizados.For a full description of the TelemetryClient API, see Application Insights API for custom events and metrics.

Puede realizar el seguimiento de cualquier solicitud, evento, métrica o excepción mediante el SDK de Node.js de Application Insights.You can track any request, event, metric, or exception by using the Application Insights Node.js SDK. El ejemplo de código siguiente muestra algunas de las API que puede usar:The following code example demonstrates some of the APIs that you can use:

let appInsights = require("applicationinsights");
appInsights.setup().start(); // assuming ikey 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
});

Seguimiento de las dependenciasTrack your dependencies

Utilice el código siguiente para realizar el seguimiento de las dependencias:Use the following code to track your dependencies:

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"});;

A continuación se muestra una utilidad de ejemplo que usa trackMetric para medir el tiempo que tarda la programación del bucle de eventos:An example utility using trackMetric to measure how long event loop scheduling takes:

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);
}

Incorporación de una propiedad personalizada a todos los eventosAdd a custom property to all events

Utilice el código siguiente para agregar una propiedad personalizada a todos los eventos:Use the following code to add a custom property to all events:

appInsights.defaultClient.commonProperties = {
  environment: process.env.SOME_ENV_VARIABLE
};

Seguimiento de solicitudes HTTP GETTrack HTTP GET requests

Use el código siguiente para realizar un seguimiento manual de las solicitudes HTTP GET:Use the following code to manually track HTTP GET requests:

Nota

Se hace un seguimiento de todas las solicitudes de forma predeterminada.All requests are tracked by default. Para deshabilitar la recopilación automática, llame a .setAutoCollectRequests(false) antes de llamar a start().To disable automatic collection, call .setAutoCollectRequests(false) before calling start().

appInsights.defaultClient.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});

También puede realizar un seguimiento de las solicitudes mediante el método trackNodeHttpRequest:Alternatively you can track requests using trackNodeHttpRequest method:

var server = http.createServer((req, res) => {
  if ( req.method === "GET" ) {
      appInsights.defaultClient.trackNodeHttpRequest({request:req, response:res});
  }
  // other work here....
  res.end();
});

Seguimiento de la hora de inicio del servidorTrack server startup time

Utilice el código siguiente para realizar un seguimiento de la hora de inicio del servidor:Use the following code to track server startup time:

let start = Date.now();
server.on("listening", () => {
  let duration = Date.now() - start;
  appInsights.defaultClient.trackMetric({name: "server startup time", value: duration});
});

Preprocesamiento de datos con procesadores de telemetríaPreprocess data with telemetry processors

Puede procesar y filtrar los datos recopilados antes de enviarlos para su retención mediante el uso de procesadores de telemetría.You can process and filter collected data before it is sent for retention using Telemetry Processors. Los procesadores de telemetría se llaman de uno en uno en el orden en el que se han agregado antes de que el elemento de telemetría se envíe a la nube.Telemetry processors are called one by one in the order they were added before the telemetry item is sent to the cloud.

public addTelemetryProcessor(telemetryProcessor: (envelope: Contracts.Envelope, context: { http.RequestOptions, http.ClientRequest, http.ClientResponse, correlationContext }) => boolean)

Si un procesador de telemetría devuelve false, no se enviará el elemento de telemetría.If a telemetry processor returns false, that telemetry item will not be sent.

Todos los procesadores de telemetría reciben los datos de telemetría y su sobre para inspeccionarlos y modificarlos.All telemetry processors receive the telemetry data and its envelope to inspect and modify. También reciben un objeto de contexto.They also receive a context object. En el caso de la telemetría de seguimiento manual, el contenido de este objeto lo define el parámetro contextObjects cuando se llama a un método de seguimiento.The contents of this object is defined by the contextObjects parameter when calling a track method for manually tracked telemetry. Para la telemetría recopilada automáticamente, este objeto se llena con la información de solicitud disponible y el contenido de la solicitud persistente, tal como lo proporciona appInsights.getCorrelationContext() (si está habilitada la correlación automática de dependencias).For automatically collected telemetry, this object is filled with available request information and the persistent request content as provided by appInsights.getCorrelationContext() (if automatic dependency correlation is enabled).

El tipo de TypeScript de un procesador de telemetría es:The TypeScript type for a telemetry processor is:

telemetryProcessor: (envelope: ContractsModule.Contracts.Envelope, context: { http.RequestOptions, http.ClientRequest, http.ClientResponse, correlationContext }) => boolean;

Por ejemplo, un procesador que quita los datos de seguimiento de pilas de las excepciones podría escribirse y agregarse como se indica a continuación:For example, a processor that removes stacks trace data from exceptions might be written and added as follows:

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);

Uso de múltiples claves de instrumentaciónUse multiple instrumentation keys

Puede crear varios recursos de Application Insights y enviar distintos datos a cada uno de ellos con sus respectivas claves de instrumentación ("ikey").You can create multiple Application Insights resources and send different data to each by using their respective instrumentation keys ("ikey").

Por ejemplo:For example:

let appInsights = require("applicationinsights");

// configure auto-collection under one ikey
appInsights.setup("_ikey-A_").start();

// track some events manually under another ikey
let otherClient = new appInsights.TelemetryClient("_ikey-B_");
otherClient.trackEvent({name: "my custom event"});

Opciones de configuración avanzadaAdvanced configuration options

El objeto de cliente contiene una propiedad config con muchos valores de configuración opcionales para escenarios avanzados.The client object contains a config property with many optional settings for advanced scenarios. Estos valores pueden establecerse de la siguiente manera:These can be set as follows:

client.config.PROPERTYNAME = VALUE;

Las siguientes propiedades son específicas del cliente, por lo que puede configurar appInsights.defaultClient de forma independiente con respecto a los clientes creados con new appInsights.TelemetryClient().These properties are client specific, so you can configure appInsights.defaultClient separately from clients created with new appInsights.TelemetryClient().

PropiedadProperty DescripciónDescription
instrumentationKeyinstrumentationKey Identificador para el recurso de Application Insights.An identifier for your Application Insights resource.
endpointUrlendpointUrl Punto de conexión de ingesta al que se van a enviar las cargas de telemetría.The ingestion endpoint to send telemetry payloads to.
quickPulseHostquickPulseHost Host de Live Metrics Stream al que se va a enviar la telemetría de métricas en tiempo real.The Live Metrics Stream host to send live metrics telemetry to.
proxyHttpUrlproxyHttpUrl Servidor proxy para el tráfico HTTP del SDK (opcional, el valor predeterminado se extrae de la variable de entorno http_proxy).A proxy server for SDK HTTP traffic (Optional, Default pulled from http_proxy environment variable).
proxyHttpsUrlproxyHttpsUrl Servidor proxy para el tráfico HTTPS del SDK (opcional, el valor predeterminado se extrae de la variable de entorno https_proxy).A proxy server for SDK HTTPS traffic (Optional, Default pulled from https_proxy environment variable).
httpAgenthttpAgent Agente http.Agent que se usará para el tráfico HTTP del SDK (opcional, valor predeterminado sin definir).An http.Agent to use for SDK HTTP traffic (Optional, Default undefined).
httpsAgenthttpsAgent Agente https.Agent que se usará para el tráfico HTTPS del SDK (opcional, valor predeterminado sin definir).An https.Agent to use for SDK HTTPS traffic (Optional, Default undefined).
maxBatchSizemaxBatchSize Número máximo de elementos de telemetría que se incluirán en una carga en el punto de conexión de ingesta (el valor predeterminado es 250).The maximum number of telemetry items to include in a payload to the ingestion endpoint (Default 250).
maxBatchIntervalMsmaxBatchIntervalMs Cantidad máxima de tiempo que hay que esperar para que una carga alcance el tamaño máximo de lote, maxBatchSize (el valor predeterminado es 15000).The maximum amount of time to wait to for a payload to reach maxBatchSize (Default 15000).
disableAppInsightsdisableAppInsights Marca que indica si la transmisión de telemetría está deshabilitada (el valor predeterminado es false).A flag indicating if telemetry transmission is disabled (Default false).
samplingPercentagesamplingPercentage Porcentaje de elementos de telemetría de los que se realiza un seguimiento y que se deben transmitir (el valor predeterminado es 100).The percentage of telemetry items tracked that should be transmitted (Default 100).
correlationIdRetryIntervalMscorrelationIdRetryIntervalMs Tiempo de espera antes de volver a intentar recuperar el identificador para la correlación entre componentes (el valor predeterminado es 30000).The time to wait before retrying to retrieve the ID for cross-component correlation (Default 30000).
correlationHeaderExcludedDomainscorrelationHeaderExcludedDomains Lista de dominios que se excluirán de la inyección de encabezados de correlación entre componentes (para ver el valor predeterminado, consulte Config.ts).A list of domains to exclude from cross-component correlation header injection (Default See Config.ts).

Pasos siguientesNext steps