Introduction à rsyslog

1. Le rôle de syslog et ses limites

Qu'est-ce que syslog ?

syslog est un protocole et un service de journalisation standard pour les systèmes Unix/Linux (et certains systèmes BSD).
Son rôle est de :

De nombreux services se reposent sur syslog pour archiver les événements (authentification, kernel, applications, etc.).
Cependant, le démon syslog traditionnel (comme syslogd ou syslog-ng) peut avoir des limites en termes de performances, de flexibilité et de fonctionnalités avancées (filtrage granulaire, modularité, formats, etc.).


2. Présentation générale de rsyslog

Qu'est-ce que rsyslog ?

rsyslog (Rocket-fast System for Log Processing) est un démon de journalisation qui vient souvent remplacer ou compléter le syslog historique.
Il a été introduit pour apporter :

Architecture générale


3. Installation et configuration de base

Installation

Sur la majorité des distributions Linux récentes, rsyslog est installé par défaut. Sinon, on peut l'installer via le gestionnaire de paquets :

apt update
apt install rsyslog -y
yum install rsyslog
pacman -S rsyslog

Fichiers de configuration

La configuration de base ressemble souvent à :

# /etc/rsyslog.conf
# Module d'entrée (exemple) : permet d'écouter sur le socket local
module(load="imuxsock") # pour les logs système
module(load="imjournal") # pour les logs du journal systemd

# Modules de transport
module(load="imudp") # pour écouter en UDP
input(type="imudp" port="514")

module(load="imtcp") # pour écouter en TCP
input(type="imtcp" port="514")

# Règles de filtrage simples
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog

# Exemple de log distant
*.* @@logs.serveur-distant.local:10514 # envoi en TCP (notation @@)

Démarrer et activer rsyslog

systemctl enable rsyslog
systemctl start rsyslog
systemctl enable rsyslog
systemctl start rsyslog

4. Les avantages et intérêts de rsyslog

On peut donc construire un routage logique élaboré, envoyer certaines logs à un serveur distant précis, tout en stockant d'autres logs localement.


5. Cas d'usage et configuration avancée

5.1. Mise en place d'un serveur de logs centralisé

Sur le serveur central (récepteur)

Activer l'écoute en TCP/UDP :

# /etc/rsyslog.conf
module(load="imudp")
input(type="imudp" port="514")

module(load="imtcp")
input(type="imtcp" port="514")

# Optionnel : loguer ce qui arrive dans /var/log/remote/
template(name="RemoteFormat" type="string"
string="/var/log/remote/%HOSTNAME%/%syslogfacility-text%.log")

*.* ?RemoteFormat

Ouvrir le port 514 (UDP/TCP) dans le firewall si nécessaire :

sudo ufw allow 514/udp
sudo ufw allow 514/tcp

Sur les clients (envoyeurs)

Transmettre les logs au serveur rsyslog central :

# /etc/rsyslog.conf
*.* @@mon-serveur-logs.local:514 # @@ pour TCP, @ pour UDP

Redémarrer le service rsyslog :

sudo systemctl restart rsyslog

5.2. Stockage dans une base de données SQL

module(load="ommysql")

# Ex : pour envoyer tout dans une base MySQL
*.* :ommysql:serveur_bdd,nom_de_la_base,utilisateur,motdepasse

5.3. Filtrage avancé avec expressions

if ($programname == "sshd") then {
/var/log/sshd.log
stop
}

On peut utiliser des expressions, regex, comparaisons de champs, etc., pour un contrôle fin.

5.4. Envoi vers une stack de logs (Elasticsearch/Kibana)


6. Conclusion

rsyslog est devenu un standard de facto dans beaucoup de distributions Linux grâce à :

En centralisant les logs avec rsyslog, vous pouvez :

C'est un outil puissant et personnalisable qui s'adapte aussi bien aux besoins d'un petit serveur qu'à un écosystème très large (cluster, containers, microservices, etc.).

On profite généralement de sa flexibilité pour construire son propre pipeline de logs ou l'intégrer dans une solution plus complète comme l'Elastic Stack, Splunk ou Grafana Loki.


⬆️ Retour en haut de la page