Lors de l'utilisation de Kubernetes APM auto-attach, vous pouvez ajouter des modules d'extension Java pour améliorer les capacités monitoring d'une bibliothèque ou d'un framework spécifique non couvert par l'agent d'instrumentation Java par défaut.
Ce guide vous montre comment créer une image Docker personnalisée avec des extensions Java et l'intégrer à la fonction de Kubernetes APM auto-attach.
Avant de commencer
Avant d'ajouter des extensions Java, assurez-vous d'avoir :
- Kubernetes APM auto-attach installé et configuré
- Docker installé pour la création d'images personnalisées
- Accès à un registre de conteneurs (Docker Hub, ECR, GCR, etc.)
- Autorisation d'envoyer des images au registre
- Connaissance des modules d'extension Java dont vous avez besoin
Présentation
Le processus comporte trois étapes principales :
- Créez une image Docker personnalisée basée sur
newrelic/newrelic-java-init:latestavec les extensions souhaitées. - Créez et envoyez l'image vers votre registre de conteneurs.
- Mettez à jour votre instrumentation Kubernetes pour utiliser la nouvelle image.
Créer une image Docker personnalisée avec des extensions
Créer un Dockerfile
Créez un nouveau Dockerfile qui étend l'image d'initialisation Java New Relic d'origine et ajoute les extensions souhaitées. Voici un exemple utilisant l'extension Kotlin coroutines :
# 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.zipConseil
Remplacez l'exemple de coroutines Kotlin par les extensions spécifiques dont vous avez besoin. Vous trouverez les extensions disponibles dans la documentation des modules d'extension Java.
Construire l'image Docker
Créez votre image personnalisée localement :
$docker build -t your-registry/{Your-Image-Name}Remplacez your-registry/{Your-Image-Name} par le chemin d'accès réel de votre registre de conteneurs et le nom de votre image, par exemple, mycompany/newrelic-java-init-custom.
Envoyer au registre de conteneurs
Envoyez l'image vers votre registre de conteneurs :
$docker push your-registry/{Your-Image-Name}Mise à jour de l'instrumentation Kubernetes
Modifier la ressource d'instrumentation
Mettez à jour votre ressource personnalisée (CR) d'instrumentation existante pour utiliser la nouvelle image. Voici un exemple instrumentation-java.yaml:
apiVersion: newrelic.com/v1beta2kind: Instrumentationmetadata: name: newrelic-instrumentation-java namespace: newrelicspec: agent: language: java image: your-registry/{Your-Image-Name}Appliquer l'instrumentation mise à jour
Appliquez l'instrumentation mise à jour à votre cluster :
$kubectl apply -f instrumentation-java.yamlRedémarrage de la charge de travail affectée
Redémarrez vos applications Java pour qu'elles prennent en compte le nouveau conteneur d'initialisation avec les extensions :
Pour redémarrer un déploiement spécifique :
bash$# Restart a specific deployment$kubectl rollout restart deployment/my-java-deploymentPour redémarrer tout déploiement dans un espace de nommage :
bash$# Or restart all deployments in a namespace$kubectl rollout restart deployments -n my-namespace
Dépannage
Extensions non chargées
Si les extensions ne se chargent pas :
Vérifiez que le répertoire des extensions existe dans votre image personnalisée :
bash$docker run --rm your-registry/{Your-Image-Name} ls -la /extensionsVérifiez les permissions des fichiers et assurez-vous que les fichiers JAR avec l'extension appropriée sont lisibles.
Consultez les logs du conteneur d'initialisation pour tout message d'erreur survenu lors de l'initialisation de l'agent.