L’explosion de la taille des logs a tué plus d’un serveur. Il est amusant de se dire que c’est du texte qui peut mettre à genoux un serveur de streaming vidéo avec 32 coeurs, 2To de SSD et 64 Go de RAM. Mais un bon access log non contrôlé sous nginx ou même le log de debug du wallet de la coin smartcash, ça peut prendre par surprise.
Le module logging de Python a d’excellentes options pour gérer la taille des logs, notamment le RotatingFileHandler
.
Sous Linux, c’est logrotate qui fait le boulot pour le système. C’est performant, ça marche super bien, c’est hyper simple à utiliser, et c’est dispo partout.
Bref, en prod, un petit vi sur /etc/logrotate.d/ton_projet
et pouf, on peut demander une rotation en 10 lignes:
/var/www/ton_projet/*.log { size 100K daily rotate 5 missingok notifempty }
Y a rien à activer, un cron lance déjà logrotate tous les jours.
Par contre, si votre process utilise systemd pour démarrer, inutile de logger manuellement. Tout ce qui est sur la sortie standard est automatiquement loggué avec rotation et accessible avec un petit journalctl -u ton_process.service --since today
.
Bref, attendez encore un peu avant de rajouter logstash à votre stack.
Nice! C’est un truc de base que tout le monde oublie.
Après, la plupart des clients ont maintenant un ELK dans un coin pour faire puit de log. Il suffit d’une micro config de rsyslog pour que les infos de “ton_projet” soit automagiquement forwardées vers le logstash distant géré par une autre équipe (et c’est toujours plus simple quand c’est aux autres de se faire chier à faire les beaux dashboard Kibana)
Thank you for sharing Kareem.