Datadog APM se incluye en Envoy v1.9.0 y posteriores.
Habilitación de Datadog APM
Nota: El siguiente ejemplo de configuración corresponde a Envoy v1.19.
Los siguientes parámetros son necesarios para habilitar Datadog APM en Envoy:
- un clúster para enviar trazas al Datadog Agent
- la configuración
http_connection_manager
para activar el rastreo
Añade un clúster para enviar trazas al Datadog Agent:
clusters:
... existing cluster configs ...
- name: datadog_agent
connect_timeout: 1s
type: strict_dns
lb_policy: round_robin
load_assignment:
cluster_name: datadog_agent
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: localhost
port_value: 8126
Cambia el valor de address
, si Envoy se está ejecutando en un contenedor o en un entorno orquestado.
Incluye la siguiente configuración adicional en las secciones http_connection_manager
para habilitar el rastreo:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
generate_request_id: true
request_id_extension:
typed_config:
"@type": type.googleapis.com/envoy.extensions.request_id.uuid.v3.UuidRequestIdConfig
use_request_id_for_trace_sampling: false
tracing:
provider:
name: envoy.tracers.datadog
typed_config:
"@type": type.googleapis.com/envoy.config.trace.v3.DatadogConfig
collector_cluster: datadog_agent
service_name: envoy-v1.19
El valor collector_cluster
debe coincidir con el nombre proporcionado para el clúster del Datadog Agent. service_name
puede cambiarse por un valor significativo para tu uso de Envoy.
Con esta configuración, las solicitudes HTTP a Envoy se inician y propagan trazas de Datadog y aparecen en la interfaz de usuario APM.
Ejemplo de configuración de Envoy v1.19
El siguiente ejemplo de configuración demuestra la localización de los elementos necesarios para habilitar el rastreo utilizando Datadog APM.
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 80
traffic_direction: OUTBOUND
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
generate_request_id: true
request_id_extension:
typed_config:
"@type": type.googleapis.com/envoy.extensions.request_id.uuid.v3.UuidRequestIdConfig
use_request_id_for_trace_sampling: false
tracing:
provider:
name: envoy.tracers.datadog
typed_config:
"@type": type.googleapis.com/envoy.config.trace.v3.DatadogConfig
collector_cluster: datadog_agent # matched against the named cluster
service_name: envoy-v1.19 # user-defined service name
codec_type: auto
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: backend
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster: service1
# Traces for healthcheck requests should not be sampled.
http_filters:
- name: envoy.filters.http.health_check
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheck
pass_through_mode: false
headers:
- exact_match: /healthcheck
name: :path
- name: envoy.filters.http.router
typed_config: {}
use_remote_address: true
clusters:
- name: service1
connect_timeout: 0.250s
type: strict_dns
lb_policy: round_robin
load_assignment:
cluster_name: service1
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: service1
port_value: 80
# Configurar este clúster con la dirección del Datadog Agent
# para enviar trazas (traces).
- name: datadog_agent
connect_timeout: 1s
type: strict_dns
lb_policy: round_robin
load_assignment:
cluster_name: datadog_agent
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: localhost
port_value: 8126
admin:
access_log_path: "/dev/null"
address:
socket_address:
address: 0.0.0.0
port_value: 8001
Exclusión de métricas
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.
stats_config:
stats_matcher:
exclusion_list:
patterns:
- prefix: "cluster.datadog_agent."
Muestreo de Envoy
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 en 10% para el servicio envoy-proxy
:
DD_TRACE_SAMPLING_RULES=[{"service": "envoy-proxy","sample_rate": 0.1}]
Para configurar tu frecuencia de muestreo con DD_TRACE_SAMPLING_RULES
, utiliza uno de los siguientes métodos, dependiendo de cómo ejecutes Envoy:
Por script de shell: Define la variable de entorno inmediatamente antes de ejecutar envoy
en el script:
#!/bin/sh
export DD_TRACE_SAMPLING_RULES=[]
envoy -c envoy-config.yaml
En una configuración Docker Compose: define la variable de entorno en la sección environment
de la definición del servicio:
services:
envoy:
image: envoyproxy/envoy:v1.19-latest
entrypoint: []
command:
- envoy
- -c
- /etc/envoy/envoy.yaml
volumes:
- './envoy.yaml:/etc/envoy/envoy.yaml:ro'
environment:
- DD_TRACE_SAMPLING_RULES=[]
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:
apiVersion: v1
kind: Pod
metadata:
name: envoy
spec:
containers:
- name: envoy
image: envoyproxy/envoy:v1.20-latest
env:
- name: DD_TRACE_SAMPLING_RULES
value: "[]"
Variables de entorno
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 con “DATADOG TRACER CONFIGURATION”.
Referencias adicionales
Más enlaces, artículos y documentación útiles: