Al usar Kubernetes APM auto-attach, es posible que desee agregar plug-ins Java para mejorar las capacidades de monitoreo de bibliotecas o marcos específicos que no estén cubiertos por la instrumentación del agente Java predeterminada.
Esta guía le muestra cómo crear una imagen Docker personalizada con extensiones Java e integrarla con la función de Kubernetes APM auto-attach.
Antes de que empieces
Antes de agregar extensiones de Java, cerciorar de tener lo siguiente:
- Kubernetes APM auto-attach instalado y configurado
- Docker instalado para crear imágenes personalizadas
- Acceso a un registro de contenedores (Docker Hub, ECR, GCR, etc.)
- Licencia para enviar imágenes al registro
- Conocimiento de qué plug-ins de Java necesitas
Descripción general
El proceso consta de tres pasos principales:
- Crea una imagen Docker personalizada basada en
newrelic/newrelic-java-init:latestcon las extensiones que desees. - Crea y sube la imagen a tu registro de contenedores.
- Actualiza tu instrumentación de Kubernetes para usar la nueva imagen.
Crea una imagen Docker personalizada con extensiones.
Crea un Dockerfile
Crea un nuevo Dockerfile que extienda la imagen de inicialización Java original de New Relic y agregue las extensiones deseadas. Aquí tenéis un ejemplo empleando la extensión de corrutinas de Kotlin:
# Start from the original New Relic Java init imageFROM newrelic/newrelic-java-init:latest
# Create the extensions directory in the rootRUN mkdir -p /extensions
# Example: Add Kotlin coroutines instrumentation# Download the latest version and extract to extensions directoryRUN VERSION=$(wget -q -O - https://api.github.com/repos/newrelic/newrelic-java-kotlin-coroutines/releases/latest | \ awk '/tag_name/{gsub(/,|"/,"",$2);print$2}') && \ wget -qO /tmp/kotlin-coroutines-instrumentation.zip \ "https://github.com/newrelic/newrelic-java-kotlin-coroutines/releases/download/$VERSION/kotlin-coroutines-instrumentation-$VERSION.zip" && \ unzip -j /tmp/kotlin-coroutines-instrumentation.zip "*.jar" -d /extensions && \ rm /tmp/kotlin-coroutines-instrumentation.zipSugerencia
Reemplace el ejemplo de corrutinas de Kotlin con las extensiones específicas que necesite. Puedes encontrar las extensiones disponibles en la documentación de los plug-ins de Java.
Crea la imagen de Docker
Crea tu imagen personalizada localmente:
$docker build -t your-registry/{Your-Image-Name}Reemplace your-registry/{Your-Image-Name} con la ruta de registro y el nombre de imagen reales de su contenedor, por ejemplo, mycompany/newrelic-java-init-custom.
Enviar al registro de contenedores
Sube la imagen al registro de tu contenedor:
$docker push your-registry/{Your-Image-Name}Actualizar la instrumentación de Kubernetes
Modificar el recurso de instrumentación
Actualice su recurso personalizado (CR) de instrumentación existente para usar la nueva imagen. Aquí tienes un ejemplo instrumentation-java.yaml:
apiVersion: newrelic.com/v1beta2kind: Instrumentationmetadata: name: newrelic-instrumentation-java namespace: newrelicspec: agent: language: java image: your-registry/{Your-Image-Name}Aplique la instrumentación actualizada.
Aplique la instrumentación actualizada a su clúster:
$kubectl apply -f instrumentation-java.yamlResetear carga de trabajo afectada
Resetear tu aplicación Java para que emplee el nuevo contenedor de inicialización con extensiones:
Para resetear un despliegue específico:
bash$# Restart a specific deployment$kubectl rollout restart deployment/my-java-deploymentPara resetear todo el despliegue en un namespace:
bash$# Or restart all deployments in a namespace$kubectl rollout restart deployments -n my-namespace
Resolución de problemas
Las extensiones no se cargan
Si las extensiones no se cargan:
Verifique que el directorio de extensiones exista en su imagen personalizada:
bash$docker run --rm your-registry/{Your-Image-Name} ls -la /extensionsCompruebe las licencias de los archivos para cerciorar de que los archivos con extensión JAR sean legibles.
Revise los logs del contenedor de inicialización para detectar cualquier mensaje de error durante la inicialización del agente.