Déploiement de Logspout en tant que Service Global sur Docker Swarm

La gestion centralisée des journaux est cruciale dans les environnements Docker Swarm. Logspout, un routeur de journaux léger pour conteneurs Docker, peut être déployé en tant que service global pour assurer la collecte et le routage automatiques des journaux sur tous les nœuds du cluster. Ce guide détaille la mise en œuvre de Logspout dans Docker Swarm.

Pourquoi Logspout pour Swarm ?

Dans un cluster Swarm, le déploiement d'agents de journalisation sur chaque nœud individuellement complique l'administration et peut entraîner des divergences de configuration. Logspout en mode service global résout ces problèmes en offrant : - Découverte automatique : Surveille les conteneurs sur tous les nœuds Swarm.

  • Gestion centralisée : Une seule définition de service pour l'ensemble du cluster.
  • Légèreté : Image basée sur Alpine Linux, de petite taille (environ 15.2 Mo).
  • Flexibilité de routage : Prend en charge syslog, raw, TLS et d'autres formats de sortie.

Configuration Rapide en Service Global

Pour déployer Logspout en tant que service global, utilisez le fichier Docker Compose suivant : ```

version: "3" services: logspout: image: gliderlabs/logspout:latest networks: - logging_network volumes: - /etc/hostname:/etc/host_hostname:ro - /var/run/docker.sock:/var/run/docker.sock command: - syslog://your-log-aggregator.example.com:514 deploy: mode: global resources: limits: cpus: '0.25' memory: 300M reservations: cpus: '0.15' memory: 150M


**Explications des configurations clés :**- `deploy.mode: global` : Assure qu'une instance de Logspout s'exécute sur chaque nœud Swarm.
- `/etc/hostname:/etc/host_hostname:ro` : Permet à Logspout d'identifier correctement le nom d'hôte de chaque nœud.
- Les limites de ressources garantissent la stabilité et évitent l'impact sur d'autres applications.

### Meilleures Pratiques de Déploiement

#### Configuration du Nom d'Hôte

Logspout utilise le fichier `/etc/host\_hostname` pour déterminer le nom d'hôte du nœud. Le code suivant illustre cette logique : ```

import (
	"io/ioutil"
	"strings"
)

func getHostIdentifier() string {
	content, err := ioutil.ReadFile("/etc/host_hostname")
	if err == nil && len(content) > 0 {
		return strings.TrimSpace(string(content))
	}
	// Fallback logic could be added here if needed
	return ""
}

Architecture Réseau

Il est recommandé de créer un réseau dédié pour Logspout afin d'isoler le trafic des journaux : ```

networks: logging_network: driver: overlay


#### Filtrage des Conteneurs

Utilisez des variables d'environnement pour contrôler quels conteneurs collecter : ```

# Exclure les conteneurs avec des labels spécifiques
docker service create --name logspout \
    -e LOGSPOUT_EXCLUDE_LABELS="env:test;monitoring:false" \
    -v /var/run/docker.sock:/var/run/docker.sock \
    gliderlabs/logspout

Options de Configuration Avancées

Sécurisation avec TLS

Pour un transfert de journaux chiffré, configurez TLS : ```

Exemple d'export de variables d'environnement pour la configuration TLS

export LOGSPOUT_TLS_TRUSTED_CERTS="/path/to/ca.pem" export LOGSPOUT_TLS_CLIENT_CERTIFICATE="/path/to/client.pem" export LOGSPOUT_TLS_CLIENT_PRIVATE_KEY="/path/to/client.key"


#### Gestion des Journaux Multi-Lignes

Pour les traces de pile volumineuses ou les journaux sur plusieurs lignes, activez le mode multi-ligne : ```

docker service create --name logspout \
    -v /var/run/docker.sock:/var/run/docker.sock \
    gliderlabs/logspout \
    multiline+tcp://log.collector.host:6000?pattern=^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\]

Surveillance et Dépannage

Intégration de la Vérification de Santé

Logspout inclut des mécanismes pour vérifier son propre état de santé, facilitant la surveillance : ```

// Le code source contient des implémentations pour la vérification de santé.


#### Conseils d'Optimisation des Performances

- Ajustez `INACTIVITY\_TIMEOUT` pour éviter les blocages de l'API Docker.
- Utilisez `BACKLOG=false` pour empêcher la re-collecte des journaux historiques.
- Définissez des réservations et des limites de ressources appropriées.

### Commande de Déploiement

Une fois la configuration finalisée, déployez le service avec la commande suivante : ```

docker stack deploy --compose-file docker-compose.yml logspout_stack

Logspout en tant que service global sur Docker Swarm offre une solution robuste et évolutive pour la gestion des journaux. En suivant ces directives, vous pouvez établir une architecture de journalisation centralisée et efficace.

Étiquettes: docker swarm logspout journalisation orchestration de conteneurs Microservices

Publié le 14 juin à 21h10