240 lines
6.7 KiB
Markdown
240 lines
6.7 KiB
Markdown
---
|
||
categories: sysadmin
|
||
title: Howto Rsyslog
|
||
...
|
||
|
||
* Documentation : <http://www.rsyslog.com/doc/v8-stable/>
|
||
|
||
[Rsyslog](http://www.rsyslog.com/) est le démon **Syslog** par défaut sous Debian. Le protocole [Syslog](https://fr.wikipedia.org/wiki/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.)
|
||
|
||
## Installation
|
||
|
||
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
|
||
~~~
|
||
|
||
## Configuration
|
||
|
||
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 :
|
||
|
||
* auth.log : authentification système (login, su, getty)
|
||
* daemon.log : relatif aux daemons
|
||
* mail.* : relatifs aux mails
|
||
* kern.log : générés par le noyau
|
||
* user.log : générés par des programmes utilisateur
|
||
* debug : messages de debug
|
||
* messages : messages d'infos
|
||
* syslog : tous les messages (sauf exceptions définies)
|
||
|
||
Nous conseillons d'ajouter ces paramètres :
|
||
|
||
* activer cron.log
|
||
* supprimer mail.info, mail.warn et mail.err
|
||
* réduire les infos en double envoyées à /var/log/syslog
|
||
* créer des entrées pour les services standard
|
||
|
||
À 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
|
||
~~~
|
||
|
||
|
||
## Configuration avancée
|
||
|
||
**Rsyslog** supporte une configuration plus avancée, notamment avec des notions d'input, filtre et output.
|
||
|
||
### Input
|
||
|
||
<http://www.rsyslog.com/doc/v8-stable/configuration/modules/idx_input.html>
|
||
|
||
Exemple avec l'input [Text File](http://www.rsyslog.com/doc/v8-stable/configuration/modules/imfile.html) 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](HowtoELK#logstash)) :
|
||
|
||
~~~
|
||
$InputFileName /home/log/foo.log
|
||
$InputFileTag foo:
|
||
$InputFileStateFile foo
|
||
$InputFileSeverity info
|
||
$InputFileFacility local0
|
||
$InputRunFileMonitor
|
||
|
||
local0.* @192.0.2.42
|
||
~~~
|
||
|
||
### Filtre
|
||
|
||
<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
|
||
~~~
|
||
|
||
### Ignorer certains messages
|
||
|
||
Si on souhaite ignorer les logs émis par un programme, `bundle` dans cet exemple :
|
||
|
||
~~~
|
||
:programname, isequal, "bundle" ~
|
||
~~~
|
||
|
||
## Administration
|
||
|
||
### Rotation automatique des logs
|
||
|
||
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
|
||
~~~
|
||
|
||
### Activation en réseau
|
||
|
||
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](HowtoELK#logstash) !) via le réseau en spécifiant :
|
||
|
||
~~~
|
||
*.* @192.0.2.42
|
||
local0.* @192.0.2.42
|
||
~~~
|
||
|
||
Si le serveur de logs distant écoute en TCP, il faut rajouter un @ pour indiquer qu'on veux établir la connexion en TCP, comme ceci :
|
||
|
||
~~~
|
||
*.* @@192.0.2.42
|
||
local0.* @@192.0.2.42
|
||
~~~
|
||
|
||
## FAQ
|
||
|
||
### Stopper rsyslog
|
||
|
||
~~~
|
||
# systemctl stop syslog.socket
|
||
~~~
|
||
|
||
### Mode debug
|
||
|
||
Pour lancer rsyslog en ligne de commande en mode debug :
|
||
|
||
~~~
|
||
# rsyslogd -d -n
|
||
~~~
|
||
|
||
### logger
|
||
|
||
Pour envoyer des informations à Syslog en ligne de commande on peut utiliser _logger_ :
|
||
|
||
~~~
|
||
$ logger test
|
||
$ logger -p local0.notice test
|
||
~~~
|
||
|
||
### format de configuration RainerScript
|
||
|
||
Rsyslog utilise le nouveau format _RainerScript_ pour sa configuration.
|
||
Pour rester avec le format de configuration « legacy » on utilise :
|
||
|
||
~~~
|
||
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
|
||
~~~
|
||
|