Connexion des services avec Docker Compose
Maintenant que vous avez conteneurisé l'application Golang, vous allez utiliser Docker Compose pour connecter vos services ensemble. Vous connecterez les services de l'application Golang, Prometheus et Grafana pour surveiller l'application Golang avec Prometheus et Grafana.
Création d'un fichier Docker Compose
Créez un nouveau fichier nommé compose.yml
à la racine de votre application Golang. Le fichier Docker Compose contient des instructions pour exécuter plusieurs services et les connecter ensemble.
Voici un fichier Docker Compose pour un projet qui utilise Golang, Prometheus et Grafana. Vous trouverez également ce fichier dans le répertoire go-prometheus-monitoring
.
services:
api:
container_name: go-api
build:
context: .
dockerfile: Dockerfile
image: go-api:latest
ports:
- 8000:8000
networks:
- go-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 5
develop:
watch:
- path: .
action: rebuild
prometheus:
container_name: prometheus
image: prom/prometheus:v2.55.0
volumes:
- ./Docker/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
networks:
- go-network
grafana:
container_name: grafana
image: grafana/grafana:11.3.0
volumes:
- ./Docker/grafana.yml:/etc/grafana/provisioning/datasources/datasource.yaml
- grafana-data:/var/lib/grafana
ports:
- 3000:3000
networks:
- go-network
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=password
volumes:
grafana-data:
networks:
go-network:
driver: bridge
Comprendre le fichier Docker Compose
Le fichier Docker Compose se compose de trois services :
-
Service d'application Golang: Ce service construit l'application Golang à l'aide du Dockerfile et l'exécute dans un conteneur. Il expose le port
8000
de l'application et se connecte au réseaugo-network
. Il définit également une vérification de santé pour surveiller la santé de l'application. Vous avez également utiliséhealthcheck
pour surveiller la santé de l'application. La vérification de santé s'exécute toutes les 30 secondes et réessaye 5 fois si la vérification de santé échoue. La vérification de santé utilise la commandecurl
pour vérifier le point de terminaison/health
de l'application. En plus de la vérification de santé, vous avez également ajouté une sectiondevelop
pour surveiller les modifications dans le code source de l'application et reconstruire l'application à l'aide de la fonctionnalité Docker Compose Watch. -
Service Prometheus: Ce service exécute le serveur Prometheus dans un conteneur. Il utilise l'image officielle de Prometheus
prom/prometheus:v2.55.0
. Il expose le serveur Prometheus sur le port9090
et se connecte au réseaugo-network
. Vous avez également monté le fichierprometheus.yml
du répertoireDocker
qui est présent à la racine de votre projet. Le fichierprometheus.yml
contient la configuration de Prometheus pour récupérer les métriques de l'application Golang. C'est ainsi que vous connectez le serveur Prometheus à l'application Golang.global: scrape_interval: 10s evaluation_interval: 10s scrape_configs: - job_name: myapp static_configs: - targets: ["api:8000"]
Dans le fichier
prometheus.yml
, vous avez défini une tâche nomméemyapp
pour récupérer les métriques de l'application Golang. Le champtargets
spécifie la cible à partir de laquelle récupérer les métriques. Dans ce cas, la cible est l'application Golang s'exécutant sur le port8000
.api
est le nom du service de l'application Golang dans le fichier Docker Compose. Le serveur Prometheus récupérera les métriques de l'application Golang toutes les 10 secondes. -
Service Grafana: Ce service exécute le serveur Grafana dans un conteneur. Il utilise l'image officielle de Grafana
grafana/grafana:11.3.0
. Il expose le serveur Grafana sur le port3000
et se connecte au réseaugo-network
. Vous avez également monté le fichiergrafana.yml
du répertoireDocker
qui est présent à la racine de votre projet. Le fichiergrafana.yml
contient la configuration de Grafana pour ajouter la source de données Prometheus. C'est ainsi que vous connectez le serveur Grafana au serveur Prometheus. Dans les variables d'environnement, vous avez défini l'utilisateur et le mot de passe administrateur de Grafana, qui seront utilisés pour vous connecter au tableau de bord Grafana.apiVersion: 1 datasources: - name: Prometheus (Main) type: prometheus url: http://prometheus:9090 isDefault: true
Dans le fichier
grafana.yml
, vous avez défini une source de données Prometheus nomméePrometheus (Main)
. Le champtype
spécifie le type de la source de données, qui estprometheus
. Le champurl
spécifie l'URL du serveur Prometheus à partir duquel récupérer les métriques. Dans ce cas, l'URL esthttp://prometheus:9090
.prometheus
est le nom du service du serveur Prometheus dans le fichier Docker Compose. Le champisDefault
spécifie si la source de données est la source de données par défaut dans Grafana.
Outre les services, le fichier Docker Compose définit également un volume nommé grafana-data
pour persister les données de Grafana et un réseau nommé go-network
pour connecter les services ensemble. Vous avez créé un réseau personnalisé go-network
pour connecter les services ensemble. Le champ driver: bridge
spécifie le pilote de réseau à utiliser pour le réseau.
Construire et exécuter les services
Maintenant que vous avez le fichier Docker Compose, vous pouvez construire les services et les exécuter ensemble à l'aide de Docker Compose.
Pour construire et exécuter les services, exécutez la commande suivante dans le terminal :
$ docker compose up
La commande docker compose up
construit les services définis dans le fichier Docker Compose et les exécute ensemble. Vous verrez une sortie similaire dans le terminal :
✔ Network go-prometheus-monitoring_go-network Created 0.0s
✔ Container grafana Created 0.3s
✔ Container go-api Created 0.2s
✔ Container prometheus Created 0.3s
Attaching to go-api, grafana, prometheus
go-api | [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
go-api |
go-api | [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
go-api | - using env: export GIN_MODE=release
go-api | - using code: gin.SetMode(gin.ReleaseMode)
go-api |
go-api | [GIN-debug] GET /metrics --> main.PrometheusHandler.func1 (3 handlers)
go-api | [GIN-debug] GET /health --> main.main.func1 (4 handlers)
go-api | [GIN-debug] GET /v1/users --> main.main.func2 (4 handlers)
go-api | [GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
go-api | Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
go-api | [GIN-debug] Listening and serving HTTP on :8000
prometheus | ts=2025-03-15T05:57:06.676Z caller=main.go:627 level=info msg="No time or size retention was set so using the default time retention" duration=15d
prometheus | ts=2025-03-15T05:57:06.678Z caller=main.go:671 level=info msg="Starting Prometheus Server" mode=server version="(version=2.55.0, branch=HEAD, revision=91d80252c3e528728b0f88d254dd720f6be07cb8)"
grafana | logger=settings t=2025-03-15T05:57:06.865335506Z level=info msg="Config overridden from command line" arg="default.log.mode=console"
grafana | logger=settings t=2025-03-15T05:57:06.865337131Z level=info msg="Config overridden from Environment variable" var="GF_PATHS_DATA=/var/lib/grafana"
grafana | logger=ngalert.state.manager t=2025-03-15T05:57:07.088956839Z level=info msg="State
.
.
grafana | logger=plugin.angulardetectorsprovider.dynamic t=2025-03-15T05:57:07.530317298Z level=info msg="Patterns update finished" duration=440.489125ms
Les services commenceront à s'exécuter et vous pourrez accéder à l'application Golang à l'adresse http://localhost:8000
, à Prometheus à l'adresse http://localhost:9090/health
et à Grafana à l'adresse http://localhost:3000
. Vous pouvez également vérifier les conteneurs en cours d'exécution à l'aide de la commande docker ps
.
$ docker ps
Résumé
Dans cette section, vous avez appris à connecter des services ensemble à l'aide de Docker Compose. Vous avez créé un fichier Docker Compose pour exécuter plusieurs services ensemble et les connecter à l'aide de réseaux. Vous avez également appris à construire et à exécuter les services à l'aide de Docker Compose.
Informations connexes :
Ensuite, vous apprendrez comment développer l'application Golang avec Docker Compose et la surveiller avec Prometheus et Grafana.
Prochaines étapes
Dans la section suivante, vous apprendrez à développer l'application Golang avec Docker. Vous apprendrez également à utiliser Docker Compose Watch pour reconstruire l'image chaque fois que vous apportez des modifications au code. Enfin, vous testerez l'application et visualiserez les métriques dans Grafana en utilisant Prometheus comme source de données.