Este tutorial te guiará por los pasos para habilitar el rastreo para la aplicación Java utilizando el Controlador de admisión (Admission Controller) de Datadog.
Para otros escenarios, incluyendo el de un host, un contenedor, infraestructura en la nube y aplicaciones escritas en otros lenguajes, consulta los otros tutoriales de activación del rastreo.
Para obtener documentación general sobre la configuración del rastreo en Java, consulta Rastreo de aplicaciones Java.
Para demostrar cómo instrumentar tu aplicación con el Controlador de admisión (Admission Controller) de Datadog, este tutorial utiliza una aplicación Java creada con Spring. Puedes encontrar el código de la app en el repositorio springblog de GitHub.
El repositorio contiene una aplicación Java multiservicio preconfigurada para ejecutarse dentro de Docker y Kubernetes. La aplicación de ejemplo es una aplicación Spring básica que utiliza REST.
Inicio y ejecución de la aplicación de ejemplo
Cambia al subdirectorio /k8s en el repositorio springblog:
cd springblog/k8s/
Despliega la carga de trabajo con el archivo depl.yaml:
kubectl apply -f ./depl.yaml
Comprueba que se está ejecutando con el siguiente comando:
kubectl get pods
Deberías ver algo como esto:
NAME READY STATUS RESTARTS AGE
springback-666db7b6b8-dzv7c 1/1 Terminating 0 2m41s
springfront-797b78d6db-p5c84 1/1 Terminating 0 2m41s
El servicio se inicia y escucha en el puerto 8080. Expone un endpoint /upstream.
Comprueba que la comunicación sucede al ejecutar el siguiente comando curl:
Para detener la aplicación, ejecuta este comando desde el directorio springblog/k8s para poder activar el rastreo en ella:
kubectl delete -f ./depl-with-lib-inj.yaml
Instrumentar tu aplicación con el Controlador de admisión (Admission Controller) de Datadog
Una vez que tengas tu aplicación en funcionamiento, instruméntala con el Controlador de admisión (Admission Controller) de Datadog. En entornos contenedorizados, el proceso generalmente es el siguiente:
Etiqueta tu pod para ordenar al Controlador de admisión (Admission Controller) de Datadog que mute el pod.
No es necesario añadir la biblioteca de rastreo porque se inyecta automáticamente. Todavía no necesitas volver a desplegar tu aplicación. Esta sección del tutorial te guía a través de proceso para añadir variables de Datadog y desplegar una nueva imagen o versión de tu aplicación.
Desde el subdirectorio k8s, utiliza el siguiente comando para instalar el Datadog Cluster Agent, especificando el archivo de configuración values-with-lib-inj.yaml y tu clave de API de Datadog:
Configura el Controlador de admisión (Admission Controller) de Datadog para inyectar una biblioteca de rastreo al contenedor de la aplicación añadiendo la siguiente anotación al pod:
Esta anotación especifica la última versión de la biblioteca de rastreo de Java. También puedes hacer referencia a una versión específica de biblioteca, como "v1.5.0".
La definición final del pod debería parecerse al siguiente extracto. Consulta también el archivo YAML completo en el repositorio de ejemplo. Las instrucciones que has añadido para instrumentar la aplicación están resaltadas:
Ejecuta la aplicación de ejemplo con el siguiente comando:
kubectl apply -f depl-with-lib-inj.yaml
Ejecuta el siguiente comando para mostrar que la aplicación y el Agent se están ejecutando:
kubectl get pods
Deberías ver algo como esto:
NAME READY STATUS RESTARTS AGE
datadog-agent-4s8rb 3/3 Running 0 28m
datadog-agent-cluster-agent-5666cffc44-d8qxk 1/1 Running 0 28m
datadog-agent-kube-state-metrics-86f46b8484-mlqp7 1/1 Running 0 28m
springback-666db7b6b8-sb4tp 1/1 Running 0 27m
springfront-797b78d6db-mppbg 1/1 Running 0 27m
Ejecuta el siguiente comando para ver los detalles del pod:
kubectl describe pod springfront
Deberías ver algo como esto:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 32s default-scheduler Successfully assigned default/springfront-797b78d6db-jqjdl to docker-desktop
Normal Pulling 31s kubelet Pulling image "gcr.io/datadoghq/dd-lib-java-init:latest"
Normal Pulled 25s kubelet Successfully pulled image "gcr.io/datadoghq/dd-lib-java-init:latest" in 5.656167878s
Normal Created 25s kubelet Created container datadog-lib-java-init
Normal Started 25s kubelet Started container datadog-lib-java-init
Normal Pulling 25s kubelet Pulling image "pejese/springfront:v2"
Normal Pulled 2s kubelet Successfully pulled image "pejese/springfront:v2" in 22.158699094s
Normal Created 2s kubelet Created container springfront
Normal Started 2s kubelet Started container springfront
Como puedes ver, se añade un init-container a tu pod. Este contenedor incluye las bibliotecas de rastreo de Datadog Java en un montaje de volumen. También JAVA_TOOL_OPTIONS se modifica para incluir javaagent. Y las variables de entorno específicas de Datadog se añaden al contenedor:
Comprueba que la biblioteca de rastreo de Datadog se inyecta en el pod al controlar los logs del pod. Por ejemplo:
kubectl logs -f springfront-797b78d6db-jqjdl
Deberías ver algo como esto:
Defaulted container "springfront" out of: springfront, datadog-lib-java-init (init)
Picked up JAVA_TOOL_OPTIONS: -javaagent:/datadog-lib/dd-java-agent.jar
Ver trazas de APM en Datadog
Ejecuta el siguiente comando:
curl localhost:8080/upstream
AbrE la interfaz de usuario de Datadog y ve los dos informes de servicios en el Catálogo de servicios:
Explora las trazas y consulta el Mapa de servicios asociado:
Limpiar el entorno
Limpia tu entorno con el siguiente comando:
kubectl delete -f depl-with-lib-inj.yaml
La inyección de biblioteca con el Controlador de admisión (Admission Controller) simplifica la instrumentación del servicio, permitiéndote ver trazas de APM sin cambiar o reconstruir tu aplicación. Para obtener más información, lee la inyección de biblioteca de Datadog.
Solucionar problemas
Si no recibes trazas como esperabas, configura el modo de depuración para el rastreador de Java. Para obtener más información, lee Activar el modo de depuración.