A partir de la versión 6.0, el Agent puede consumir métricas con un socket de dominio Unix (UDS) como alternativa al transporte UDP.
Mientras que UDP funciona muy bien en localhost, configurarlo en entornos contenedorizados puede resultar un desafío. Los sockets de dominio Unix te permiten establecer la conexión con un archivo socket, independientemente de la IP del contenedor del Datadog Agent. También incluye las siguientes ventajas:
Evitar la pila de red supone una mejora significativa del rendimiento en caso de tráfico elevado.
Mientras que UDP no incluye la gestión de errores, UDS permite al Agent detectar paquetes perdidos y errores de conexión, mientras permite un uso no bloqueante.
DogStatsD puede detectar el contenedor del que proceden las métricas y etiquetarlas en consecuencia.
En lugar de utilizar un par IP:port para establecer conexiones, los sockets de dominio Unix utilizan un archivo de socket de parámetro. Una vez abierta la conexión, los datos se transmiten en el mismo formato de datagrama que para el transporte UDP. Cuando se reinicia el Agent, el socket existente se elimina y se sustituye por uno nuevo. Las bibliotecas cliente detectan este cambio y se conectan al nuevo socket sin problemas.
Notas
Por diseño, el tráfico UDS al host es local, lo que significa que el Datadog Agent debe ejecutarse en cada host desde el que envías métricas.
Para configurar DogStatsD con el socket de dominio Unix, habilita el servidor DogStatsD utilizando el parámetro dogstatsd_socket. A continuación, configura el cliente de DogStatsD en tu código.
Configura el dogstatsd_socket en la ruta donde DogStatsD debe crear tu socket de escucha:
## @param dogstatsd_socket - string - optional - default: ""## Listen for Dogstatsd metrics on a Unix Socket (*nix only).## Set to a valid and existing filesystem path to enable.#dogstatsd_socket:'/var/run/datadog/dsd.socket'
Configura la ruta del socket con la variable de entorno DD_DOGSTATSD_SOCKET=<YOUR_UDS_PATH> en el contenedor del Agent.
Haz que el archivo de socket sea accesible para los contenedores de aplicaciones montando un directorio host en ambos lados (sólo lectura, en tus contenedores de aplicaciones, y lectura-escritura, en el contenedor del Agent). Montar la carpeta principal en lugar del socket individual permite que la comunicación del socket persista durante los reinicios de DogStatsD:
Iniciar el contenedor del Agent con -v /var/run/datadog:/var/run/datadog
Iniciar tus contenedores de aplicaciones con -v /var/run/datadog:/var/run/datadog:ro
Configura la ruta del socket con la variable de entornoDD_DOGSTATSD_SOCKET=<YOUR_UDS_PATH> en el contenedor del Agent (ejemplo: /var/run/datadog/dsd.socket).
Haz que el archivo de socket sea accesible para los contenedores de aplicaciones montando un directorio host en ambos lados (sólo lectura, en tus contenedores de aplicaciones, y lectura-escritura, en el contenedor del Agent). Montar la carpeta principal en lugar del socket individual permite que la comunicación del socket persista durante los reinicios de DogStatsD:
Monta la carpeta de socket en tu contenedor del datadog-agent
Nota: Elimina readOnly: true si tus contenedores de aplicaciones necesitan acceso de escritura al socket.
Configura la ruta del socket con la variable de entorno DD_DOGSTATSD_SOCKET=<YOUR_UDS_PATH> en tu contenedor del Agent (ejemplo: /var/run/datadog/dsd.socket).
Haz que el archivo de socket sea accesible para los contenedores de aplicaciones montando un directorio host vacío en ambos lados (sólo lectura, en tus contenedores de aplicaciones, y lectura-escritura, en el contenedor del Agent). Montar la carpeta principal en lugar del socket individual permite que la comunicación del socket persista durante los reinicios de DogStatsD:
Monta la carpeta vacía en las especificaciones de tu pod:
volumes:- emptyDir:{}name:dsdsocket
Monta la carpeta de socket en tu contenedor del datadog-agent:
Para enviar métricas desde scripts de shell o para comprobar que DogStatsD está escuchando en el socket, utiliza netcat. La mayoría de las implementaciones de netcat, como netcat-openbsd en Debian o nmap-ncat en RHEL, admiten el tráfico de sockets Unix con el marcador -U:
La detección del origen permite a DogStatsD detectar de dónde proceden las métricas de contenedor y etiquetar métricas automáticamente. Cuando este modo está habilitado, todas las métricas recibidas por UDS se etiquetan con las mismas etiquetas de contenedor que las métricas de Autodiscovery.
## @param dogstatsd_origin_detection - boolean - optional - default: false## When using Unix Socket, DogStatsD can tag metrics## with container metadata. If running DogStatsD in a container,## host PID mode (for example, with --pid=host) is required.#dogstatsd_origin_detection:true
Opcional - Para configurar la cardinalidad de etiquetas en las métricas recopiladas mediante la detección del origen, configura el parámetro dogstatsd_tag_cardinality como low (por defecto), orchestrator o high:
## @param dogstatsd_tag_cardinality - string - optional - default: low## Configure the level of granularity of tags to send for DogStatsD## metrics and events. Choices are:## * low: add tags about low-cardinality objects## (clusters, hosts, deployments, container images, ...)## * orchestrator: add tags about pods (Kubernetes),## or tasks (ECS or Mesos) -level of cardinality## * high: add tags about high-cardinality objects## (individual containers, user IDs in requests, etc.)#### WARNING: Sending container tags for DogStatsD metrics may create## more metrics (one per container instead of one per host).## This may impact your custom metrics billing.#dogstatsd_tag_cardinality:low
Configura la variable de entorno DD_DogStatsD_ORIGIN_DETECTION=true para el contenedor del Agent.
Opcional - Para configurar la cardinalidad de etiquetas en las métricas recopiladas mediante la detección del origen, configura la variable de entorno DD_DOGSTATSD_TAG_CARDINALITY como low (por defecto): orchestrator o high:
Cuando se ejecuta dentro de un contenedor, DogStatsD necesita ejecutarse en el espacio de nombres del PID del host para que la detección del origen funcione de forma fiable. Habilita esta opción en Docker con el marcador --pid=host. Esta función es compatible con ECS con el parámetro "pidMode": "host" en la definición de tarea del contenedor. Esta función no es compatible con Fargate. Para obtener más información, consulta la documentación de AWS sobre el modo de PID.
Configura la variable de entorno DD_DOGSTATSD_ORIGIN_DETECTION como verdadera para el contenedor del Agent.
Configura hostPID: true en la especificación de la plantilla del pod:
# (...)spec:# (...)hostPID:true
Opcional - Para configurar la [cardinalidad de etiquetas][2] en las métricas recopiladas mediante la detección del origen, configura la variable de entorno DD_DOGSTATSD_TAG_CARDINALITY como low (por defecto): orchestrator o high:
Configura shareProcessNamespace: true en la especificación de la plantilla del pod:
# (...)spec:# (...)shareProcessNamespace:true
Opcional - Para configurar la [cardinalidad de etiquetas][2] en las métricas recopiladas mediante la detección del origen, configura la variable de entorno DD_DOGSTATSD_TAG_CARDINALITY como low (por defecto): orchestrator o high:
Las siguientes bibliotecas cliente oficiales de DogStatsD admiten de forma nativa el tráfico UDS. Consulta la documentación de las bibliotecas para saber cómo habilitar el tráfico UDS. Nota: Al igual que con UDP, se recomienda habilitar el almacenamiento en buffer del lado del cliente para mejorar el rendimiento durante el tráfico pesado:
Si una aplicación o una biblioteca cliente no admite el tráfico UDS, ejecuta socat para escuchar en el puerto UDP 8125 y representar las solicitudes al socket: