Journalisation avec HAProxy
Cet article documente notre configuration Ubuntu Lucid de 2010. Il utilise la configuration rsyslog historique et les commandes de service Upstart de cette version, et non une installation actuelle d’Ubuntu.
Chez Transloadit, nous utilisons HAProxy, « l’équilibreur de charge TCP/HTTP fiable et à hautes performances », pour pouvoir proposer plusieurs services sur un même port. Par exemple, selon le nom d’hôte, une requête vers le port 80 peut être acheminée soit vers Node.js (dans le cas de api.transloadit.com), soit vers Nginx (dans le cas de www.transloadit.com). HAProxy nous a bien servis et sa mise en place a été un jeu d’enfant. En revanche, faire journaliser HAProxy sous Ubuntu Lucid s’est révélé plus difficile que je ne le pensais. Tous les tutoriels que j’ai trouvés soit n’abordaient pas la journalisation, soit contenaient des informations obsolètes. Google a soudain cessé d’être mon ami.
HAProxy veut écrire ses journaux
Pour des raisons de performances et de maintenance, HAProxy n’écrit pas directement ses journaux dans des fichiers. Il préfère les envoyer à un serveur syslog. Il s’agit d’un démon Linux distinct dont la plupart des serveurs sont déjà équipés. HAProxy exige toutefois qu’il écoute sur le port UDP 514, ce qui n’est généralement pas activé.
Un serveur syslog reçoit les entrées de journal, détermine celles qui sont intéressantes et les écrit sur le disque de manière hautement optimisée. Tous ces aspects sont configurables à votre guise.
Si nous regardons le début de votre fichier /etc/haproxy/haproxy.cfg actuel, nous trouverons
peut-être quelque chose comme :
global
maxconn 10000
ulimit-n 65536
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
Comme vous pouvez le voir, 127.0.0.1 indique où il tentera de trouver un serveur
syslog auquel envoyer ses journaux. Sous Ubuntu Lucid, le démon syslog par défaut est
rsyslogd : configurons-le donc pour qu’il accepte les entrées de
journal d’HAProxy.
Rsyslogd accueille HAProxy
La majorité des résultats Google traitant de la journalisation avec HAProxy m’indiquaient de modifier
le fichier /etc/default/rsyslog, mais ce fichier est désormais complètement ignoré avec le
nouveau système upstart. De plus, même si vous faites en sorte
qu’HAProxy utilise le fichier par défaut (oui, j’ai essayé), cela forcera rsyslogd à passer en mode de
compatibilité. Ce qui est non seulement dommage, mais aussi, en fin de compte, inutile.
En utilisant les lignes de configuration suivantes :
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
rsyslogd écoutera uniquement sur l’interface de bouclage (loopback). N’exposez pas un écouteur syslog non authentifié sur le réseau public.
Où placer ces lignes, me demandez-vous ? Eh bien, si vous n’utilisez le port syslog UDP que pour le
service HAProxy, vous pouvez tout placer ou décommenter dans un seul fichier
/etc/rsyslog.d/haproxy.conf :
# .. otherwise consider putting these three in /etc/rsyslog.conf instead:
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
# ..and in any case, put these two in /etc/rsyslog.d/haproxy.conf:
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
Exécutez maintenant rapidement :
restart rsyslog
Et le tour est joué. Vérifiez les journaux HAProxy dans :
tail -f /var/log/haproxy*.log
Et n’oubliez pas d’ajuster le niveau de débogage dans /etc/haproxy/haproxy.cfg.
Bonne journalisation !
