Sommaire
Bonjour à vous et merci d’avoir cliqué sur cet article de la rentrée ! 😁
Et oui, retour au boulot et à tous ces tickets que vous avez laissé de côté depuis le début de l’été 😛
Allez, comme je suis sympa je vais vous écrire un article pour rester encore (un peu) en vacances.
Quand on est dév on adore un truc en particulier
“Boire du café ?”
Alors, oui aussi mais encore un autre truc : automatiser.
De l’hébergement au déploiement jusqu’à l’intérieur des programmes, il ne viendrait à l’idée de personne de devoir faire certaines actions manuellement à une fréquence régulière. Il y a plusieurs raisons à cela :
Bon, vous l’aurez compris ça a beaucoup d’avantages et ça facilite pas mal notre travail quotidien 😀
“C’est super ça mais comment fait alors pour la mettre en place ?”
Et bien, tout dépend de votre stack technique et de ses configurations mais ici j’ai choisi de traiter un cas assez courant à savoir une application fonctionnant sur des services Docker.
Imaginons pour l’exemple que vous ayez une application sous Symfony et que vous souhaitez automatiser la consommation de messages placés dans une instance RabbitMQ.
Supervisor est un outil populaire pour gérer les processus en arrière-plan. Il redémarre automatiquement les processus en cas d'échec, ce qui est idéal pour les consommateurs de messages comme Symfony Messenger.
Simplement avec apt
Créez un fichier de configuration pour le processus Symfony Messenger.
Ajoutez la configuration suivante :
Après avoir créé le fichier de configuration, rechargez Supervisor et démarrez le processus :
Si votre serveur utilise systemd, vous pouvez créer un service systemd pour gérer votre commande.
Créez un fichier de service :
Ajoutez la configuration suivante :
Après avoir créé le fichier de service, démarrez-le et assurez-vous qu'il démarre au démarrage du système :
Non vous ne rêvez pas, si vous le souhaitez il est tout à fait possible d’utiliser un container Docker pour automatiser les tâches d’un … container Docker 😀
En fait comme vous le savez déjà, un container peut être “lié” à un autre, c’est le cas par exemple entre un container PHP et un container d’une base de données. Donc il est tout à fait envisageable sur ce principe d’avoir un container qui agit automatiquement sur un autre lorsqu’il est lancé.
Voyons cela en détail :
Ajoutez un service dans votre fichier docker-compose.yml :
Puis démarrez ce service avec :
Dans l’idée de tout garder sous Docker c’est la solution que j’ai choisi dans ma situation et cela fonctionne parfaitement. Mais vous pouvez très bien utiliser une autre des méthodes que l’on a évoqué.
“Oui mais si moi j’aime faire des cron c’est possible ou pas ?”
C’est effectivement possible, rien ne vous en empêche mais ce n’est pas la solution la plus recommandée :
Avantages :
Inconvénients :
“Ok bon je vois mais ton système aussi là il peut avoir des erreurs et des bugs non ?”
Oui, comme toujours en informatique, le risque zéro n’existe pas. Donc pour palier à cela on peut prévoir d’être alerté en cas de problème et là aussi il y a plusieurs solutions.
Vous pouvez utiliser des outils ou des scripts pour détecter des erreurs dans les logs et envoyer des alertes.
Vous pouvez écrire un script bash qui recherche des erreurs spécifiques dans les logs du consommateur, puis envoie un email ou une notification.
Exemple de script pour surveiller les erreurs :
Vous pouvez ensuite programmer ce script pour s'exécuter régulièrement via cron :
Si vous avez un système de centralisation des logs (comme ELK Stack, Loggly, Splunk, ou un autre service SaaS), vous pouvez configurer des alertes basées sur des conditions spécifiques, comme des erreurs ou des interruptions dans les logs.
Si vous utilisez Supervisor, vous pouvez configurer des alertes par email en cas d'arrêt inattendu du consommateur :
Dans le fichier de configuration supervisor.conf pour votre consommateur :
Si vous utilisez Docker, vous pouvez utiliser des outils comme Prometheus et Alertmanager pour surveiller l'état des conteneurs et déclencher des alertes.
Vous pouvez utiliser des services de monitoring tels que New Relic, Datadog, Nagios, ou Zabbix pour surveiller la santé de votre application, y compris les processus en arrière-plan comme Symfony Messenger.
Ces outils peuvent être configurés pour :
Si vous avez tout de même décidé d’utiliser Cron 😛 ou que vous y êtes obligés par contrainte technique, vous pouvez configurer cron pour envoyer un email en cas d'erreur.
Ajoutez MAILTO en haut de votre crontab pour spécifier l'adresse email de destination :
Avec cette configuration, si une erreur survient lors de l'exécution de la commande, cron enverra un email à l'adresse spécifiée.
Voilà, vous savez maintenant à la fois comment automatiser des process dans un container Docker et aussi les monitorer, c’est-à-dire les surveiller et être alerté en cas de problème.
Vous y gagnerez du temps, de la performance et de la propreté dans vos configurations. D’autant plus que vous pouvez dupliquer ces process à vos futures applications et ainsi avoir la même routine sur quasiment tous vos projets selon leur stack technique.
Je vous avais dit qu’on allait parler de vacances ? 😀
Allez, sur ces belles paroles on se retrouve bientôt pour un prochain article. 🙂