El valor collector_cluster debe coincidir con el nombre proporcionado para el clúster del Datadog Agent. Para utilizar Envoy, puedes cambiar service_name por un valor significativo.
Con esta configuración, las solicitudes HTTP a Envoy se inician y propagan trazas de Datadog y aparecen en la interfaz de usuario APM.
El siguiente ejemplo de configuración demuestra la colocación de los elementos necesarios para habilitar el rastreo utilizando Datadog APM.
static_resources:listeners:- address:socket_address:address:0.0.0.0port_value:80traffic_direction:OUTBOUNDfilter_chains:- filters:- name:envoy.filters.network.http_connection_managertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagergenerate_request_id:truerequest_id_extension:typed_config:"@type": type.googleapis.com/envoy.extensions.request_id.uuid.v3.UuidRequestIdConfiguse_request_id_for_trace_sampling:falsetracing:# Utiliza el rastreador Datadogprovider:name:envoy.tracers.datadogtyped_config:"@type": type.googleapis.com/envoy.config.trace.v3.DatadogConfigcollector_cluster:datadog_agent # coincide con el clúster nombradoservice_name:envoy-v1.19 # nombre de servicio definido por el usuariocodec_type:autostat_prefix:ingress_httproute_config:name:local_routevirtual_hosts:- name:backenddomains:- "*"routes:- match:prefix:"/"route:cluster:service1# No se deben muestrear las trazas de solicitudes de estado.http_filters:- name:envoy.filters.http.health_checktyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheckpass_through_mode:falseheaders:- exact_match:/healthcheckname::path- name:envoy.filters.http.routertyped_config:{}use_remote_address:trueclusters:- name:service1connect_timeout:0.250stype:strict_dnslb_policy:round_robinload_assignment:cluster_name:service1endpoints:- lb_endpoints:- endpoint:address:socket_address:address:service1port_value:80# Configura este clúster con la dirección del Datadog Agent# para el envío de trazas.- name:datadog_agentconnect_timeout:1stype:strict_dnslb_policy:round_robinload_assignment:cluster_name:datadog_agentendpoints:- lb_endpoints:- endpoint:address:socket_address:address:localhostport_value:8126admin:access_log_path:"/dev/null"address:socket_address:address:0.0.0.0port_value:8001
Si utilizas la configuración de Envoy dog_statsd para informar métricas, puedes excluir la actividad del clúster datadog_agent con esta configuración adicional.
Para controlar el volumen de trazas de Envoy que se envían a Datadog, especifica una frecuencia de muestreo configurando el parámetro DD_TRACE_SAMPLING_RULES con un valor comprendido entre 0.0 (0%) y 1.0 (100%). Si no se especifica ningún valor, se enviarán el 100% de las trazas provenientes de Envoy.
Para utilizar las frecuencias de muestreo calculadas del Datadog Agent (10 trazas por segundo por Agent) e ignorar la regla de muestreo predeterminada, definida en 100%, configura el parámetro DD_TRACE_SAMPLING_RULES en una matriz vacía:
DD_TRACE_SAMPLING_RULES=[]
También puedes definir una frecuencia de muestreo explícita entre 0.0 (0%) y 1.0 (100%), por servicio. Por ejemplo, para configurar la frecuencia de muestreo al 10% para el servicio envoy-proxy :
Como contenedor dentro de un pod Kubernetes: Especifica la variable de entorno en la sección env de la entrada containers correspondiente de la especificación del pod:
Nota: Las variables DD_AGENT_HOST, DD_TRACE_AGENT_PORT y DD_TRACE_AGENT_URL no se aplican a Envoy, ya que la dirección del Datadog Agent se configura utilizando los parámetros del clúster.
Las variables de entorno disponibles dependen de la versión del rastreador C++ incorporado en Envoy.
Es posible encontrar la versión del rastreador C++ en logs, indicada por la línea que empieza por “DATADOG TRACER CONFIGURATION”.
Datadog APM es compatible con NGINX en dos configuraciones:
NGINX funcionaba como proxy con el rastreo proporcionado por el módulo de Datadog.
Elige el archivo .tar correspondiente a la versión de NGINX y a la arquitectura de CPU específicas.
Cada versión incluye dos archivos .tar por combinación de la versión de NGINX y la arquitectura de CPU.
El archivo .tar principal contiene un único archivo, ngx_http_datadog_module.so, que es el módulo NGINX de Datadog. El segundo contiene símbolos de depuración y es opcional.
Para simplificar el proceso, el siguiente script descarga sólo el módulo de la última versión:
get_latest_release(){ curl --silent "https://api.github.com/repos/$1/releases/latest"| jq --raw-output .tag_name
}get_architecture(){case"$(uname -m)" in
aarch64)echo"arm64";; arm64)echo"arm64";; x86_64)echo"amd64";; amd64)echo"amd64";; *)echo"";;esac}ARCH=$(get_architecture)if[ -z "$ARCH"];thenecho 1>&2"ERROR: Architecture $(uname -m) is not supported."exit1fiNGINX_VERSION="1.26.0"RELEASE_TAG=$(get_latest_release DataDog/nginx-datadog)TARBALL="ngx_http_datadog_module-${ARCH}-${NGINX_VERSION}.so.tgz"curl -Lo ${TARBALL}"https://github.com/DataDog/nginx-datadog/releases/download/${RELEASE_TAG}/${TARBALL}"
Extrae el archivo ngx_http_datadog_module.so del archivo .tar descargado mediante tar y colócalo en el directorio de módulos de NGINX, generalmente ubicado en /usr/lib/nginx/modules.
En la sección superior de configuración de NGINX, carga el módulo de Datadog.
load_modulemodules/ngx_http_datadog_module.so;
La configuración por defecto se conecta a un Datadog Agent local y produce trazas
para todas las localizaciones de NGINX. Especifica una configuración personalizada utilizando las directivas exclusivas
datadog_* descritas en la documentación de la API del módulo de Datadog.
Por ejemplo, la siguiente configuración de NGINX define el nombre del servicio como
usage-internal-nginx y la frecuencia de muestreo al 10%.
Nota importante: Con el lanzamiento de v1.10.0, la integración OpenTracing y Datadog del controlador Ingress ha quedado obsoleta. Como alternativa, se recomienda la integración OpenTelemetry.
1. Prepara el Datadog Agent: Asegúrate de que tu Datadog Agent tiene habilitado el consumo OTLP gRPC para actuar como recopilador de OpenTelemetry.
2. Configura el controlador Ingress: Para empezar, comprueba que la especificación del pod de tu controlador Ingress tiene definida la variable de entorno HOST_IP. Si no es así, añade la siguiente entrada al bloque env dentro de la especificación del pod:
Para habilitar el rastreo en Datadog, crea o edita un ConfigMap para configurarenable-opentracing: "true" y el datadog-collector-host al que se deben enviar trazas.
El nombre del ConfigMap lo cita explícitamente el argumento de línea de comandos del contenedor del controlador Ingress-NGINX; por defecto es --configmap=<POD_NAMESPACE>/nginx-configuration.
Si ingress-nginx se instaló a través del chart Helm, el nombre del ConfigMap seguirá el patrón <RELEASE_NAME>-nginx-ingress-controller.
El controlador Ingress gestiona los archivos nginx.conf y /etc/nginx/opentracing.json. El rastreo está habilitado para todos los bloques de location.
Además, asegúrate de que la especificación del pod de tu controlador tiene definida la variable de entorno HOST_IP. Añade esta entrada al bloque env: que contiene las variables de entorno POD_NAME y POD_NAMESPACE.
Las trazas se generan cuando el espacio de nombres para el pod tiene activada la inyección de sidecars. Esto se hace añadiendo la etiqueta
la etiqueta istio-injection=enabled.
Las trazas se generan cuando Istio es capaz de determinar que el tráfico está utilizando un protocolo basado en HTTP.
Por defecto, Istio intenta detectar esto automáticamente. Puede ser configurado manualmente, nombrando los puertos en el
despliegue de tu aplicación y en tu servicio. Puedes encontrar más información en la documentación de Istio para la selección de protocolos.
Por defecto, el nombre del servicio utilizado al crear trazas se genera a partir del nombre del despliegue y el espacio de nombres. Se puede
configurar manualmente añadiendo una etiqueta (label) app a la plantilla del pod de despliegue:
template:metadata:labels:app:<SERVICE_NAME>
Para CronJobs, la etiqueta app debe añadirse a la plantilla de trabajo, ya que el nombre generado procede del Job, y no
del CronJob de nivel superior.
Para controlar el volumen de trazas de Istio que se envían a Datadog, configura una
regla de muestreo cuya "sample_rate" es un valor comprendido entre 0.0 (0%) y 1.0
(100%). Configura reglas de muestreo con la variable de entorno DD_TRACE_SAMPLING_RULES.
Si no se especifica DD_TRACE_SAMPLING_RULES, el 100%
de trazas de Istio se envían a Datadog.
Nota: Estas variables de entorno sólo se aplican al subconjunto de trazas indicadas por el parámetro values.pilot.traceSampling, de ahí que se requiera red --set values.pilot.traceSampling=100.0 durante la configuración de Istio.
Para utilizar las frecuencias de muestreo calculadas del Datadog Agent (10 trazas por segundo por Agent) e ignorar la regla de muestreo predeterminada, definida en 100%, configura el parámetro DD_TRACE_SAMPLING_RULES en una matriz vacía:
DD_TRACE_SAMPLING_RULES='[]'
Especificar una matriz vacía de reglas explícitamente no es lo mismo que no especificar reglas.
Para configurar DD_TRACE_SAMPLING_RULES en cada despliegue cuyo espacio de nombres está etiquetado como istio-injection=enabled, define la variable entorno como parte de la anotación apm.datadoghq.com/env de la plantilla de especificaciones del despliegue:
apm.datadoghq.com/env es una cadena cuyo contenido es un objeto JSON que asigna
nombres de variables de entorno a valores. Los valores de las variables de entorno son
cadenas y, en el caso de DD_TRACE_SAMPLING_RULES, el valor de la cadena
es una matriz de objetos JSON.
Las variables de entorno de los sidecars de Istio pueden definirse por cada despliegue, utilizando la anotación apm.datadoghq.com/env. Esto es único para los despliegues que emplean sidecars Istio y se define junto con las etiquetas para el etiquetado unificado de servicios.
Si los Agents en tu clúster se están ejecutando como despliegue y servicio, en lugar del DaemonSet por defecto, se requiere una opción adicional para especificar la dirección DNS y el puerto del Agent.
Para un servicio llamado datadog-agent en el espacio de nombres default, esa dirección sería datadog-agent.default.svc.cluster.local:8126.
Si Mutual TLS está habilitado para el clúster, el despliegue del Agent debe deshabilitar la inyección de sidecars, y debes agregar una política de tráfico que deshabilite TLS.
Esta anotación se añade a la plantilla de despliegue del Agent.
Para Istio v1.4.x, la política de tráfico puede configurarse utilizando una DestinationRule. Istio v1.5.x y posteriores no necesitan una política de tráfico adicional.
La selección automática de protocolos puede determinar que el tráfico entre el sidecar y el Agent es HTTP, y habilitar el rastreo.
Esto se puede deshabilitar a través de la selección manual de protocolos para este servicio específico. El nombre de puerto del servicio datadog-agent puede cambiarse a tcp-traceport.
Si utilizas Kubernetes v1.18 o posterior, puedes añadir appProtocol: tcp a la especificación del puerto.
Kong Gateway no es un complemento incluido, por lo que debe configurarse antes de habilitarlo.
Para hacerlo, incluye bundled y ddtrace en la variable de entorno KONG_PLUGINS, o
define plugins=bundled,ddtrace en /etc/kong/kong.conf. A continuación, reinicia Kong Gateway para aplicar el cambio.
# Configura la variable de entorno KONG_PLUGINS o edita /etc/kong/kong.conf para habilitar el complemento ddtraceexportKONG_PLUGINS=bundled,ddtracekongrestart
El complemento puede habilitarse globalmente o en determinados servicios de Kong Gateway.
# Habilitado globalmente
curl -i -X POST --url http://localhost:8001/plugins/ --data 'name=ddtrace'
# Habilitado sólo para servicios específicos
curl -i -X POST --url http://localhost:8001/services/example-service/plugins/ --data 'name=ddtrace'
Existen opciones para configurar el nombre de servicio, el entorno, y otras funciones del complemento.
El ejemplo siguiente define el nombre del servicio como mycorp-internal-api en el entorno prod.
Dado que el servidor HTTP IHS es esencialmente una envoltura del servidor HTTP Apache, el módulo también puede utilizarse con IHS sin ninguna modificación.
Nota: Sólo se admite el servidor HTTP Apache v2.4.x para la arquitectura x86_64.
El módulo se proporciona como una biblioteca compartido para la carga dinámica mediante HTTPd. Cada plataforma y arquitectura
compatible tiene su propio artefacto alojado en el repositorio httpd de Datadog.
Para instalar el módulo:
Ejecuta el siguiente script para descargar la última versión del módulo:
Por defecto, todas las solicitudes se rastrean y se envían al Datadog Agent.
Para cambiar el comportamiento predeterminado del módulo, utiliza las directivas Datadog* descritas en la documentación de la API del módulo de Datadog.
Por ejemplo, la siguiente configuración define el nombre del servicio en my-service y la frecuencia de muestreo en 10%: