• /
  • EnglishEspañolFrançais日本語한국어Português
  • Se connecterDémarrer

Cette traduction automatique est fournie pour votre commodité.

En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.

Créer un problème

Processeur de filtre

Le processeur de filtrage supprime les enregistrements de télémétrie ou des attributs spécifiques en fonction d'expressions booléennes OTTL (OpenTelemetry Transformation Language). Utilisez-le pour supprimer les données de test, les logs de débogage, les vérifications de l'état ou toute télémétrie de faible valeur avant qu'elle ne quitte votre réseau.

Quand utiliser le processeur de filtre

Utilisez le processeur de filtre lorsque vous devez :

  • Supprimer les PII ou les données d'environnement de test: Supprimez les données qui ne doivent pas quitter votre réseau
  • Supprimer les logs de niveau debug de la production: filtrer par sévérité pour réduire le bruit
  • Filtrer les requêtes de vérification de l'état: exclure le trafic de monitoring répétitif et de faible valeur
  • Supprimer les métriques avec des préfixes ou des motifs spécifiques: Supprimez les flux de métriques inutiles
  • Supprimez la télémétrie de faible valeur en fonction des attributs: filtrez par nom de service, environnement ou tags personnalisés

Fonctionnement du processeur de filtrage

Le processeur de filtre évalue les expressions booléennes OTTL pour chaque enregistrement de télémétrie. Lorsqu'une condition est évaluée à true, l'enregistrement est rejeté.

C'est l'inverse de nombreux langages de requête où WHERE status = 'ERROR' signifie « conserver les erreurs ». Dans le processeur de filtre, status == 'ERROR' signifie « abandonner les erreurs ».

Configuration

Ajoutez un processeur de filtre à votre 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"

Champs de configuration:

  • logs: Tableau d'expressions booléennes OTTL pour le filtrage des logs
  • span, span_event: Tableau d'expressions booléennes OTTL pour le filtrage des spans de trace
  • metric, datapoint: Tableau d'expressions booléennes OTTL pour le filtrage des métriques

Conditions multiples: lorsque vous fournissez plusieurs expressions dans le tableau, elles sont évaluées avec une logique OU. Si l'une des conditions est vraie, l'enregistrement est rejeté.

Opérateurs booléens OTTL

Opérateurs de comparaison

  • == - Égal à
  • != - Différent de
  • < - Inférieur à
  • <= - Inférieur ou égal à
  • > - Supérieur à
  • >= - Supérieur ou égal à

Opérateurs logiques

  • and - Les deux conditions doivent être vraies
  • or - L'une des conditions doit être vraie
  • not - Nie une condition

Correspondance de motifs

  • matches - Correspondance de motifs Regex
logs:
- 'body matches ".*health.*"'
- 'attributes["http.url"] matches ".*\\/api\\/v1\\/health.*"'

Exemples complets

Exemple 1 : Supprimer les données de l'environnement de test

Supprimer toute la télémétrie des environnements de test et de développement :

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"

Exemple 2 : Supprimer les logs de debug en production

Conservez uniquement les niveaux de log pertinents en production :

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

Référence du numéro de sévérité:

  • TRACE = 1-4
  • DEBUG = 5-8
  • INFO = 9-12
  • WARN = 13-16
  • ERREUR = 17-20
  • FATAL = 21-24

Exemple 3 : Supprimer les spans de contrôle de santé

Supprimez le trafic de contrôle de santé qui n'apporte aucune valeur diagnostique :

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"

Exemple 4 : Supprimer par nom de service

Filtrer des services spécifiques ou des modèles de service :

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

Exemple 5 : Supprimer les métriques avec des préfixes spécifiques

Supprimer les flux de métriques inutiles :

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"

Exemple 6 : Conditions combinées avec AND

Supprimer uniquement lorsque plusieurs conditions sont vraies :

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"

Exemple 7 : Conserver les erreurs, abandonner tout le reste

Inversez la logique pour ne conserver que les données utiles :

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

Ou utilisez la logique 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")

Exemple 8 : Correspondance de motifs dans le corps du log

Supprimer les logs contenant des motifs spécifiques :

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.*")

Exemple 9 : Supprimer les spans à volume élevé et de faible valeur

Supprimez les spans qui apparaissent fréquemment mais apportent peu de valeur :

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

Exemple 10 : Suppression basée sur le statut HTTP

Filtrer les requêtes réussies, conserver les erreurs :

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

Exemple 11 : Conditions multiples avec OR

Supprimer si une condition correspond :

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"

Suppression de données vs suppression d'attributs

Le processeur de filtre peut supprimer des enregistrements entiers (comme indiqué ci-dessus) ou supprimer des attributs spécifiques des enregistrements conservés.

Pour supprimer des attributs tout en conservant l'enregistrement, vous devez utiliser la fonction delete_key() du processeur de transformation, et non le processeur de filtre. Le processeur de filtre supprime uniquement des enregistrements entiers.

Mauvaise approche (cela ne fonctionnera pas) :

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

Approche correcte (utilisez plutôt le processeur de transformation) :

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

Considérations relatives aux performances

  • L'ordre est important: placez les processeurs de filtrage au début de votre pipeline pour supprimer les données indésirables avant les traitements coûteux
  • Combiner les conditions: Utilisez la logique and/or dans une seule expression plutôt que de chaîner plusieurs processeurs de filtrage
  • Performance des regex: La correspondance de motifs avec matches est plus coûteuse que les vérifications d'égalité exacte. Utilisez == si possible.

Exemple d'ordonnancement efficace:

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

Référence des expressions booléennes OTTL

Pour la syntaxe OTTL complète et les opérateurs supplémentaires :

Prochaines étapes

Droits d'auteur © 2026 New Relic Inc.

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