categories | title |
---|---|
sysadmin | Howto Rsyslog |
Rsyslog est le démon Syslog par défaut sous Debian. Le protocole Syslog permet de gérer la journalisation : les messages sont envoyés par diverses applications (messages kernel, user, daemon, mail, etc.) triés par facility (LOG_KERN, LOG_CRON, LOG_DAEMON, LOG_MAIL, LOG_AUTH, etc.) et avec un niveau de severity (LOG_EMERG, LOG_ALERT, LOG_ERR, LOG_WARNING, etc.) ; ils sont reçus par un démon qui les répartit dans différents fichiers situés dans le répertoire /var/log/
ou par d'autres façons (serveur syslog distant, terminal, etc.)
Le paquet rsyslog tourne normalement déjà :
# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 2815 (rsyslogd)
Tasks: 4
Memory: 2.9M
CPU: 1.604s
CGroup: /system.slice/rsyslog.service
└─2815 /usr/sbin/rsyslogd -n
# rsyslogd -v
rsyslogd 8.16.0, compiled with:
PLATFORM: x86_64-pc-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
Number of Bits in RainerScript integers: 64
Le fichier de configuration principal est /etc/rsyslog.conf
:
module(load="imuxsock")
module(load="imklog")
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$WorkDirectory /var/spool/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
*.emerg :omusrmsg:*
Note : Pour Debian 7 et 8, la syntaxe pour charger les modules était différente :
$ModLoad imuxsock $ModLoad imklog
Les journaux principaux sont :
Nous conseillons d'ajouter ces paramètres :
À la suite du fichier de configuration nous pouvons ajouter :
*.*;auth,authpriv.none;cron,mail,local4,local5,local7.none -/var/log/syslog
cron.* /var/log/cron.log
#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
#mail.err /var/log/mail.err
local0.* /var/log/postgresql.log
local1.* /var/log/sympa.log
local4.* -/var/log/openldap.log
local5.* -/var/log/haproxy.log
local7.* -/var/log/dhcp.log
Rsyslog supporte une configuration plus avancée, notamment avec des notions d'input, filtre et output.
http://www.rsyslog.com/doc/v8-stable/configuration/modules/idx_input.html
Exemple avec l'input Text File qui permet à Rsyslog d'avaler des logs à partir d'un fichier, et par exemple de les renvoyer vers un serveur Syslog distant (Rsyslog ou Logstash) :
$InputFileName /home/log/foo.log
$InputFileTag foo:
$InputFileStateFile foo
$InputFileSeverity info
$InputFileFacility local0
$InputRunFileMonitor
local0.* @192.0.2.42
http://www.rsyslog.com/doc/v8-stable/configuration/filters.html
Voici un exemple de filtre sur $programname (ce qui pratique car le protocole Syslog a un nombre limité de facility personnalisables : local0, local1 ... jusqu'à local9) :
if $programname startswith 'haproxy' then /var/log/haproxy.log
On peut écrire des noms de fichier avec des variables comme la date par exemple. Cela permet notamment de gérer une rotation automatique (sans compression). En général on fait cela en définissant un template, que l'on utilise avec ?template :
$template DailyPerHostLogs,"/var/log/local2-%$YEAR%-%$MONTH%-%$DAY%.log"
local2.* ?DailyPerHostLogs
Nous pouvons activer Rsyslog en écoute sur le réseau (port UDP/514) ainsi :
module(load="imudp")
input(type="imudp" port="514")
Note Pour Debian 7 et 8, il fallait faire :
# provides UDP syslog reception $ModLoad imudp $UDPServerRun 514
Il est ainsi possible d'envoyer des logs à un serveur Rsyslog (ou Logstash !) via le réseau en spécifiant :
*.* @192.0.2.42
local0.* @192.0.2.42
# systemctl stop syslog.socket
Pour lancer rsyslog en ligne de commande en mode debug :
# rsyslogd -d -n
Pour envoyer des informations à Syslog en ligne de commande on peut utiliser logger :
$ logger test
$ logger -p local0.notice test
Rsyslog utilise le nouveau format RainerScript pour sa configuration. Pour rester avec le format de configuration « legacy » on utilise :
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat