";let n=document.getElementById("TableOfContents");n&&(n.innerHTML=e)}rerender(){this.renderFilterMenu(),this.renderPageContent(),this.populateRightNav(),this.runHooks("afterRerender")}renderPageContent(){let e={};Object.keys(this.ifFunctionsByRef).forEach(t=>{let s=this.ifFunctionsByRef[t],o=s.value,n=(0,h.reresolveFunctionNode)(s,{variables:this.selectedValsByTraitId});this.ifFunctionsByRef[t]=n,o!==n.value&&(e[t]=n.value)});let t=document.getElementsByClassName("cdoc__toggleable");for(let n=0;n{this.fitCustomizationMenuToScreen()})}addDropdownEventListeners(){let e=document.getElementsByClassName("cdoc-dropdown");for(let t=0;t{let t=e.target;for(;!t.classList.contains("cdoc-dropdown")&&t.parentElement;)t=t.parentElement;let n=t.classList.toggle("cdoc-dropdown__expanded");t.setAttribute("aria-expanded",n.toString())});document.addEventListener("keydown",e=>{if(e.key==="Enter"){let t=e.target;t.classList.contains("cdoc-filter__option")&&t.click()}}),document.addEventListener("click",t=>{for(let n=0;nthis.handleFilterSelectionChange(e));this.addDropdownEventListeners()}locateFilterSelectorEl(){let e=document.getElementById("cdoc-selector");return!!e&&(this.filterSelectorEl=e,!0)}applyFilterSelectionOverrides(){let s=Object.keys(this.selectedValsByTraitId),e=!1,t=this.browserStorage.getTraitVals();Object.keys(t).forEach(n=>{s.includes(n)&&this.selectedValsByTraitId[n]!==t[n]&&(this.selectedValsByTraitId[n]=t[n],e=!0)});let n=(0,j.getTraitValsFromUrl)({url:new URL(window.location.href),traitIds:s});return Object.keys(n).forEach(t=>{this.selectedValsByTraitId[t]!==n[t]&&(this.selectedValsByTraitId[t]=n[t],e=!0)}),e}updateEditButton(){let t=document.getElementsByClassName("toc-edit-btn")[0];if(!t)return;let e=t.getElementsByTagName("a")[0];e&&(e.href=e.href.replace(/\.md\/$/,".mdoc.md/"))}revealPage(){this.runHooks("beforeReveal"),this.filterSelectorEl&&(this.filterSelectorEl.style.position="sticky",this.filterSelectorEl.style.backgroundColor="white",this.filterSelectorEl.style.paddingTop="10px",this.filterSelectorEl.style.visibility="visible",this.filterSelectorEl.style.zIndex="1000");let e=document.getElementById("cdoc-content");e&&(e.style.visibility="visible"),this.runHooks("afterReveal")}renderFilterMenu(){if(!this.filterSelectorEl||!this.filtersManifest)throw new Error("Cannot render filter selector without filtersManifest and filterSelectorEl");let e=(0,l.resolveFilters)({filtersManifest:this.filtersManifest,valsByTraitId:this.selectedValsByTraitId});Object.keys(e).forEach(t=>{let n=e[t];this.selectedValsByTraitId[t]=n.currentValue});let t=(0,y.buildCustomizationMenuUi)(e);this.filterSelectorEl.innerHTML=t,this.fitCustomizationMenuToScreen(),this.addFilterSelectorEventListeners()}fitCustomizationMenuToScreen(){let e=document.getElementById(g);if(!e)return;let s=e.classList.contains(n),t=document.getElementById(v);if(!t)throw new Error("Dropdown menu not found");let o=document.getElementById(b);if(!o)throw new Error("Menu wrapper not found");let i=e.scrollWidth>o.clientWidth;!s&&i?(e.classList.add(n),t.classList.remove(n)):s&&!i&&(e.classList.remove(n),t.classList.add(n))}get cdocsState(){return{selectedValsByTraitId:this.selectedValsByTraitId,ifFunctionsByRef:this.ifFunctionsByRef,filtersManifest:this.filtersManifest,browserStorage:this.browserStorage,filterSelectorEl:this.filterSelectorEl}}};e.ClientFiltersManager=r,t=r,s={value:void 0}}),y=e(e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=j();window.clientFiltersManager=t.ClientFiltersManager.instance}),y()})()Ignorar los recursos no deseados en APM
Un servicio puede administrar una variedad de solicitudes, algunas de las cuales puede que no desees que se rastreen o se incluyan en las métricas de traces (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 deseas que el span (tramo) se incluya en las métricas de traces (trazas) pero no deseas 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 traces (trazas) en función de los nombres de los recursos, los nombres de los servicios, las etiquetas (tags) y los nombres de las operaciones:
Nota: Las decisiones de muestreo se determinan utilizando el primer span (tramo) de una trace (traza). Si el span (tramo) que contiene la etiqueta sobre la que se deseas filtrar no es una trace root span (span de origen de traza), esta regla no se aplica.
Filtrado
Si no deseas que se ingiera el span (tramo) y no deseas que se refleje en las métricas de traces (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 (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, 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 deseas 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 (tags) de spans (tramos) a los spans (tramos) después de la ingesta. Ten en cuenta que estas etiquetas (tags) no se pueden utilizar para eliminar traces (trazas) en el nivel del Datadog Agent, ya que el Agent sólo filtra en función de las etiquetas (tags) 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.
Nota: Desde el 1.º de octubre de 2022, el backend Datadog aplica una reasignación para aplicar la Semántica de etiquetas (tags) de spans (tramos)
a través de rastreadores en todos los spans (tramos) ingeridos. Si deseas descartar spans (tramos) en función de las etiquetas (tags) en el nivel del Datadog Agent, utiliza las etiquetas (tags) 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.
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 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. 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-agentenv:- 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":[// otras variables de entorno para el Datadog Agent
{"name":"DD_APM_IGNORE_RESOURCES","value":"Api::HealthchecksController#index$"}]
Nota: Al filtrar trazas de esta manera, 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, 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.
Notas: 1. Si la solicitud está asociada a una trace (traza) distribuida, la trace (traza) resultante puede tener imprecisiones de muestreo si se descartan partes de ella debido a estas reglas de filtrado. 2. Filtrar traces (trazas) de esta manera elimina estas solicitudes de las métricas de traces (trazas) . Para obtener información sobre cómo reducir la ingesta sin afectar a las métricas de traces (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:
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.