Filtrar Azure Monitor OpenTelemetry para aplicaciones en .NET, Java, Node.js y Python

Use esta guía para filtrar los datos de OpenTelemetry (OTel) en Azure Monitor Application Insights. El filtrado le ayuda a excluir telemetría innecesaria y a evitar la recopilación de datos confidenciales para optimizar el rendimiento y garantizar el cumplimiento.

Entre los motivos para filtrar la telemetría se incluyen:

  • Filtrar la telemetría de verificación de salud para reducir la interferencia.
  • Asegurar que no se recopilen los datos personales ni las credenciales.
  • Filtrar la telemetría de bajo valor para optimizar el rendimiento.

Para más información sobre los conceptos de OpenTelemetry, revise la introducción a OpenTelemetry.

Nota:

Para las aplicaciones de Azure Function, consulte Usar OpenTelemetry con Azure Functions.

Filtrado de OpenTelemetry mediante bibliotecas de instrumentación

Para obtener una lista de todas las bibliotecas de instrumentación incluidas con la distribución Azure Monitor OpenTelemetry, revise Configurar la recopilación automática de datos y los detectores de recursos para Azure Monitor OpenTelemetry.

Muchas bibliotecas de instrumentación proporcionan una opción de filtrado. Para obtener instrucciones, revise los archivos Léame correspondientes:

Nota:

Actualmente, la distribución de OpenTelemetry de Azure Monitor incluye una copia del código fuente de instrumentación de SqlClient para garantizar la estabilidad mientras la biblioteca SqlClient original de OpenTelemetry sigue siendo experimental.

Las opciones como SetDbStatementForStoredProcedure no se pueden usar en nuestra distribución porque el código está incrustado y no hace referencia al paquete externo.

Una vez que la instrumentación SqlClient alcanza una versión estable, Azure Monitor pasa a hacer referencia al paquete oficial y la personalización a través de builder.AddSqlClientInstrumentation(options => { ... }) está disponible.

Filtrado de telemetría mediante procesadores de intervalo

  1. Use un procesador personalizado:

    Sugerencia

    Agregue el procesador que se muestra aquí before agregando Azure Monitor.

    // Create an ASP.NET Core application builder.
    var builder = WebApplication.CreateBuilder(args);
    
    // Configure the OpenTelemetry tracer provider to add a new processor named ActivityFilteringProcessor.
    builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => builder.AddProcessor(new ActivityFilteringProcessor()));
    // Configure the OpenTelemetry tracer provider to add a new source named "ActivitySourceName".
    builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => builder.AddSource("ActivitySourceName"));
    // Add the Azure Monitor telemetry service to the application. This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor();
    
    // Build the ASP.NET Core application.
    var app = builder.Build();
    
    // Start the ASP.NET Core application.
    app.Run();
    
  2. Agregue ActivityFilteringProcessor.cs al project con el código siguiente:

    public class ActivityFilteringProcessor : BaseProcessor<Activity>
    {
        // The OnStart method is called when an activity is started. This is the ideal place to filter activities.
        public override void OnStart(Activity activity)
        {
            // prevents all exporters from exporting internal activities
            if (activity.Kind == ActivityKind.Internal)
            {
                activity.IsAllDataRequested = false;
            }
        }
    }
    

Si un determinado origen no se agrega de manera explícita mediante AddSource("ActivitySourceName"), no se exporta ninguna de las actividades creadas con ese origen.

Filtrar la telemetría al momento de la ingesta mediante reglas de recopilación de datos

Reduzca el ruido o normalice la telemetría antes de que Azure Monitor la almacene en un área de trabajo de Log Analytics. Para lograr ese objetivo, use transformaciones en tiempo de ingesta en una regla de recopilación de datos (DCR) para filtrar o modificar la telemetría después de que Azure Monitor la reciba.

Las transformaciones usan una instrucción del lenguaje de consulta kusto (KQL) que se ejecuta en cada registro ingerido.

Use una DCR de transformación del área de trabajo para las tablas de Application Insights. Un espacio de trabajo de Log Analytics admite un DCR de transformación del espacio de trabajo. Coloque todas las transformaciones de esa área de trabajo en el mismo DCR.

La activación puede tardar hasta 60 minutos después de una actualización.

Use estos recursos para obtener más información:

Mapeo de señales de OpenTelemetry a tablas de Log Analytics

Application Insights almacena señales comunes de OpenTelemetry (OTel) en estas tablas:

  • AppTraces (registros)
  • AppRequests (solicitudes entrantes)
  • AppDependencies (dependencias salientes)
  • AppExceptions (excepciones)
  • AppMetrics (métricas)

En una DCR de transformación del área de trabajo, use el formato de nombre de flujo Microsoft-Table-<TableName> para cada tabla. Por ejemplo, use Microsoft-Table-AppRequests para la AppRequests tabla.

Nota:

Un DCR de transformación del área de trabajo se aplica a todos los datos ingeridos en las tablas seleccionadas de ese área de trabajo de Log Analytics. Si varias aplicaciones comparten el mismo área de trabajo, defina el alcance de cada transformación mediante un filtro como AppRoleName o ResourceGUID.

Uso de ejemplos de DCR de transformación de área de trabajo

En los ejemplos siguientes se muestra la transformación del área de trabajo DCR JSON. Use dataFlows para definir una transformación por tabla. Deje transformKql en una sola línea en la definición de DCR.


Crea una plantilla de DCR para la transformación del espacio de trabajo

Use esta plantilla para crear un DCR de transformación del área de trabajo. Reemplace <workspace-location> y <workspace-resource-id> por los valores del área de trabajo de Log Analytics.

{
  "kind": "WorkspaceTransforms",
  "location": "<workspace-location>",
  "properties": {
    "dataSources": {},
    "destinations": {
      "logAnalytics": [
        {
          "workspaceResourceId": "<workspace-resource-id>",
          "name": "laDest"
        }
      ]
    },
    "dataFlows": [
      {
        "streams": ["Microsoft-Table-AppRequests"],
        "destinations": ["laDest"],
        "transformKql": "source"
      }
    ]
  }
}
Quitar un tipo de telemetría quitando una tabla

Use este ejemplo para bloquear un tipo de telemetría completo, como todos los seguimientos o todas las solicitudes.

Agregue un flujo de datos por cada tabla que quiera eliminar.

[
  {
    "streams": ["Microsoft-Table-AppTraces"],
    "destinations": ["laDest"],
    "transformKql": "source | where 1 == 0"
  },
  {
    "streams": ["Microsoft-Table-AppRequests"],
    "destinations": ["laDest"],
    "transformKql": "source | where 1 == 0"
  },
  {
    "streams": ["Microsoft-Table-AppDependencies"],
    "destinations": ["laDest"],
    "transformKql": "source | where 1 == 0"
  },
  {
    "streams": ["Microsoft-Table-AppExceptions"],
    "destinations": ["laDest"],
    "transformKql": "source | where 1 == 0"
  },
  {
    "streams": ["Microsoft-Table-AppMetrics"],
    "destinations": ["laDest"],
    "transformKql": "source | where 1 == 0"
  }
]
Descartar solicitudes de comprobación de estado

Usa este ejemplo para quitar puntos de conexión comunes de estado, preparación y ejecución.

{
  "streams": ["Microsoft-Table-AppRequests"],
  "destinations": ["laDest"],
  "transformKql": "source | extend url = tolower(tostring(Url)) | where not(url contains '/health' or url contains '/healthz' or url contains '/ready' or url contains '/readyz' or url contains '/live' or url contains '/livez') | project-away url"
}
Mantener solo las solicitudes de verificación de estado que fallen

Usa este ejemplo para mantener comprobaciones de estado fallidas y descartar comprobaciones de estado correctas.

{
  "streams": ["Microsoft-Table-AppRequests"],
  "destinations": ["laDest"],
  "transformKql": "source | extend url = tolower(tostring(Url)) | where not((url contains '/health' or url contains '/healthz' or url contains '/ready' or url contains '/readyz' or url contains '/live' or url contains '/livez') and Success == true) | project-away url"
}
Mantener solo solicitudes fallidas o lentas

Use este ejemplo para mantener las solicitudes que produzcan errores o superen un umbral de latencia.

{
  "streams": ["Microsoft-Table-AppRequests"],
  "destinations": ["laDest"],
  "transformKql": "source | where Success == false or DurationMs >= 1000"
}
Mantener solo advertencias y seguimientos de nivel superior

Utilice este ejemplo para mantener registros de trazabilidad con SeverityLevel de Warning (2), Error (3) o Critical (4).

{
  "streams": ["Microsoft-Table-AppTraces"],
  "destinations": ["laDest"],
  "transformKql": "source | where SeverityLevel >= 2"
}
Conservar solo las dependencias que presentan errores o lentitud

Use este ejemplo para mantener llamadas de dependencia que produzcan errores o superen un umbral de latencia.

{
  "streams": ["Microsoft-Table-AppDependencies"],
  "destinations": ["laDest"],
  "transformKql": "source | where Success == false or DurationMs >= 500"
}
Eliminación de instrucciones SQL de datos de dependencia

Utilice este ejemplo para quitar instrucciones SQL almacenadas en la columna Data, mientras mantiene la información de dependencia y éxito.

{
  "streams": ["Microsoft-Table-AppDependencies"],
  "destinations": ["laDest"],
  "transformKql": "source | extend dependencyType = tolower(tostring(DependencyType)) | extend Data = iff(dependencyType == 'sql', '', Data) | project-away dependencyType"
}
Eliminación del tráfico sintético

Use este ejemplo para quitar registros que incluyan un SyntheticSource valor.

{
  "streams": ["Microsoft-Table-AppRequests"],
  "destinations": ["laDest"],
  "transformKql": "source | where isempty(SyntheticSource)"
}
Quitar excepciones de cancelación

Use este ejemplo para quitar los tipos de excepción de cancelación comunes.

{
  "streams": ["Microsoft-Table-AppExceptions"],
  "destinations": ["laDest"],
  "transformKql": "source | where not(ExceptionType contains 'OperationCanceledException' or ExceptionType contains 'TaskCanceledException')"
}
Eliminación de direcciones IP de cliente y cadenas de consulta

Use este ejemplo para quitar direcciones IP de cliente y almacenar direcciones URL sin cadenas de consulta.

[
  {
    "streams": ["Microsoft-Table-AppRequests"],
    "destinations": ["laDest"],
    "transformKql": "source | extend Url = tostring(split(tostring(Url), '?')[0]) | project-away ClientIP"
  },
  {
    "streams": ["Microsoft-Table-AppDependencies"],
    "destinations": ["laDest"],
    "transformKql": "source | extend Data = tostring(split(tostring(Data), '?')[0]) | project-away ClientIP"
  }
]
Delimitar el ámbito de una transformación a un solo servicio

Use este ejemplo para definir el ámbito de una transformación en un único servicio cuando varias aplicaciones comparten un área de trabajo.

{
  "streams": ["Microsoft-Table-AppRequests"],
  "destinations": ["laDest"],
  "transformKql": "source | where AppRoleName == '<app-role-name>' | where Success == false or DurationMs >= 1000"
}

Solución de problemas, comentarios y soporte técnico

Sugerencia

Las siguientes secciones están disponibles en todos los artículos de la distro de OpenTelemetry.

Solución de problemas

Comentarios de OpenTelemetry

Para proporcionar comentarios:

Apoyo

Seleccione una pestaña para el idioma que prefiera para detectar las opciones de soporte técnico.

  • Para los problemas de soporte de Azure, abra un ticket de soporte de Azure.
  • En caso de problemas de OpenTelemetry, póngase en contacto con la comunidad de .NET de OpenTelemetry directamente.
  • Para obtener una lista de problemas abiertos relacionados con el exportador de Azure Monitor, consulte la página de problemas de GitHub.

Pasos siguientes