Support Docker
Support Docker
Section intitulée « Support Docker »GalataJ supporte le profilage des applications Java s’exécutant dans des conteneurs Docker avec découverte automatique et enregistrement.
Vue d’Ensemble
Section intitulée « Vue d’Ensemble »Les conteneurs Docker avec l’agent s’enregistrent automatiquement auprès du contrôleur en utilisant la découverte basée sur le push. Aucune configuration manuelle nécessaire !
Configuration
Section intitulée « Configuration »1. Configurer l’Agent dans Dockerfile
Section intitulée « 1. Configurer l’Agent dans Dockerfile »Ajoutez l’agent à votre Dockerfile :
# Copier le JAR de l'agentCOPY dist/agent/agent-core-1.0.0-SNAPSHOT.jar /agent/agent.jar
# Configurer l'agent JavaENV JAVA_TOOL_OPTIONS="-javaagent:/agent/agent.jar=package=com.myapp"
# Optionnel : Définir le nom du projet pour l'identificationENV GALATAJ_PROJECT=my-service
# Optionnel : Définir l'hôte du contrôleur (si pas localhost)ENV GALATAJ_CONTROLLER_HOST=host.docker.internalENV GALATAJ_CONTROLLER_PORT=98762. Construire l’Image Docker
Section intitulée « 2. Construire l’Image Docker »docker build -t my-java-app .3. Démarrer le Contrôleur
Section intitulée « 3. Démarrer le Contrôleur »Assurez-vous que le contrôleur est en cours d’exécution :
galataj controller startImportant : Si le contrôleur est sur l’hôte et que le conteneur doit se connecter :
- Utilisez
host.docker.internal(Docker Desktop) ou - Utilisez l’adresse IP de l’hôte ou
- Exécutez le contrôleur dans un réseau partagé
4. Exécuter le Conteneur
Section intitulée « 4. Exécuter le Conteneur »docker run -d \ --name my-service \ -p 8080:8080 \ my-java-appL’agent fait automatiquement :
- Détecte l’environnement Docker
- S’enregistre auprès du contrôleur
- Commence à envoyer des métriques
Découverte
Section intitulée « Découverte »Voir les JVMs Docker
Section intitulée « Voir les JVMs Docker »galataj jvmsSortie :
Found 2 JVM(s):
1. my-service ID: def456 Environment: docker App: my-service Container: abc123def456Champs Spécifiques à Docker
Section intitulée « Champs Spécifiques à Docker »Les JVMs Docker affichent :
- Environment :
docker(au lieu delocal) - Container ID : Identifiant du conteneur Docker
- App Name : De la variable d’environnement
GALATAJ_PROJECT - PID : Non disponible (null pour Docker)
Attachement
Section intitulée « Attachement »Attacher à une JVM Docker
Section intitulée « Attacher à une JVM Docker »En utilisant l’ID de JVM :
galataj attach --jvm-id def456Note : Les JVMs Docker utilisent la découverte basée sur le push, donc elles sont déjà enregistrées. La commande attach confirme la connexion.
Détection d’Environnement
Section intitulée « Détection d’Environnement »L’agent détecte automatiquement l’environnement Docker en vérifiant :
- Existence du fichier
/.dockerenv /proc/self/cgroupcontient “docker”- Variable d’environnement
DOCKER_HOST - ID du conteneur depuis le hostname ou cgroup
Flux d’Enregistrement
Section intitulée « Flux d’Enregistrement »Quand un conteneur Docker démarre :
- L’agent démarre avec l’application Java
- Détecte l’environnement Docker
- S’enregistre auprès du contrôleur via HTTP POST :
POST http://controller:9877/api/v1/jvms/register
- Envoie un heartbeat toutes les 30 secondes
- Envoie les métriques via TCP sur le port 9876
Payload d’Enregistrement
Section intitulée « Payload d’Enregistrement »{ "jvmId": "uuid-generated", "environment": "docker", "containerId": "order-service", "appName": "order-service", "labels": { "project": "order-service" }}Heartbeat
Section intitulée « Heartbeat »Les agents Docker envoient des heartbeats périodiques :
- Intervalle : Toutes les 30 secondes
- Endpoint :
POST /api/v1/jvms/{jvmId}/heartbeat - But : Garder l’enregistrement actif, mettre à jour
lastSeenAt
Le contrôleur supprime les JVMs obsolètes après 60 secondes sans heartbeat.
Configuration Réseau du Contrôleur
Section intitulée « Configuration Réseau du Contrôleur »Docker Desktop (Mac/Windows)
Section intitulée « Docker Desktop (Mac/Windows) »Utilisez host.docker.internal :
ENV GALATAJ_CONTROLLER_HOST=host.docker.internalENV GALATAJ_CONTROLLER_PORT=9876Utilisez l’IP de l’hôte ou un réseau partagé :
Option 1 : IP de l’Hôte
ENV GALATAJ_CONTROLLER_HOST=172.17.0.1Option 2 : Réseau Partagé
# Créer le réseaudocker network create profiler-net
# Exécuter le contrôleur dans le réseaudocker run -d --network profiler-net --name controller ...
# Exécuter l'app dans le même réseaudocker run -d --network profiler-net ...Docker Compose
Section intitulée « Docker Compose »version: '3.8'services: controller: # Service contrôleur (si conteneurisé)
app: build: . environment: - JAVA_TOOL_OPTIONS=-javaagent:/agent/agent.jar=package=com.myapp - GALATAJ_PROJECT=my-service - GALATAJ_CONTROLLER_HOST=controller - GALATAJ_CONTROLLER_PORT=9876 networks: - profiler-net
networks: profiler-net: driver: bridgeKubernetes
Section intitulée « Kubernetes »GalataJ fonctionne aussi dans Kubernetes :
- Montez le JAR de l’agent comme ConfigMap ou volume
- Définissez JAVA_TOOL_OPTIONS dans le deployment
- Configurez l’hôte du contrôleur vers le nom du service ou IP
- Les agents s’enregistrent automatiquement
Exemple de deployment :
apiVersion: apps/v1kind: Deploymentmetadata: name: my-appspec: template: spec: containers: - name: app env: - name: JAVA_TOOL_OPTIONS value: "-javaagent:/agent/agent.jar=package=com.myapp" - name: GALATAJ_CONTROLLER_HOST value: "profiler-controller.default.svc.cluster.local" volumeMounts: - name: agent mountPath: /agent volumes: - name: agent configMap: name: profiler-agentDépannage
Section intitulée « Dépannage »Le Conteneur N’Apparaît Pas
Section intitulée « Le Conteneur N’Apparaît Pas »Problème : JVM Docker pas dans la liste jvms
Solution :
- Vérifiez que l’agent est configuré :
echo $JAVA_TOOL_OPTIONS - Vérifiez que le contrôleur est accessible depuis le conteneur
- Vérifiez les logs du contrôleur :
logs/profiler-controller.log - Vérifiez la connectivité réseau
Connexion Refusée
Section intitulée « Connexion Refusée »Problème : L’agent ne peut pas se connecter au contrôleur
Solution :
- Vérifiez la configuration hôte/port du contrôleur
- Vérifiez la connectivité réseau :
ping controller-host - Testez l’endpoint HTTP :
curl http://controller:9877/api/v1/status - Vérifiez les règles du pare-feu
JVMs Obsolètes
Section intitulée « JVMs Obsolètes »Problème : Anciens conteneurs toujours dans la liste
Solution :
- Le contrôleur les supprime automatiquement après 60 secondes sans heartbeat
- Ou supprimez manuellement :
galataj detach --jvm-id <id>
Bonnes Pratiques
Section intitulée « Bonnes Pratiques »- Utilisez des noms de projet : Définissez
GALATAJ_PROJECTpour une identification facile - Réseaux partagés : Utilisez les réseaux Docker pour une meilleure isolation
- Limites de ressources : Définissez des limites mémoire/CPU appropriées
- Health checks : Surveillez l’enregistrement de l’agent dans les logs
- Labels : Utilisez des labels pour le filtrage et l’organisation
Prochaines Étapes
Section intitulée « Prochaines Étapes »- Découvrez l’intégration IntelliJ
- Explorez les commandes CLI