Un servicio puede administrar una variedad de solicitudes, algunas de las cuales puede que no quieras que se rastreen o se incluyan en las métricas de trazas. Un ejemplo de esto son, posiblemente, los checks de estado en una aplicación web. Esta documentación cubre dos opciones principales: muestreo y filtrado.
Si necesitas ayuda para decidir cuál opción es la más adecuada para tu caso de uso, ponte en contacto con asistencia técnica de Datadog.
Muestreo
Si quieres que el tramo (span) se incluya en las métricas de trazas pero no quieres que se ingiera, utiliza reglas de muestreo. Para obtener más información sobre el muestreo, consulta Controles de ingesta.
Utilización de reglas de muestreo
El enfoque de recomendado consiste en utilizar reglas de muestreo, que permiten muestrear trazas en función de los nombres de los recursos, los nombres de los servicios, las etiquetas (tags) y los nombres de las operaciones:
Las decisiones de muestreo se determinan utilizando el primer tramo de una traza. Si el tramo que contiene la etiqueta con la que quieres filtrar no es una Un tramo es un tramo raíz de la traza cuando es el primer tramo de una traza. El tramo raíz es el método de entrada de la solicitud rastreada. Su inicio marca el comienzo de la traza.Glossary, esta regla no se aplica.
Filtrado
Si no quieres que se ingiera el tramo y no quiere que se refleje en las métricas de trazas, utiliza el filtrado.
Existen dos formas de especificar que un punto de conexión de este tipo no debe rastrearse y debe excluirse de las métricas de trazas:
El componente Trace Agent dentro del Datadog Agent tiene dos métodos para evitar que aparezcan ciertas trazas: ignorar etiquetas de tramos o ignorar recursos. Si se descartan trazas debido a esta configuración, las métricas de trazas excluyen estas solicitudes.
La configuración del Trace Agent para ignorar ciertos tramos o recursos se aplica a todos los servicios que envían trazas a este Datadog Agent particular. Si tienes requisitos específicos de la aplicación, utiliza, en su lugar, el método de Configuración del rastreador.
Ignorar en función de las etiquetas de tramos
Empezando con el Datadog Agent 6.27.0/7.27.0, con la opción filtrar por etiquetas, se descartan trazas con tramos de raíz que coincidan con etiquetas de tramos especificadas. Esta opción se aplica a todos los servicios que envían trazas a este Datadog Agent particular. Las trazas que se descartan debido al filtro por etiquetas no se incluyen en las métricas de trazas.
Si puedes identificar mediante programación un conjunto de trazas que sabes que no quieres enviar a Datadog y ninguna otra opción de esta guía resuelve tu necesidad, puedes considerar añadir una etiqueta de tramo personalizada para poder descartar las trazas. Ponte en contacto con el servicio de soporte técnico para tratar tu caso de uso con más detalle, de modo que Datadog pueda seguir ampliando esta funcionalidad.
La opción de filtrar por etiquetas requiere una coincidencia exacta de las cadenas. Si tu caso de uso requiere ignorar por expresiones regulares, consulta Ignorar en función de los recursos.
Puedes especificar etiquetas de tramos para requerir o rechazar utilizando un lista de claves y valores separados por espacios en variables de entorno:
DD_APM_FILTER_TAGS_REQUIRE
Recopila solo las trazas que tienen tramos de raíz con una coincidencia exacta con las etiquetas de tramos y valores especificados. Si no coincide con esta regla, se descarta la traza. Por ejemplo, DD_APM_FILTER_TAGS_REQUIRE="key1:value1 key2:value2". En el Datadog Agent 7.49+, las expresiones regulares pueden estar provistas de DD_APM_FILTER_TAGS_REGEX_REQUIRE.
DD_APM_FILTER_TAGS_REJECT
Rechaza las trazas que tienen tramos de raíz con una coincidencia exacta con las etiquetas de tramos y valores especificados. Si coincide con esta regla, se descarta la traza. Por ejemplo, DD_APM_FILTER_TAGS_REJECT="key1:value1 key2:value2". En el Datadog Agent 7.49+, las expresiones regulares pueden estar provistas de DD_APM_FILTER_TAGS_REGEX_REJECT.
También las puedes configurar en la configuración del Agent con una lista separada por comas:
Al filtrar trazas de esta manera, se eliminan estas solicitudes de las métricas de trazas. Para obtener más información sobre cómo reducir el consumo sin afectar las métricas de trazas, consulta Controles de consumo.
En el backend, Datadog crea y añade las siguientes etiquetas de tramos a los tramos después de la ingesta. Ten en cuenta que estas etiquetas no se pueden utilizar para eliminar trazas a nivel del Datadog Agent, ya que el Agent solo filtra en función de las etiquetas disponibles antes de la ingesta.
Nombre
Descripción
http.path_group
La ruta de acceso de URL completa desde la etiqueta http.url.
http.url_details.host
La parte del nombre de host de la etiqueta http.url.
http.url_details.path
El destino completo de la solicitud tal y como se pasa en una línea de solicitud HTTP o equivalente.
http.url_details.scheme
El esquema de solicitud de la etiqueta http.url.
http.url_details.queryString
La parte de la cadena de consulta de la etiqueta http.url.
http.url_details.port
El puerto HTTP de la etiqueta http.url.
http.useragent_details.os.family
La familia del SO informada por el User-Agent.
http.useragent_details.browser.family
La familia de navegadores informada por el User-Agent.
http.useragent_details.device.family
La familia de dispositivos informada por el User-Agent.
A partir del 1 de octubre de 2022, el backend de Datadog implementa una reasignación para aplicar la Semántica de etiquetas de tramos
en los rastreadores en todos los tramos ingeridos. Si quieres descartar tramos en función de las etiquetas a nivel del Datadog Agent, utiliza las etiquetas de la columna Reasignar desde.
Comunicaciones de red
Nombre
Reasignar desde
network.host.ip
tcp.local.address - Node.js
network.destination.ip
out.host - Todos los lenguajes
network.destination.port
grpc.port - Python tcp.remote.port - Node.js out.port - Todos los lenguajes
grpc.request.metadata.* - Python, Node.js rpc.grpc.request.metadata - Go
rpc.grpc.response.metadata.*
grpc.response.metadata.* - Python, Node.js
Errores
Nombre
Reasignar desde
error.message
error.msg - Todos los lenguajes
Ignorar en función de los recursos
La opción ignorar recursos permite excluir recursos si el tramo de raíz global de la traza coincide con determinados criterios. Consulta Excluir recursos de la recopilación. Esta opción se aplica a todos los servicios que envían trazas a este Datadog Agent particular. Las trazas que se descartan porque se ignoran recursos no se incluyen en las métricas de trazas.
Puedes especificar los recursos que deseas ignorar en el archivo de configuración del Agent, datadog.yaml o con la variable de entorno DD_APM_IGNORE_RESOURCES. Consulta los ejemplos siguientes.
Utilización de Datadog.yaml:
datadog.yaml
apm_config:## @param ignore_resources - lista de cadenas - opcional## Se puede proporcionar un lista de expresiones regulares para excluir determinados trazas en función del nombre del recurso.## Todas las entradas deben ir entre comillas dobles y separadas por comas.ignore_resources:["(GET|POST) /healthcheck","API::NotesController#index"]
Cuando se utiliza el formato de variable de entorno (DD_APM_IGNORE_RESOURCES), los valores deben proporcionarse como una lista de cadenas separadas por comas.
La sintaxis de las expresiones regulares que acepta el Trace Agent se evalúa con expresiones regulares de Go.
Según cuál sea tu estrategia de despliegue, puedes tener que ajustar la expresión regular escapando caracteres especiales.
Si utilizas contenedores dedicados con Kubernetes, asegúrate de que la variable de entorno para la opción de ignorar recursos se esté aplicando al contenedor del Trace-Agent.
Ejemplo
Considera una traza que contiene llamadas a /api/healthcheck desde la cual no quieres ver trazas:
Toma nota del nombre del recurso del tramo de raíz global.
Nombre de la operación: rack.request
Nombre del recurso: Api::HealthchecksController#index
Http.url: /api/healthcheck
Para utilizar correctamente la opción de ignorar recurso, la regla de la expresión regular escrita debe coincidir con el nombre del recurso, Api::HealthchecksController#index. Existen varias opciones de expresiones regulares posibles, pero para filtrar trazas desde este recurso tal como está, una posible expresión regular que puedes utilizar es Api::HealthchecksController#index$.
Según cuál sea tu forma de despliegue, la sintaxis será un poco diferente:
En la lista de variables de entorno del contenedor del Datadog Agent, añade DD_APM_IGNORE_RESOURCES con un patrón como el del ejemplo siguiente. Docker Compose tiene su propia sustitución de variables para tener en cuenta cuando utilices caracteres especiales como $.
environment:// otras variables de entorno del Datadog Agent- DD_APM_IGNORE_RESOURCES=Api::HealthchecksController#index$$
Para valores múltiples:
environment:// otras variables de entorno del Datadog Agent- DD_APM_IGNORE_RESOURCES="value1","Api::HealthchecksController#index$$"
En tu comando Docker run para hacer girar el Datadog Agent, añade DD_APM_IGNORE_RESOURCES:
En la sección traceAgent del archivo values.yaml, añade DD_APM_IGNORE_RESOURCES en la sección env y, a continuación, haz girar helm como de costumbre.
values.yaml
traceAgent:# agents.containers.traceAgent.env -- Variables de entorno adicionales para el contenedor del trace-agent containerenv:- name:DD_APM_IGNORE_RESOURCESvalue:Api::HealthchecksController#index$
Si utilizas Amazon ECS (como en EC2), en tu definición del contenedor del Datadog Agent, añade la variable de entorno DD_APM_IGNORE_RESOURCES con los valores necesarios para que el JSON evalúe de la siguiente manera:
"environment":[// other environment variables for the Datadog Agent
{"name":"DD_APM_IGNORE_RESOURCES","value":"Api::HealthchecksController#index$"}]
Al filtrar las trazas de esta manera se eliminan estas solicitudes de las métricas de trazas. Para obtener información sobre cómo reducir la ingesta sin afectar a las métricas de trazas, consulta los controles de ingestión.
Opciones de configuración del rastreador
Algunos de los rastreadores específicos del lenguaje tienen una opción para modificar tramos antes de que se envíen al Datadog Agent. Utiliza esta opción si tienes requisitos específicos de la aplicación y utilizas uno de los lenguajes que se enumeran a continuación.
1. Si la solicitud está asociada a una traza distribuida, la traza resultante puede tener imprecisiones de muestreo si se descartan partes de ella debido a estas reglas de filtrado. 2. Al filtrar las trazas de esta manera se eliminan estas solicitudes de las métricas de trazas. Para obtener información sobre cómo reducir la ingesta sin afectar a las métricas de trazas, consulta los controles de ingesta.
El rastreador de Ruby tiene un pipeline de posprocesamiento que elimina trazas que cumplen ciertos criterios. Puedes obtener más información y ejemplos en Trazas de posprocesamiento.
Por ejemplo, si el nombre del recurso es Api::HealthchecksController#index, utiliza la clase Datadog::Tracing::Pipeline::SpanFilter para eliminar trazas que contengan el nombre del recurso. Este filtro también puede utilizarse para hacer coincidir otros metadatos disponibles para el objeto de tramo.
El rastreador Python ofrece una opción para filtrar los traces (trazas) no deseadas:
Uso de filtros personalizados
Para casos de uso avanzados, puedes crear filtros personalizados:
fromddtrace.traceimporttracerfromddtrace.traceimportTraceFilterimportreclassCustomFilter(TraceFilter):def__init__(self,pattern):self.pattern=re.compile(pattern)defprocess_trace(self,trace):forspanintrace:ifspan.get_tag('http.url')andself.pattern.match(span.get_tag('http.url')):returnNone# Drop the tracereturntrace# Keep the trace# Configure the tracer with your custom filtertracer.configure(trace_processors=[CustomFilter(r'http://.*/healthcheck$')])
Configura una lista de bloqueados en la extensión Http. Toma nota de las coincidencias de la lista de bloqueados en los documentos de la API. Por ejemplo, las solicitudes Http entrantes coinciden con las rutas de acceso URL, entonces, si la etiqueta de tramo http.url de la traza es http://<domain>/healthcheck, escribe una regla de acceso que coincida con la URL healthcheck:
La configuración del rastreador para la integración debe venir antes de que se importe ese módulo instrumentado.
El rastreador de Java tiene una opción para que un TraceInterceptor personalizado filtre determinados tramos. Consulta Ampliar los rastreadores.
Por ejemplo, si el nombre de tu recurso es GET /healthcheck, escribe un interceptor de trazas que descarte trazas que contengan este nombre del recurso. Ajusta la lógica para adaptarla a tu caso de uso.