Actualización del SDK de Java de Application Insights 2.x

Normalmente, no hay cambios en el código al actualizar a 3.x. Las dependencias del SDK 3.x son versiones de API no relacionadas con operaciones de las dependencias del SDK 2.x. Sin embargo, cuando se usan con el agente de Java 3.x, el agente de Java 3.x proporciona la implementación para estas. Como resultado, la instrumentación personalizada se correlaciona con todas las nuevas instrucciones automáticas proporcionadas por el agente de Java 3.x.

Paso 1: actualización de las dependencias

Dependencia 2.x Acción Comentarios
applicationinsights-core Actualice a la versión 3.4.3 o posterior
applicationinsights-web Actualice la versión a 3.4.3 o posterior y quite el filtro web de Application Insights del archivo web.xml.
applicationinsights-web-auto Reemplazar por 3.4.3 o posterior de applicationinsights-web
applicationinsights-logging-log4j1_2 Quite la dependencia y el appender de Application Insights de su configuración de Log4j. Ya no es necesario porque Log4j 1.2 está instrumentado automáticamente en el agente Java 3.x.
applicationinsights-logging-log4j2 Quite la dependencia y el appender de Application Insights de su configuración de Log4j. Ya no es necesario porque Log4j 2 está instrumentado automáticamente en el agente Java 3.x.
applicationinsights-logging-logback Quite la dependencia y el appender de Application Insights de su configuración de Logback. Ya no es necesario porque Logback está instrumentado automáticamente en el agente Java 3.x.
applicationinsights-spring-boot-starter Reemplazar por 3.4.3 o posterior de applicationinsights-web El nombre del rol en la nube ya no tiene spring.application.name como valor predeterminado. Para obtener información sobre cómo configurar el nombre del rol en la nube, consulte los documentos de configuración de 3.x.

Paso 2: agregar el agente de Java 3.x

Agregue el agente de Java 3.x a los argumentos de línea de comandos de la Máquina virtual Java (JVM), por ejemplo:

-javaagent:path/to/applicationinsights-agent-3.5.2.jar

Si está utilizando el agente Java de Application Insights 2.x, solo tiene que reemplazar su -javaagent:... actual por el ejemplo anterior.

Nota:

Si utilizabas el spring-boot-starter y si lo prefieres, existe una alternativa al uso del agente Java Consulte 3.x Spring Boot.

Paso 3: configuración de la cadena de conexión de Application Insights

Consulte la configuración de la cadena de conexión.

Otras notas

En el resto de este documento, se describen las limitaciones y los cambios que puede encontrar al actualizar de 2.x a 3.x, y algunas soluciones alternativas que pueden resultar útiles.

TelemetryInitializers

Los TelemetryInitializers del SDK 2.x no se ejecutan cuando se use el agente 3.x. Muchos de los casos de uso que anteriormente requerían escribir TelemetryInitializer se pueden resolver en Application Insights Java 3.x mediante la configuración de dimensiones personalizadas. O mediante atributos heredados.

TelemetryProcessors

Los TelemetryProcessors del SDK 2.x no se ejecutan cuando se use el agente 3.x. Muchos de los casos de uso que anteriormente requerían escribir TelemetryProcessor se pueden resolver en Application Insights Java 3.x mediante la configuración de invalidaciones de muestreo.

Varias aplicaciones en una sola máquina virtual Java

Este caso de uso se admite en Java 3.x de Application Insights mediante invalidaciones de nombre de rol en la nube (versión preliminar) o invalidaciones de cadena de conexión (versión preliminar).

Nombres de operación

En el SDK de Application Insights Java 2.x, en algunos casos, los nombres de las operaciones contenían la ruta de acceso completa, por ejemplo:

Captura de pantalla que muestra los nombres de las operaciones con la ruta de acceso completa

Los nombres de las operaciones de Application Insights Java 3.x han cambiado para proporcionar una mejor vista agregada en la experiencia del usuario con el portal de Application Insights, por ejemplo:

Captura de pantalla que muestra los nombres de operación con parámetros

Sin embargo, para algunas aplicaciones, es posible que aún prefiera la vista agregada en la experiencia de usuario proporcionada por los nombres de operación anteriores. En este caso, puede usar la característica procesadores de telemetría (versión preliminar) en 3.x para replicar el comportamiento anterior.

En el siguiente fragmento de código, se configuran tres procesadores de telemetría que se combinan para replicar el comportamiento anterior. Los procesadores de telemetría realizan las siguientes acciones (en orden):

  1. El primer procesador de telemetría es un procesador de atributos (tiene el tipo attribute), lo que significa que se aplica a toda la telemetría que tiene atributos (actualmente requests y dependencies, pero pronto también traces).

    Coincide con cualquier telemetría que tenga atributos denominados http.request.method y url.path.

    A continuación, extrae el atributo url.path en un nuevo atributo denominado tempName.

  2. El segundo procesador de telemetría es un procesador de intervalos (tiene el tipo span), lo que significa que se aplica a requests y dependencies.

    Coincide con cualquier intervalo que tenga un atributo denominado tempPath.

    Después, actualiza el nombre del intervalo del atributo tempPath.

  3. El último procesador de telemetría es un procesador de atributos, del mismo tipo que el primer procesador de telemetría.

    Coincide con cualquier telemetría que tenga un atributo denominado tempPath.

    A continuación, elimina el atributo denominado tempPath y el atributo aparece como una dimensión personalizada.

{
  "preview": {
    "processors": [
      {
        "type": "attribute",
        "include": {
          "matchType": "strict",
          "attributes": [
            { "key": "http.request.method" },
            { "key": "url.path" }
          ]
        },
        "actions": [
          {
            "key": "url.path",
            "pattern": "https?://[^/]+(?<tempPath>/[^?]*)",
            "action": "extract"
          }
        ]
      },
      {
        "type": "span",
        "include": {
          "matchType": "strict",
          "attributes": [
            { "key": "tempPath" }
          ]
        },
        "name": {
          "fromAttributes": [ "http.request.method", "tempPath" ],
          "separator": " "
        }
      },
      {
        "type": "attribute",
        "include": {
          "matchType": "strict",
          "attributes": [
            { "key": "tempPath" }
          ]
        },
        "actions": [
          { "key": "tempPath", "action": "delete" }
        ]
      }
    ]
  }
}