Invalidaciones de muestreo: Azure Monitor Application Insights para Java

Nota:

La característica de invalidaciones de muestreo está disponible con carácter general a partir de 3.5.0.

Las invalidaciones de muestreo permiten invalidar el porcentaje de muestreo predeterminado, por ejemplo:

  • Establezca el porcentaje de muestreo en cero (o algún valor pequeño) para las comprobaciones de estado irrelevantes.
  • Establezca el porcentaje de muestreo en cero (o algún valor pequeño) para las llamadas de dependencia irrelevantes.
  • Establezca el porcentaje de muestreo en 100 para un tipo de solicitud importante (por ejemplo, /login) aunque tenga configurado el muestreo por defecto en algo inferior.

Terminología

Antes de obtener información sobre las invalidaciones de muestreo, debe comprender el término intervalo. Un intervalo es un término general para:

  • Un solicitud entrante
  • Una dependencia saliente (por ejemplo, una llamada remota a otro servicio)
  • Una dependencia en proceso (por ejemplo, trabajo realizado por los subcomponentes del servicio)

En el caso de las invalidaciones de muestreo, estos componentes de intervalo son importantes:

  • Atributos

Los atributos de intervalo representan tanto propiedades estándar como personalizadas de una determinada solicitud o dependencia.

Introducción

Para empezar, cree un archivo de configuración denominado applicationinsights.json. Guárdelo en el mismo directorio que applicationinsights-agent-*.jar. Use la siguiente plantilla.

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10,
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 0
      },
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 100
      }
    ]
  }
}

Funcionamiento

telemetryType (telemetryKind en Application Insights 3.4.0) debe ser uno de request, dependency, trace (registro) o exception.

Cuando se inicia un intervalo, el tipo de intervalo y los atributos presentes en él en ese momento se usan para comprobar si alguna de las invalidaciones de muestreo coinciden.

Las coincidencias pueden ser strict o regexp. Las coincidencias de expresiones regulares se realizan en todo el valor del atributo, por lo que si desea hacer coincidir un valor que contiene abc en cualquier parte de él, debe usar .*abc.*. Una invalidación de muestreo puede especificar varios criterios de atributo, en cuyo caso todos deben coincidir para que coincida la invalidación de muestreo.

Si una de las invalidaciones de muestreo coincide, su porcentaje de muestreo se usa para decidir si se muestrea o no el intervalo.

Solo se utiliza la primera invalidación de muestreo que coincida.

Si no coincide ninguna invalidación de muestreo:

Ejemplo: eliminación de la recopilación de datos de telemetría en las comprobaciones del estado.

Este ejemplo suprime la recolección de telemetría para todas las solicitudes a /health-checks.

Este ejemplo también suprime la recolección de cualquier tramo descendente (dependencias) que normalmente se recogería bajo /health-checks.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/health-check",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

Ejemplo: eliminación de la recopilación de datos de telemetría en una llamada de dependencia con ruido.

Este ejemplo suprime la recolección de telemetría para todas las GET my-noisy-key llamadas a redis.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "dependency",
        "attributes": [
          {
            "key": "db.system",
            "value": "redis",
            "matchType": "strict"
          },
          {
            "key": "db.statement",
            "value": "GET my-noisy-key",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

Ejemplo: recopilación del 100 % de datos de telemetría en un tipo de solicitud importante

Este ejemplo recolecta el 100 % de la telemetría para /login.

Dado que los tramos descendentes (dependencias) respetan la decisión de muestreo de los padres (en ausencia de cualquier anulación de muestreo para ese tramo descendente), estos también se recolectan para todas las solicitudes "/login".

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10
  },
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/login",
            "matchType": "strict"
          }
        ],
        "percentage": 100
      }
    ]
  }
}

Atributos de intervalo disponibles para el muestreo

Los nombres de atributo de intervalo se basan en las convenciones semánticas de OpenTelemetry. (HTTP, mensajería, base de datos, RPC)

https://github.com/open-telemetry/semantic-conventions/blob/main/docs/README.md

Nota:

Para ver el conjunto exacto de atributos capturados por Java de Application Insights para la aplicación, establezca el nivel de autodiagnóstico en depuración y busque mensajes de depuración empezando por el texto "exporting span".

Nota:

Solo los atributos establecidos al principio del intervalo están disponibles para el muestreo, por lo que los atributos como http.response.status_code o la duración de la solicitud que se capturan posteriormente se pueden filtrar a través de las extensiones de Java OpenTelemetry. Esta es una extensión de ejemplo que filtra los intervalos en función de la duración de la solicitud.

Solución de problemas

Si utiliza regexp y no funciona la anulación de muestreo, pruebe con la .* regex. Si el muestreo ahora funciona, significa que tiene un problema con la primera regex y leer esta documentación regex.

Si no funciona con .*, es posible que tenga un problema de sintaxis en application-insights.json file. Revise los registros de Application Insights y compruebe si observa mensajes de advertencia.