Kubernetes APM - Recolección de Trazas

learning center
Intenta la Introducción a la Monitorización de Kubernetes en el Centro de Aprendizaje

Aprende sin costo en capacidad de computación en la nube real y una cuenta de prueba de Datadog. Comienza estos laboratorios prácticos para ponerte al día con las métricas, registros y trazas APM que son específicas de Kubernetes.

INSCRÍBETE AHORA

Esta página describe cómo configurar Application Performance Monitoring (APM) para tu aplicación de Kubernetes.

La canalización de solución de problemas de APM: El rastreador envía trazas y datos de métricas desde el pod de la aplicación al pod del Agent, que los envía al backend de Datadog para ser mostrados en la interfaz de usuario de Datadog.

Puedes enviar trazas a través de Unix Domain Socket (UDS), TCP (IP:Port), o servicio de Kubernetes. Datadog recomienda que uses UDS, pero es posible utilizar los tres al mismo tiempo, si es necesario.

Nota: Para instrumentación automática sin configuración manual, consulta Instrumentación de Un Solo Paso para Kubernetes.

Configuración

  1. Si aún no lo has hecho, instala el Datadog Agent en tu entorno de Kubernetes.
  2. Configura el Datadog Agent para recopilar trazas.
  3. Configura los pods de la aplicación para enviar trazas al Datadog Agent.

Configura el Datadog Agent para recolectar trazas

Las instrucciones en esta sección configuran el Datadog Agent para recibir trazas a través de UDS. Para usar TCP, consulta la sección de configuración adicional. Para usar el servicio de Kubernetes, consulta Configurando APM con el Servicio de Kubernetes.

Edita tu datadog-agent.yaml para establecer features.apm.enabled en true.

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>

  features:
    apm:
      enabled: true
      unixDomainSocketConfig:
        path: /var/run/datadog/apm.socket # default

Cuando APM está habilitado, la configuración predeterminada crea un directorio en el host y lo monta dentro del Agente. El Agente luego crea y escucha en un archivo de socket /var/run/datadog/apm/apm.socket. Los pods de la aplicación pueden montar este volumen de manera similar y escribir en este mismo socket. Puedes modificar la ruta y el socket con el valor de configuración features.apm.unixDomainSocketConfig.path.

After making your changes, apply the new configuration by using the following command:

kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml

Nota: En minikube, puedes recibir un Unable to detect the kubelet URL automatically error. En este caso, establece global.kubelet.tlsVerify en false.

Si usaste Helm para instalar el Datadog Agent, APM está habilitado por defecto a través de UDS o tubería nombrada de Windows.

Para verificar, asegúrate de que datadog.apm.socketEnabled esté establecido en true en tu datadog-values.yaml.

datadog:
  apm:
    socketEnabled: true    

La configuración predeterminada crea un directorio en el host y lo monta dentro del Datadog Agent. El Datadog Agent luego crea y escucha en un archivo de socket /var/run/datadog/apm.socket. Los pods de la aplicación pueden montar este volumen de manera similar y escribir en este mismo socket. Puedes modificar la ruta y el socket con los valores de configuración datadog.apm.hostSocketPath y datadog.apm.socketPath.

datadog:
  apm:
    # the following values are default:
    socketEnabled: true
    hostSocketPath: /var/run/datadog/
    socketPath: /var/run/datadog/apm.socket

Para deshabilitar APM, establece datadog.apm.socketEnabled en false.

After making your changes, upgrade your Datadog Helm chart using the following command:

helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog

Nota: En minikube, puedes recibir un Unable to detect the kubelet URL automatically error. En este caso, establece datadog.kubelet.tlsVerify en false.

Configura tus pods de aplicación para enviar trazas al Agente de Datadog

El Datadog Admission Controller es un componente del Datadog Cluster Agent que simplifica la configuración de tus pods de aplicación. Aprende más leyendo la documentación del Datadog Admission Controller.

Utiliza el Datadog Admission Controller para inyectar variables de entorno y montar los volúmenes necesarios en nuevos pods de aplicación, configurando automáticamente la comunicación de trazas entre el pod y el Datadog Agent. Aprende cómo configurar automáticamente tu aplicación para enviar trazas al Datadog Agent leyendo la documentación de Injecting Libraries Using Datadog Admission Controller.

Si estás enviando trazas al Datadog Agent usando UDS, monta el directorio del host donde se encuentra el socket (que creó el Datadog Agent) en el contenedor de la aplicación y especifica la ruta al socket con DD_TRACE_AGENT_URL:

apiVersion: apps/v1
kind: Deployment
#(...)
    spec:
      containers:
      - name: "<CONTAINER_NAME>"
        image: "<CONTAINER_IMAGE>/<TAG>"
        env:
        - name: DD_TRACE_AGENT_URL
          value: 'unix:///var/run/datadog/apm.socket'
        volumeMounts:
        - name: apmsocketpath
          mountPath: /var/run/datadog
        #(...)
      volumes:
        - hostPath:
            path: /var/run/datadog/
          name: apmsocketpath

Configura tus SDKs de aplicación para emitir trazas:

Después de configurar tu Datadog Agent para recolectar trazas y dar a tus pods de aplicación la configuración sobre dónde enviar trazas, instala el SDK de Datadog en tus aplicaciones para emitir las trazas. Una vez hecho esto, el SDK envía las trazas al DD_TRACE_AGENT_URL punto de conexión apropiado.

Si estás enviando trazas al Datadog Agent usando TCP (<IP_ADDRESS>:8126), proporciona esta dirección IP a tus pods de aplicación—ya sea automáticamente con el Datadog Admission Controller, o manualmente usando la API descendente para obtener la IP del host. El contenedor de la aplicación necesita la variable de entorno DD_AGENT_HOST que apunta a status.hostIP:

apiVersion: apps/v1
kind: Deployment
#(...)
    spec:
      containers:
      - name: "<CONTAINER_NAME>"
        image: "<CONTAINER_IMAGE>/<TAG>"
        env:
          - name: DD_AGENT_HOST
            valueFrom:
              fieldRef:
                fieldPath: status.hostIP

Nota: Esta configuración requiere que el Datadog Agent esté configurado para aceptar trazas a través de TCP

Configura tus SDKs de aplicación para emitir trazas:

Después de configurar el Datadog Agent para recolectar trazas y dar a tus pods de aplicación la configuración sobre dónde enviar trazas, instala el Datadog SDK en tus aplicaciones para emitir las trazas. Una vez hecho esto, el SDK envía automáticamente las trazas al DD_AGENT_HOST punto de conexión apropiado.

Consulte la documentación de instrumentación APM específica del idioma para más ejemplos.

Configuración adicional

Configure el Datadog Agent para aceptar trazas a través de TCP

Actualice su datadog-agent.yaml con lo siguiente:

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>

  features:
    apm:
      enabled: true
      hostPortConfig:
        enabled: true
        hostPort: 8126 # default

After making your changes, apply the new configuration by using the following command:

kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml

Advertencia: El parámetro hostPort abre un puerto en su host. Asegúrese de que su firewall solo permita el acceso desde sus aplicaciones o fuentes de confianza. Si su complemento de red no admite hostPorts, agregue hostNetwork: true en las especificaciones del pod del Datadog Agent. Esto comparte el espacio de nombres de red de su host con el Datadog Agent. Esto también significa que todos los puertos abiertos en el contenedor están abiertos en el host. Si un puerto se utiliza tanto en el host como en su contenedor, hay un conflicto (ya que comparten el mismo espacio de nombres de red) y el pod no se inicia. Algunas instalaciones de Kubernetes no permiten esto.

Actualice su archivo datadog-values.yaml con la siguiente configuración de APM:

datadog:
  apm:
    portEnabled: true
    port: 8126 # default

After making your changes, upgrade your Datadog Helm chart using the following command:

helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog

Advertencia: El parámetro datadog.apm.portEnabled abre un puerto en su host. Asegúrese de que su firewall solo permita el acceso desde sus aplicaciones o fuentes de confianza. Si su complemento de red no admite hostPorts, agregue hostNetwork: true en las especificaciones del pod del Datadog Agent. Esto comparte el espacio de nombres de red de su host con el Datadog Agent. Esto también significa que todos los puertos abiertos en el contenedor están abiertos en el host. Si un puerto se utiliza tanto en el host como en su contenedor, hay un conflicto (ya que comparten el mismo espacio de nombres de red) y el pod no se inicia. Algunas instalaciones de Kubernetes no permiten esto.

Variables de entorno de APM

Establezca variables de entorno adicionales de APM bajo override.nodeAgent.containers.trace-agent.env:

datadog-agent.yaml

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  override:
    nodeAgent:
      containers:
        trace-agent:
          env:
            - name: <ENV_VAR_NAME>
              value: <ENV_VAR_VALUE>

Establezca variables de entorno adicionales de APM bajo agents.containers.traceAgent.env:

datadog-values.yaml

agents:
  containers:
    traceAgent:
      env:
        - name: <ENV_VAR_NAME>
          value: <ENV_VAR_VALUE>

Agregue variables de entorno al DaemonSet o Despliegue (para el Datadog Cluster Agent).

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: datadog
spec:
  template:
    spec:
      containers:
        - name: agent
          ...
          env:
            - name: <ENV_VAR_NAME>
              value: <ENV_VAR_VALUE>

Lista de variables de entorno disponibles para configurar APM:

Variable de entornoDescripción
DD_APM_ENABLEDCuando se establece en true, el Agente de Datadog acepta métricas de traza.
Predeterminado: true (Agente 7.18+)
DD_APM_ENVEstablece la etiqueta env: en las trazas recolectadas.
DD_APM_RECEIVER_SOCKETPara trazas sobre UDS. Cuando se establece, debe apuntar a un archivo de socket válido.
DD_APM_RECEIVER_PORTPara trazas sobre TCP, el puerto en el que escucha el receptor de trazas del Agente de Datadog.
Predeterminado: 8126
DD_APM_NON_LOCAL_TRAFFICPermitir tráfico no local al trazar desde otros contenedores.
Predeterminado: true (Agente 7.18+)
DD_APM_DD_URLEl punto de conexión de la API de Datadog donde se envían sus trazas: https://trace.agent..
Default: https://trace.agent.datadoghq.com
DD_APM_TARGET_TPSThe target traces per second to sample.
Default: 10
DD_APM_ERROR_TPSThe target error trace chunks to receive per second.
Default: 10
DD_APM_MAX_EPSMaximum number of APM events per second to sample.
Default: 200
DD_APM_MAX_MEMORYWhat the Datadog Agent aims to use in terms of memory. If surpassed, the API rate limits incoming requests.
Default: 500000000
DD_APM_MAX_CPU_PERCENTThe CPU percentage that the Datadog Agent aims to use. If surpassed, the API rate limits incoming requests.
Default: 50
DD_APM_FILTER_TAGS_REQUIRECollects only traces that have root spans with an exact match for the specified span tags and values.
See Ignoring unwanted resources in APM.
DD_APM_FILTER_TAGS_REJECTRejects traces that have root spans with an exact match for the specified span tags and values.
See Ignoring unwanted resources in APM.
DD_APM_REPLACE_TAGSScrub sensitive data from your span’s tags.
DD_APM_IGNORE_RESOURCESConfigure resources for the Agent to ignore. Format should be comma separated, regular expressions.
For example: GET /ignore-me,(GET|POST) /and-also-me
DD_APM_LOG_FILEPath to file where APM logs are written.
DD_APM_CONNECTION_LIMITMaximum connection limit for a 30 second time window.
Default: 2000
DD_APM_ADDITONAL_ENDPOINTSSend data to multiple endpoints and/or with multiple API keys.
See Dual Shipping.
DD_APM_DEBUG_PORTPort for the debug endpoints for the Trace Agent. Set to 0 to disable the server.
Default: 5012.
DD_BIND_HOSTSet the StatsD and receiver hostname.
DD_PUERTO_DOGSTATSDFor tracing over TCP, set the DogStatsD port.
DD_ENVSets the global env for all data emitted by the Agent. If env is not present in your trace data, this variable is used.
DD_HOSTNAMEManually set the hostname to use for metrics if autodetection fails, or when running the Datadog Cluster Agent.
DD_LOG_LEVELSet the logging level.
Values: trace, debug, info, warn, error, critical, off
DD_PROXY_HTTPSConfigura la URL para el proxy a utilizar.

Lectura adicional