Un servicio puede manejar una variedad de solicitudes, algunas de las cuales puede que no quieras que se rastreen o se incluyan en métricas de trazas (traces). Un ejemplo de esto son, posiblemente, las comprobaciones de estado en una aplicación web.
Hay 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:
Nota: Mediante el filtro de trazas utilizando cualquiera de las siguientes opciones se eliminan estas solicitudes de las métricas de trazas. Para obtener información sobre cómo reducir el consumo sin afectar las métricas de trazas, consulte los controles de consumo.
El componente Trace Agent dentro del Datadog Agent tiene dos métodos para evitar que aparezcan ciertas trazas: ignorar etiquetas (tags) de tramos (spans) 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, la opción filtrar etiquetas descarta 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 de 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 la posibilidad de 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 filtro de etiquetas requiere una coincidencia exacta de las cadenas. Si tu caso de uso requiere ignorar por regex, 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 entornos:
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 Datadog Agent 7.49+, las expresiones regulares pueden estar provistas de DD_APM_FILTER_TAGS_REGEX_REQUIRE.
DD_APM_FILTER_TAGS_REJECT
Rechaza 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 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:
Mediante el filtrado de trazas de esta manera, se eliminan estas solicitudes de 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 tramos después del consumo. Estas etiquetas no pueden utilizarse para descartar trazas en el nivel del Datadog Agent .
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 Agent de usuario.
http.useragent_details.browser.family
La familia de navegadores informada por el Agent de usuario.
http.useragent_details.device.family
La familia de dispositivos informada por el Agent de usuario.
Nota: Desde el 1.º de octubre de 2022, el backend Datadog aplica una reasignación para aplicar la Semántica de etiquetas de tramos
a través de rastreadores en todos los tramos consumidos. Si deseas descartar tramos basados en etiquetas en el nivel del Datadog Agent, utiliza etiquetas en 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.
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"]
Notas:
La sintaxis expresiones regulares que acepta el Trace Agent se evalúa con regexp 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 Contenedor.
Ejemplo
Considera una traza que contiene llamadas a /api/healthcheck desde la cual no deseas 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. Hay varias opciones de expresiones regulares posibles, pero para filtrar trazas desde este recurso tal como está, una posible expresión regular es Api::HealthchecksController#index$.
Según 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 a tener en cuenta cuando utilices caracteres especiales como $.
entorno:// otras variables de entorno del Datadog Agent - DD_APM_IGNORE_RESOURCES=Api::HealthchecksController#index$$
Para valores múltiples:
entorno:// otras variables de entorno del Datadog Agent- DD_APM_IGNORE_RESOURCES="value1","Api::HealthchecksController#index$$"
En tu comando de 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 de trace-agentenv:- nombre:DD_APM_IGNORE_RESOURCESvalor: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:
"entorno":[// otras variables de entorno para el Datadog Agent
{"nombre":"DD_APM_IGNORE_RESOURCES","valor":"Api::HealthchecksController#index$"}]
Nota: Mediante el filtrado de trazas de esta manera, se eliminan estas solicitudes de métricas de trazas. Para obtener información sobre cómo reducir el consumo sin afectar las métricas de trazas, consulta controles de consumo.
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.
Importante: Si la solicitud está asociada a una traza distribuida, la traza resultante puede tener imprecisiones de muestreo si descartas partes de ella debido a estas reglas de filtrado.
El rastreador de Ruby tiene un pipeline de posprocesamiento que elimina trazas que cumplen ciertos criterios. 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 de Python tiene un filtro FilterRequestsOnUrl que puedes configurar para eliminar trazas de ciertos puntos de conexión. Como alternativa, puedes escribir un filtro personalizado. Consulta Filtrar trazas para obtener más información.
Supongamos que la etiqueta de tramo http.url del tramo de raíz tenga un valor de http://<domain>/healthcheck. Utiliza la siguiente expresión regular para que coincida con cualquier punto de conexión que termine en healthcheck:
desde ddtrace importa el rastreador
desde ddtrace.filters importa FilterRequestsOnUrl
tracer.configure(settings={
'FILTROS': [
FilterRequestsOnUrl(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 URL, entonces, si la etiqueta de tramo http.url de la traza es http://<domain>/healthcheck, escribe una regla que coincida con la URL healthcheck:
Nota: 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.
Nota: Mediante el filtrado de trazas de esta manera, se eliminan estas solicitudes de métricas de trazas. Para obtener información sobre cómo reducir el consumo sin afectar las métricas de trazas, consulta los controles de consumo.