OpenTelemetry es un marco de observabilidad de código abierto que proporciona a los equipos de TI protocolos y herramientas estandarizados para recopilar y enrutar datos de observabilidad de aplicaciones de software. OpenTelemetry proporciona un formato coherente para La instrumentación es el proceso de añadir código a tu aplicación para capturar e informar datos de observabilidad a Datadog, como trazas, métricas y logs., generando, recopilando y exportando datos de observabilidad de aplicaciones, a saber, métricas, logs, y trazas, a plataformas de monitorización para su análisis y comprensión.
Esta guía muestra cómo configurar un ejemplo de aplicación OpenTelemetry para enviar datos de observabilidad a Datadog utilizando el SDK de OpenTelemetry, OpenTelemetry Collector y Datadog Exporter. Esta guía también indica cómo explorar estos datos en la interfaz de usuario Datadog.
(Opcional) Utiliza Linux para enviar métricas de infraestructura.
La aplicación de Calendario utiliza herramientas de OpenTelemetry para generar y recopilar métricas, logs y trazas. Los siguientes pasos explican cómo obtener estos datos de observabilidad en Datadog.
Instrumentación de la aplicación
La aplicación de muestra de Calendario ya está parcialmente instrumentada:
Ve al archivo principal CalendarService.java localizado en: ./src/main/java/com/otel/service/CalendarService.java.
El siguiente código instrumenta getDate() utilizando las anotaciones y la API de OpenTelemetry:
El Datadog Exporter envía los datos recogidos por el receptor de OTLP al backend de Datadog.
Ve al archivo otelcol-config.yaml.
Las siguientes líneas configuran el Datadog Exporter para enviar datos de observabilidad a Datadog:
otelcol-config.yaml
exporters:datadog:traces:compute_stats_by_span_kind:truetrace_buffer:500hostname:"otelcol-docker"api:key:${DD_API_KEY}sitio:datadoghq.comconnectors:datadog/connector:traces:compute_stats_by_span_kind:trueservice:pipelines:metrics:receivers:[otlp, datadog/connector]# <- update this lineexporters:[datadog]traces:exporters:[datadog, datadog/connector]logs:exporters:[datadog]
Establece exporters.datadog.api.site en tu sitio de Datadog. De lo contrario, por defecto es US1.
Esta configuración permite a Datadog Exporter enviar métricas, trazas y logs de tiempo de ejecución a Datadog. Sin embargo, el envío de métricas de infraestructura requiere configuración adicional.
OpenTelemetry Collector
En este ejemplo, configura tu OpenTelemetry Collector para enviar métricas de infraestructura .
Para enviar métricas de infraestructura desde OpenTelemetry Collector a Datadog, debes utilizar Linux. Se trata de una limitación del receptor Docker Stats.
Añade un bloque de docker_stats a la sección receivers de otel-config.yaml:
otelcol-config.yaml
receivers:otlp:protocolos:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318# add the following blockdocker_stats:endpoint:unix:///var/run/docker.sock# default; if this is not the Docker socket path, update to the correct pathmetrics:container.network.io.usage.rx_packets:enabled:truecontainer.network.io.usage.tx_packets:enabled:truecontainer.cpu.usage.system:enabled:truecontainer.memory.rss:enabled:truecontainer.blockio.io_serviced_recursive:enabled:truecontainer.uptime:enabled:truecontainer.memory.hierarchical_memory_limit:enabled:true
Actualiza service.pipelines.metrics.receivers para incluir docker_stats:
otelcol-config.yaml
service:pipelines:metrics:receivers:[otlp, datadog/connector, docker_stats]# <- update this line
Esta configuración permite a la aplicación Calendario enviar las métricas del contenedor a Datadog para que lo explores en Datadog.
Envío de datos de observabilidad con OTLP
La aplicación Calendario utiliza el exportador de registro OpenTelemetry en su configuración de Logback para enviar logs con OpenTelemetry Layer Processor (OTLP).
Ve al archivo de configuración Logback XML de la aplicación Calendario en /src/main/resources/logback.xml.
Las siguientes líneas definen el appender OpenTelemetry:
Además, las variables del entorno configuran el entorno de OpenTelemetry para exportar logs, métricas y trazas:
Ve al archivo Docker Compose de la aplicación de Calendario en ./deploys/docker/docker-compose-otelcol.yml.
La configuración de OTEL_EXPORTER_OTLP_ENDPOINT=http://otelcol:4317 permite el envío de métricas, trazas y logs con OTLP.
Correlacionar los datos de observabilidad
El etiquetado de servicio unificado vincula los datos de observabilidad en Datadog para que puedas navegar por métricas, trazas y logs con etiquetas (tags) coherentes.
La aplicación Calendario ya está configurada con etiquetado de servicio unificado:
Ve al archivo Docker Compose de la aplicación de Calendario en ./deploys/docker/docker-compose-otelcol.yml.
Las líneas siguientes permiten la correlación entre las trazas de aplicación y otros datos de observabilidad:
Para empezar a generar y enviar datos de observabilidad a Datadog, es necesario ejecutar la aplicación Calendario con el SDK de OpenTelemetry:
Ejecuta la aplicación desde la carpeta calendar/:
docker compose -f deploys/docker/docker-compose-otelcol.yml up
Este comando crea un contenedor de Docker con el OpenTelemetry Collector y el servicio de Calendario.
Para probar que la aplicación Calendario funciona correctamente, ejecuta el siguiente comando desde otra ventana de terminal:
curl localhost:9090/calendar
Comprueba que recibes una respuesta tal como:
{"date":"2022-12-30"}
Ejecuta el comando curl varias veces para asegurarte de que al menos una traza exporta al backend de Datadog.
La aplicación Calendario utiliza el procesador de muestreo probabilístico, por lo que solo el 30 % de las trazas enviadas a través de la aplicación llegan al backend de destino.
Cada llamada a la aplicación Calendario resulta en métricas, trazas y logs que son reenviados al OpenTelemetry Collector, luego al Datadog Exporter y finalmente al backend de Datadog.
Exploración de los datos de observabilidad en Datadog
Utiliza la interfaz de usuario de Datadog para explorar los datos de observabilidad de la aplicación de Calendario.
Nota: Los datos de tu traza pueden tardar unos minutos en aparecer.
Tiempo de ejecución y métricas de infraestructura
Consulta el tiempo de ejecución y métricas de infraestructura para visualizar, monitorizar y medir el rendimiento de tus aplicaciones, hosts, contenedores y procesos.
Ve a APM > Software Catalog (APM > Catálogo de software).
Pasa el ratón por encima del servicio calendar-otel y selecciona Full Page (Página completa).
Desplázate hasta el panel inferior y selecciona:
Infrastructure Metrics (Métricas de infraestructura) para ver tus métricas de contenedor de Docker, como el uso de CPU y memoria.
Métricas JVM para ver las métricas de tiempo de ejecución, como el uso del stack tecnológico y el recuento de subprocesos.
Logs
Consulta los logs para monitorizar y solucionar problemas de funcionamiento de la aplicación y el sistema.
Accede a Logs.
Si tienes otros logs en la lista, añade @service.name:calendar-otel al campo Search for (Buscar) para ver solo los logs de la aplicación Calendario.
Selecciona un log de la lista para ver más detalles.
Trazas
Consulta las trazas y tramos para observar el estado y el rendimiento de las solicitudes que ha procesado tu aplicación.
Ve a APM > Traces (APM > Trazas).
Busca la sección Service (Servicio) en el menú de filtros y selecciona la faceta calendar-otel para visualizar todas las trazas calendar-otel:
Para empezar, haz clic en una traza para abrir el panel lateral de la traza y ver más detalles sobre la traza y sus tramos. Por ejemplo, el gráfico de llamas refleja cuánto tiempo se ha dedicado a cada componente de la ruta de ejecución del Calendario:
Observa que puedes seleccionar Infrastructure, Metrics o Logs en el panel inferior para correlacionar tu traza con otros datos de observabilidad.