Descripción general

Este tutorial utiliza el Datadog Exporter y el Datadog Connector. Para nuevas configuraciones del Collector, Datadog recomienda la canalización OTLP en Configurar el OpenTelemetry Collector.

La demostración de OpenTelemetry es una aplicación de demostración de microservicios desarrollada por la comunidad para demostrar OpenTelemetry (OTel) la instrumentación y sus capacidades de observabilidad. Es una página web de comercio electrónico compuesta por múltiples microservicios que se comunican entre sí a través de HTTP y gRPC. Todos los servicios están instrumentados con OpenTelemetry y producen trazas, métricas y registros.

Esta página lo guía a través de los pasos necesarios para implementar el OpenTelemetry Demo y enviar sus datos a Datadog.

Requisitos previos

Para completar esta guía, asegúrese de tener lo siguiente:

  1. Cree una cuenta de Datadog si aún no lo ha hecho.
  2. Busque o cree su clave de Datadog API.
  3. 6 GB de RAM libre para la aplicación.

Puede implementar la demostración OpenTelemetry usando Docker o Kubernetes (con Helm). Elija su método de implementación preferido y asegúrese de tener instaladas las herramientas necesarias:

  • Docker
  • Docker Compose v2.0.0+
  • Make (opcional)
  • Kubernetes 1.24+
  • Helm 3.9+
  • Un clúster de Kubernetes activo con kubectl configurado para conectarse a él

Configuración e implementación del OpenTelemetry Demo

Clonación del repositorio

Clone el opentelemetry-demo repositorio en su dispositivo:

git clone https://github.com/open-telemetry/opentelemetry-demo.git

Configure el OpenTelemetry Collector

Para enviar los datos de telemetría del OpenTelemetry Demo a Datadog, necesita añadir los siguientes componentes a la configuración del OpenTelemetry Collector:

  • Resource Processor es un componente optional pero recomendado que se utiliza para establecer el atributo de recurso deployment.environment.name, que Datadog asigna a la etiqueta env.
  • Datadog Connector es responsable de calcular las métricas de traza de Datadog APM.
  • Datadog Exporter es responsable de exportar trazas, métricas y registros a Datadog.
  • Datadog Extension es un componente optional que le permite visualizar la configuración del OpenTelemetry Collector dentro del monitoreo de infraestructura. (Lea más en Datadog Extension).

Complete los siguientes pasos para configurar estos componentes.

  1. Abra el repositorio de la demostración. Cree un archivo llamado docker-compose.override.yml en la carpeta raíz.

  2. Abra el archivo creado. Pegue el siguiente contenido y establezca las variables de entorno Datadog site y Datadog API key:

    services:
      otel-collector:
        command:
          - "--config=/etc/otelcol-config.yml"
          - "--config=/etc/otelcol-config-extras.yml"
          - "--feature-gates=datadog.EnableOperationAndResourceNameV2"
        environment:
          - DD_SITE_PARAMETER=<Your API Site>
          - DD_API_KEY=<Your API Key>
    
  3. Para configurar el OpenTelemetry Collector, abra src/otel-collector/otelcol-config-extras.yml y añada lo siguiente al archivo:

    extensions:
      datadog/extension:
        api:
          site: ${env:DD_SITE_PARAMETER}
          key: ${env:DD_API_KEY}
        http:
          endpoint: "localhost:9875"
          path: "/metadata"
    
    exporters:
      datadog:
        traces:
          compute_stats_by_span_kind: true
          trace_buffer: 500
        api:
          site: ${env:DD_SITE_PARAMETER}
          key: ${env:DD_API_KEY}
        sending_queue:
          batch:
            min_size: 10
            max_size: 100
            flush_timeout: 10s
    
    processors:
      resource:
        attributes:
          - key: deployment.environment.name
            value: "otel"
            action: upsert
    
    connectors:
      datadog/connector:
        traces:
          compute_stats_by_span_kind: true
    
    service:
      extensions: [datadog/extension]
      pipelines:
        traces:
          receivers: [otlp]
          processors: [resourcedetection, memory_limiter, resource, transform/sanitize_spans]
          exporters: [otlp_grpc/jaeger, debug, spanmetrics, datadog, datadog/connector]
        metrics:
          receivers: [datadog/connector, docker_stats, httpcheck/frontend-proxy, hostmetrics, nginx, otlp, postgresql, redis, spanmetrics]
          processors: [resourcedetection, memory_limiter, resource]
          exporters: [otlp_http/prometheus, debug, datadog]
        logs:
          receivers: [otlp]
          processors: [resourcedetection, memory_limiter, resource]
          exporters: [opensearch, debug, datadog]
    

    By default, the collector in the demo application merges the configuration from two files:

    • src/otel-collector/otelcol-config.yml: contains the default configuration for the collector.
    • src/otel-collector/otelcol-config-extras.yml: used to add extra configuration to the collector.
    Al combinar valores YAML, los objetos se combinan y las matrices se reemplazan. Es por eso que hay más componentes especificados en las canalizaciones de los que realmente están configurados. La configuración anterior no reemplaza los valores configurados en el principal otelcol-config archivo.
  1. Cree un secreto llamado dd-secrets para almacenar los secretos del sitio de Datadog y la clave de API de Datadog:

    kubectl create secret generic dd-secrets --from-literal="DD_SITE_PARAMETER=<Your API Site>" --from-literal="DD_API_KEY=<Your API Key>"
    
  2. Agregue el Helm chart de OpenTelemetry a su repositorio para administrar e implementar el OpenTelemetry Demo:

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
  3. Cree un archivo llamado my-values-file.yml con el siguiente contenido:

    opentelemetry-collector:
      extraEnvsFrom:
        - secretRef:
            name: dd-secrets
      config:
        extensions:
          datadog/extension:
            api:
              site: ${env:DD_SITE_PARAMETER}
              key: ${env:DD_API_KEY}
            http:
              endpoint: "localhost:9875"
              path: "/metadata"
        exporters:
          datadog:
            traces:
              compute_stats_by_span_kind: true
              trace_buffer: 500
            hostname: "otelcol-helm"
            api:
              site: ${env:DD_SITE_PARAMETER}
              key: ${env:DD_API_KEY}
            sending_queue:
              batch:
                min_size: 10
                max_size: 100
                flush_timeout: 10s
    
        processors:
          resource:
            attributes:
              - key: deployment.environment.name
                value: "otel"
                action: upsert
    
        connectors:
          datadog/connector:
            traces:
              compute_stats_by_span_kind: true
    
        service:
          extensions: [health_check, datadog/extension]
          pipelines:
            traces:
              processors: [memory_limiter, resource, resourcedetection, transform]
              exporters: [otlp/jaeger, debug, spanmetrics, datadog, datadog/connector]
            metrics:
              receivers: [datadog/connector, otlp, spanmetrics]
              processors: [memory_limiter, resource, resourcedetection, transform]
              exporters: [otlphttp/prometheus, debug, datadog]
            logs:
              processors: [memory_limiter, resource, resourcedetection, transform]
              exporters: [opensearch, debug, datadog]
    
    Al combinar valores YAML, los objetos se combinan y las matrices se reemplazan. Es por eso que hay más componentes especificados en las canalizaciones de los que realmente están configurados. La configuración anterior no reemplaza los valores configurados en el principal otelcol-config archivo.

Ejecución del OpenTelemetry Demo

Si tiene make instalado, puede usar el siguiente comando para iniciar el OpenTelemetry Demo:

make start

Si no tiene make instalado, puede usar el comando docker compose directamente:

docker compose --env-file .env --env-file .env.override up --force-recreate --remove-orphans --detach

Para implementar la aplicación del OpenTelemetry Demo en Kubernetes usando Helm, ejecute el siguiente comando:

helm install my-otel-demo open-telemetry/opentelemetry-demo --values my-values-file.yml

Puede acceder a la interfaz web de Astronomy Shop para explorar la aplicación y observar cómo se generan los datos de telemetría.

  1. Si está ejecutando un clúster local, necesita reenviar el puerto del proxy de frontend:

    kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080
    
  2. Vaya a http://localhost:8080.

Correlación de datos de telemetría

Los pasos de instrumentación utilizados en todos los servicios del OpenTelemetry Demo se pueden encontrar en la documentación principal de OpenTelemetry.

Puede encontrar el lenguaje en el que se implementó cada servicio, así como su documentación en la tabla de referencia de características de lenguaje.

Exploración de datos de OpenTelemetry en Datadog

Cuando el OTel Demo está en ejecución, el generador de carga integrado simula tráfico en la aplicación. Después de un par de segundos, puede ver los datos llegando a Datadog.

Catalog

Visualizar todos los servicios que forman parte del OTel Demo:

  1. Vaya a APM > Catalog.
Visualizar la página de catálogo con la lista de servicios del OpenTelemetry Demo
  1. Seleccione Map para ver cómo están conectados los servicios. Cambie Map layout a Cluster o Flow para visualizar el mapa en diferentes modos.
Ver el flujo d Service Map con todos los servicios conectados
  1. Seleccione la vista Catalog, luego seleccione un servicio para ver un resumen del rendimiento en el panel lateral.
Visualizar resumen del rendimiento y guía de configuración de un servicio específico

Trace Explorer

Explore las trazas recibidas del OTel Demo:

  1. Desde Performance > Setup Guidance, haga clic en View Traces para abrir el Trace Explorer, con el servicio seleccionado aplicado como filtro.
Vista de traza con todos los tramos indexados para el servicio de comprobación
  1. Seleccione un tramo indexado para visualizar los detalles completos de la traza para esta transacción.
Vista de traza con todos los tramos que pertenecen a esa transacción específica
  1. Navegue por las pestañas para visualizar detalles adicionales:
    • Métricas de infraestructura para los servicios que reportan métricas de servidor.
    • Métricas de tiempo de ejecución para los servicios que ya se han implementado.
    • Entradas de registro correlacionadas con esta traza.
    • Enlaces de tramos vinculados a esta traza.

Consultas de traza

Datadog le permite filtrar y agrupar los datos de OpenTelemetry recibidos. Por ejemplo, para encontrar todas las transacciones de un usuario específico, puede usar Consultas de traza.

El OTel Demo envía user.id como etiquetas de tramos, por lo que puede usar esto para filtrar todas las transacciones activadas por el usuario:

  1. Desde Info en el panel lateral, pase el cursor sobre la línea con el ID de usuario, haga clic en el icono cog y seleccione filter by @app.user.id:<user_id>.

  2. Elimine cualquier filtro anterior, dejando solo @app.user.id aplicado para visualizar todas las transacciones que contienen tramos con el ID de usuario especificado.

Consulta de traza que filtra todos los tramos que contienen un app.user.id específico

Error Tracking

El OpenTelemetry Demo incluye un motor de Feature Flag para simular escenarios de error.

  1. Navegue a http://localhost:8080/feature para administrar los escenarios disponibles. Consulte la documentación del OpenTelemetry Demo para obtener más detalles.
  2. Después de que el OTel Demo comience a producir errores, puede visualizar y rastrear los servicios afectados en Datadog.
Vista de Error Tracking que muestra el error PaymentService Fail Feature Flag Enabled

Configuración de OpenTelemetry Collector

La extensión de Datadog le permite visualizar la configuración de OpenTelemetry Collector dentro de Datadog en cualquiera de las siguientes páginas:

Al seleccionar el nombre de host donde se ejecuta el Collector, puede visualizar su configuración completa:

Configuración de OpenTelemetry Collector renderizada dentro de Datadog

Lecturas adicionales