Catégories
Devops

Rsyslog

Rsyslog est un outil de gestion des logs que l’on retrouve dans une grande partie des distributions Linux.
L’avantage de ce système est qu’il permet de centraliser la gestion des logs en local ou sur le réseau sur un serveur de log car Rsyslog implémente RELP (protocole fiable de journalisation d’évènements).
Un exemple d’application serait de centraliser sur un même serveur de log tous les logs des serveurs web Nginx ce qui rendrait l’analyse et le debugging plus simple (tuto Nginx).

Notions

Rsyslog emploi les notions de sélecteurs et d’actions.

Sélecteurs

Un sélecteur, est un couple facility.priority qui va déterminer la provenance des logs à traiter.

  • Facility désigne un sous-système applicatif concerné (par ex cron, daemon, auth, mail etc.)
  • Priority désigne la priorité des messages à traiter.

Dans la configuration, il est possible de spécifier un ensemble de couples facility.priority séparés par des virgules, et il est également possible d’utiliser des * (joker).

Actions

A chaque sélecteur (ou ensemble de sélecteurs) nous associons une action qui consiste à envoyer ces logs vers un fichier ou vers un serveur de logs.
Les actions déterminent donc la destination des logs.

Configuration

Le fichier de configuration nous permet de spécifier les sélecteurs (le couple facility.priority) et l’action associée.

Il existe un fichier de configuration principal /etc/rsyslog.conf qui peut inclure d’autres fichiers (situés par ex dans /etc/rsyslog.d/) grâce à la directive $IncludeConfig /etc/rsyslog.d/*.conf .

Coté clients

Les clients doivent déterminer s’ils doivent envoyer leurs logs dans un fichier local ou à travers le réseau en TCP ou en UDP, mais surtout indiquer quels logs, à quel niveau de sévérité ils souhaitent envoyer, et où l’envoyer, voici quelques exemples.

local

cron.*                              /var/log/cron.log
auth,authpriv.err                     /var/log/auth.log
*.*;cron,auth,authpriv.none        -/var/log/syslog
  1. nous souhaitons envoyer tous les niveaux de logs de cron vers le fichier spécifié
  2. nous avons la notation facility1,facility2.priority qui spécifie que les logs de priorité (ici error) des 2 facilities spécifiés partirons vers auth.log
  3. tous les messages en dehors des logs des 3 services spécifiés (par le .none)

distant

*.* @monserveurdelog.fr:514
auth.err @monserveurdelog.fr:514
  • *.* : indique d’envoyer tous les logs
  • @ ou @@ : indique d’envoyer en UDP ou TCP
  • monserveurdelog.fr:514 : adresse et port du serveur de logs

Coté serveur

modifier le fichier de façon à permettre la réception des logs en UDP et/ou TCP:

$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514

puis paramétrer la whiteliste d’IP autorisés etc.

Voir doc Debian.