• /
  • EnglishEspañolFrançais日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.

Crea una propuesta

Procesador de filtro

El procesador de filtros descarta registros de telemetría o atributos específicos basados en expresiones booleanas de OTTL (Lenguaje de transformación de OpenTelemetry). Úselo para eliminar datos de prueba, logs de depuración, comprobaciones de estado o cualquier telemetría de bajo valor antes de que salga de su red.

Cuándo usar el procesador de filtros

Utilice el procesador de filtros cuando necesite:

  • Descartar PII o datos de entornos de prueba: Elimine los datos que no deben salir de su red
  • Elimine los logs de nivel de depuración de producción: Filtre por severidad para reducir el ruido
  • Filtrar solicitudes de verificación de estado: Descarte el tráfico de monitoreo repetitivo y de bajo valor
  • Descartar métricas con prefijos o patrones específicos: Elimine flujos de métricas innecesarios
  • Elimine la telemetría de bajo valor basada en atributos: Filtre por nombre del servicio, entorno o etiquetas personalizadas

Cómo funciona el procesador de filtros

El procesador de filtros evalúa expresiones booleanas OTTL contra cada registro de telemetría. Cuando una condición se evalúa como true, el registro se descarta.

Esto es lo opuesto a muchos lenguajes de consulta donde WHERE status = 'ERROR' significa "conservar errores". En el procesador de filtros, status == 'ERROR' significa "descartar errores".

Configuración

Agregue un procesador de filtros a su pipeline:

filter/Logs:
description: Apply drop rules and data processing for logs
output:
- transform/Logs
config:
error_mode: ignore
logs:
rules:
- name: drop the log records
description: drop all records which has severity text INFO
value: log.severity_text == "INFO"

Campos de configuración:

  • logs: Arreglo de expresiones booleanas OTTL para el filtrado de logs
  • span, span_event: Arreglo de expresiones booleanas OTTL para el filtrado de spans de trazas
  • metric, datapoint: Arreglo de expresiones booleanas OTTL para el filtrado de métricas

Múltiples condiciones: Cuando se proporcionan múltiples expresiones en el arreglo, se evalúan con lógica OR. Si alguna condición es verdadera, el registro se descarta.

Operadores booleanos de OTTL

Operadores de comparación

  • == - Igual a
  • != - No es igual a
  • < - Menor que
  • <= - Menor o igual que
  • > - Mayor que
  • >= - Mayor o igual que

Operadores logicos

  • and - Ambas condiciones deben ser verdaderas
  • or - Cualquiera de las condiciones debe ser verdadera
  • not - Niega una condición

Coincidencia de patrones

  • matches - Coincidencia de patrones de expresiones regulares
logs:
- 'body matches ".*health.*"'
- 'attributes["http.url"] matches ".*\\/api\\/v1\\/health.*"'

Ejemplos completos

Ejemplo 1: Eliminar datos del entorno de prueba

Elimine toda la telemetría de los entornos de pruebas y desarrollo:

filter/Logs:
description: "Drop non-production environments"
config:
error_mode: ignore
logs:
rules:
- name: drop-test-environment
description: Drop logs from test environment
value: resource.attributes["environment"] == "test"
- name: drop-dev-environment
description: Drop logs from dev environment
value: resource.attributes["environment"] == "dev"
- name: drop-local-environment
description: Drop logs from local environment
value: resource.attributes["environment"] == "local"

Ejemplo 2: Descartar logs de depuración en producción

Mantenga solo los niveles de log significativos en producción:

filter/Logs:
description: "Drop debug and trace logs"
config:
error_mode: ignore
logs:
rules:
- name: drop-debug-logs
description: Drop all DEBUG severity logs
value: severity_text == "DEBUG"
- name: drop-trace-logs
description: Drop all TRACE severity logs
value: severity_text == "TRACE"
- name: drop-low-severity-logs
description: Drop INFO and below severity logs
value: severity_number < 9

Referencia de números de severidad:

  • TRACE = 1-4
  • DEBUG = 5-8
  • INFORMACIÓN = 9-12
  • ADVERTENCIA = 13-16
  • ERROR = 17-20
  • FATAL = 21-24

Ejemplo 3: Descartar spans de verificación de estado

Elimine el tráfico de comprobación de estado que no aporta valor de diagnóstico:

filter/Traces:
description: "Drop health check spans"
config:
error_mode: ignore
span:
rules:
- name: drop-health-endpoint
description: Drop spans from /health endpoint
value: attributes["http.path"] == "/health"
- name: drop-healthz-endpoint
description: Drop spans from /healthz endpoint
value: attributes["http.path"] == "/healthz"
- name: drop-ping-endpoint
description: Drop spans from /ping endpoint
value: attributes["http.path"] == "/ping"
- name: drop-health-check-spans
description: Drop spans named health_check
value: name == "health_check"

Ejemplo 4: Descartar por nombre de servicio

Filtrar servicios específicos o patrones de servicio:

filter/Logs:
description: "Drop deprecated services"
config:
error_mode: ignore
logs:
rules:
- name: drop-legacy-api
description: Drop logs from legacy API v1 service
value: resource.attributes["service.name"] == "legacy-api-v1"
- name: drop-canary-services
description: Drop logs from canary deployment services
value: IsMatch(resource.attributes["service.name"], ".*-canary")

Ejemplo 5: Descartar métricas con prefijos específicos

Eliminar flujos de métricas innecesarios:

filter/Metrics:
description: "Drop internal metrics"
config:
error_mode: ignore
metric:
rules:
- name: drop-internal-metrics
description: Drop metrics with internal prefix
value: IsMatch(name, "^internal\\.")
- name: drop-test-metrics
description: Drop metrics with test prefix
value: IsMatch(name, "^test_")
- name: drop-debug-metrics
description: Drop metrics marked as debug type in resource attributes
value: resource.attributes["metric.type"] == "debug"
datapoint:
rules:
- name: drop-debug-datapoints
description: Drop datapoints marked as debug type
value: attributes["metric.type"] == "debug"

Ejemplo 6: Condiciones combinadas con AND

Descartar solo cuando múltiples condiciones sean verdaderas:

filter/Logs:
description: "Drop debug logs from specific service in test environment"
config:
error_mode: ignore
logs:
rules:
- name: drop-debug-logs-from-test
description: Drop DEBUG logs from background-worker service in test environment
value: |
severity_text == "DEBUG" and
resource.attributes["service.name"] == "background-worker" and
resource.attributes["environment"] == "test"

Ejemplo 7: Conservar errores, descartar todo lo demás

Invierta la lógica para conservar solo los datos valiosos:

filter/Logs:
description: "Drop non-error logs"
config:
error_mode: ignore
logs:
rules:
- name: drop-non-error-logs
description: Drop everything below ERROR severity level
value: severity_number < 17

O utilice la lógica NOT:

filter/Logs:
description: "Drop non-errors"
config:
error_mode: ignore
logs:
rules:
- name: drop-non-error-logs
description: Drop logs that are not ERROR or FATAL
value: not (severity_text == "ERROR" or severity_text == "FATAL")

Ejemplo 8: Coincidencia de patrones en el cuerpo del log

Descartar logs que contengan patrones específicos:

filter/Logs:
description: "Drop health check logs by body content"
config:
error_mode: ignore
logs:
rules:
- name: drop-health-check-logs
description: Drop logs with health check in body
value: IsMatch(body, ".*health check.*")
- name: drop-status-endpoint-logs
description: Drop logs with GET /status in body
value: IsMatch(body, ".*GET /status.*")
- name: drop-monitor-ok-logs
description: Drop logs with 200 OK monitor in body
value: IsMatch(body, ".*200 OK.*monitor.*")

Ejemplo 9: Descartar spans de alto volumen y bajo valor

Elimina los spans que aparecen con frecuencia pero aportan poco valor:

filter/Traces:
description: "Drop fast, successful cache hits"
config:
error_mode: ignore
span:
rules:
- name: drop-fast-cache-hits
description: Drop cache hit operations faster than 1ms
value: |
attributes["db.operation"] == "get" and
end_time_unix_nano - start_time_unix_nano < 1000000 and
attributes["cache.hit"] == true

Ejemplo 10: Descartar basado en el estado HTTP

Filtrar solicitudes exitosas, mantener errores:

filter/Traces:
description: "Drop successful HTTP requests"
config:
error_mode: ignore
span:
rules:
- name: drop-successful-requests
description: Drop HTTP requests with status code less than 400
value: attributes["http.status_code"] < 400

Ejemplo 11: Múltiples condiciones con OR

Descartar si alguna condición coincide:

filter/Logs:
description: "Drop test data, health checks, or debug logs"
config:
error_mode: ignore
logs:
rules:
- name: drop-test-health-debug
description: Drop logs from test environment, health checks, or debug severity
value: |
resource.attributes["environment"] == "test" or
IsMatch(body, ".*health.*") or
severity_text == "DEBUG"

Descartar datos vs. descartar atributos

El procesador de filtros puede descartar registros completos (como se muestra arriba) o descartar atributos específicos de los registros que se conservan.

Para eliminar atributos conservando el registro, debe usar la función delete_key() del procesador de transformación, no el procesador de filtrado. El procesador de filtros solo descarta registros completos.

Enfoque incorrecto (esto no funcionará):

filter/Logs:
config:
logs:
- 'delete attributes["sensitive_field"]' # This is not valid

Enfoque correcto (utilice el procesador de transformación en su lugar):

transform/Logs:
description: "Remove sensitive attribute"
config:
log_statements:
- delete_key(attributes, "sensitive_field")
output: ["filter/Logs"]

Consideraciones de rendimiento

  • El orden importa: Coloque los procesadores de filtros al principio de su pipeline para descartar datos no deseados antes de un procesamiento costoso
  • Combine condiciones: Utilice la lógica and/or en una sola expresión en lugar de encadenar múltiples procesadores de filtros
  • Rendimiento de expresiones regulares: La coincidencia de patrones con matches es más costosa que las comprobaciones de igualdad exacta. Use == cuando sea posible.

Ejemplo de ordenamiento eficiente:

steps:
receivelogs:
description: Receive logs from OTLP and New Relic proprietary sources
output:
- probabilistic_sampler/Logs
receivemetrics:
description: Receive metrics from OTLP and New Relic proprietary sources
output:
- filter/Metrics
receivetraces:
description: Receive traces from OTLP and New Relic proprietary sources
output:
- probabilistic_sampler/Traces
probabilistic_sampler/Logs:
description: Probabilistic sampling for all logs
output:
- filter/Logs
config:
global_sampling_percentage: 100
conditionalSamplingRules:
- name: sample the log records for ruby test service
description: sample the log records for ruby test service with 70%
sampling_percentage: 70
source_of_randomness: trace.id
condition: resource.attributes["service.name"] == "ruby-test-service"
probabilistic_sampler/Traces:
description: Probabilistic sampling for traces
output:
- filter/Traces
config:
global_sampling_percentage: 80
filter/Logs:
description: Apply drop rules and data processing for logs
output:
- transform/Logs
config:
error_mode: ignore
logs:
rules:
- name: drop the log records
description: drop all records which has severity text INFO
value: log.severity_text == "INFO"
filter/Metrics:
description: Apply drop rules and data processing for metrics
output:
- transform/Metrics
config:
error_mode: ignore
metric:
rules:
- name: drop entire metrics
description: delete the metric on basis of humidity_level_metric
value: (name == "humidity_level_metric" and IsMatch(resource.attributes["process_group_id"], "pcg_.*"))
datapoint:
rules:
- name: drop datapoint
description: drop datapoint on the basis of unit
value: (attributes["unit"] == "Fahrenheit" and (IsMatch(attributes["process_group_id"], "pcg_.*") or IsMatch(resource.attributes["process_group_id"], "pcg_.*")))
filter/Traces:
description: Apply drop rules and data processing for traces
output:
- transform/Traces
config:
error_mode: ignore
span:
rules:
- name: delete spans
description: deleting the span for a specified host
value: (attributes["host"] == "host123.example.com" and (IsMatch(attributes["control_group_id"], "pcg_.*") or IsMatch(resource.attributes["control_group_id"], "pcg_.*")))
span_event:
rules:
- name: Drop all the traces span event
description: Drop all the traces span event with name debug event
value: name == "debug_event"
transform/Logs:
description: Transform and process logs
output:
- nrexporter/newrelic
config:
log_statements:
- context: log
name: add new field to attribute
description: for otlp-test-service application add newrelic source type field
conditions:
- resource.attributes["service.name"] == "otlp-java-test-service"
statements:
- set(resource.attributes["source.type"],"otlp")
transform/Metrics:
description: Transform and process metrics
output:
- nrexporter/newrelic
config:
metric_statements:
- context: metric
name: adding a new attributes
description: 'adding a new field into a attributes '
conditions:
- resource.attributes["service.name"] == "payments-api"
statements:
- set(resource.attributes["application.name"], "compute-application")
transform/Traces:
description: Transform and process traces
output:
- nrexporter/newrelic
config:
trace_statements:
- context: span
name: remove the attribute
description: remove the attribute when service name is payment-service
conditions:
- resource.attributes["service.name"] == "payment-service"
statements:
- delete_key(resource.attributes, "service.version")

Referencia de expresiones booleanas de OTTL

Para la sintaxis completa de OTTL y operadores adicionales:

Próximos pasos

Copyright © 2026 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.