4 lignes pour RSyslog
Il n’y a pas si longtemps que ça, je vous parlais très vaguement de RSyslog.
Intuitif, vite déployé, avantages multiples, toussa toussa… Bref, ça sentait le faux, le lu, le commercial, et malgrè tous les véritables avantages que le daemon représentait, vous ne m’avez pas crue. Ah c’est comme ça !
Voilà en concis 4 lignes qui vous feront basculer du côté obscure de la RsysForce !
RSyslog en UDP sur le port 514
Une fois rsyslog installé, et donc syslog viré automatiquement, vous pouvez aller taper directement sur /etc/rsyslog.d/.
Un truc bien pratique existe par défaut sur votre /etc/rsyslog.d/, un fichier de type 00-common. Il contient déjà les quelques informations utiles pour pouvoir monter un trafic Rsyslog, alors pourquoi s’en priver ? Copiez, renommez, et roule ! D’ailleurs, ce qui est bien avec RSyslog, c’est justement qu’il va parser tout ce qu’il trouvera dans son /etc/rsyslog.d/.
La partie Serveur
#### GLOBAL DIRECTIVES #### # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on # An "In-Memory Queue" is created for remote logging. $WorkDirectory /var/spool/rsyslog # where to place spool files $ActionQueueFileName queue # unique name prefix for spool files $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) $ActionQueueSaveOnShutdown on # save messages to disk on shutdown $ActionQueueType LinkedList # run asynchronously $ActionResumeRetryCount -1 # infinety retries if host is down #### MODULES #### $ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command) $ModLoad imklog.so # provides kernel logging support (previously done by rklogd) #$ModLoad immark.so # provides --MARK-- message capability # Provides UDP syslog reception $ModLoad imudp.so # Nos fameuses sockets UDP $UDPServerRun 514 # Le truc qui dit que c'est en UDP sur le port 514 # EOF /etc/rsyslog/server.conf
Redémarrez rsyslogd, qui doit alors abreuver votre /var/log/syslog de message. Et oui, la nature est bien faite, rsyslog est compliant syslog. Il ne détruit pas, il réutilise ! D’ailleurs, si ce mode rétrocompatible est bien pratique en phase de transition, il convient quand même de rebasculer pour profiter à fond des fonctionnalités de RSyslog. Cette bascule dépend en réalité de la présence d’un fichier de conf de syslog dans /etc/. Petit mv et on n’en parle plus. Enfin, pour savoir, en mode lancement manuel, c’est l’option -c4 qui passera en full rsyslogd et non plus en syslog compliant.
La partie Client
Même scénario, mais sur le client, qui a auparavant installé rsyslog. Tentez le vim /etc/rsyslog.d/client.conf
#### GLOBAL DIRECTIVES #### # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on # An "In-Memory Queue" is created for remote logging. $WorkDirectory /var/spool/rsyslog # where to place spool files $ActionQueueFileName rsyslogclient # unique name prefix for spool files $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) $ActionQueueSaveOnShutdown on # save messages to disk on shutdown $ActionQueueType LinkedList # run asynchronously $ActionResumeRetryCount -1 # infinety retries if host is down #### MODULES #### $ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command) $ModLoad imklog.so # provides kernel logging support (previously done by rklogd) #$ModLoad immark.so # provides --MARK-- message capability # Provides UDP syslog reception # UDP sockets $ModLoad imudp.so $UDPServerRun 514 *.* @Rsyslogserver:514 # EOF /etc/rsyslog/client.conf
Petite astuce très simple, pour tester l’ouverture du port, il suffit de lancer un NetCat sur le port concerné, en mode UDP.
echo "bux" | ncat -u Rsyslogserver 514
Une entrée « bux » en provenance du client doit apparaitre dans le log du Server
RSyslog en TCP sur le port 514
Oui mais UDP, son mode non connecté, insecure,… Et si on essayait en TCP ? Bon, notez au passage tout ce que cela peut comporter comme trafic, contrôle des pertes, retransmissions, acquittements…
La partie Serveur
On réitère, mais en veillant à indiquer à notre Rsyslogserver le bon type de socket dans notre /etc/rsyslog.d/server.conf.
#### GLOBAL DIRECTIVES #### # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on # An "In-Memory Queue" is created for remote logging. $WorkDirectory /var/spool/rsyslog # where to place spool files $ActionQueueFileName queue # unique name prefix for spool files $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) $ActionQueueSaveOnShutdown on # save messages to disk on shutdown $ActionQueueType LinkedList # run asynchronously $ActionResumeRetryCount -1 # infinety retries if host is down #### MODULES #### $ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command) $ModLoad imklog.so # provides kernel logging support (previously done by rklogd) #$ModLoad immark.so # provides --MARK-- message capability # Provides TCP syslog reception $ModLoad imtcp.so $InputTCPServerRun 514 # EOF /etc/rsyslog.d/server.conf
Et sur le Client…
Ca donne ça.
### GLOBAL DIRECTIVES #### # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on # An "In-Memory Queue" is created for remote logging. $WorkDirectory /var/spool/rsyslog # where to place spool files $ActionQueueFileName rsyslogclient # unique name prefix for spool files $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) $ActionQueueSaveOnShutdown on # save messages to disk on shutdown $ActionQueueType LinkedList # run asynchronously $ActionResumeRetryCount -1 # infinety retries if host is down #### MODULES #### $ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command) $ModLoad imklog.so # provides kernel logging support (previously done by rklogd) #$ModLoad immark.so # provides --MARK-- message capability # Provides TCP syslog reception $ModLoad imtcp.so $InputTCPServerRun 514 *.* @@Rsyslogserver:514 # EOF /etc/rsyslog.d/client.conf
Notez que l’on a une double @ pour le mode TCP.
Conclusion
Testez. Déployez. Je vous l’avais dit ! Un jeu d’enfant ! Enjoy !

Miam miam ce tuto ! Je cherchais a verifier le TCP.
Peut on nommer les fichiers de logs en fonction de la valeurs des champs d’entete des lignes de logs.
J’ai plusieurs machines qui logguent, mais avec des IP dynamiques. J’aimerai avoir des logs en fonction de leur adresse MAC respective. Possible ?
Bonjour,
Pour répondre à ta question, je sais que l’on peut jouer avec les templates pour splitter les logs selon différents critères, mais je n’ai moi-même pas mis en pratique ces subtilités.
Pour être plus précise, voilà ce que dit une partie du man :
Please note that templates can also by used to generate selector lines with dynamic file names. For example, if you would like to split syslog messages from different hosts to different files (one per host), you can define the following template:
$template DynFile, »/var/log/system-%HOSTNAME%.log »
This template can then be used when defining an output selector line. It will result in something like « /var/log/system-localhost.log »
Il a également possibilité de jouer avec les properties, mais cela semble moins pertinent par rapport à ta question, puisqu’il s’agit de modifier celles-ci, donc mis à part le fait de remplacer l’ip dynamique par le hostname (apparemment, il n’y a pas de properties pour la Mac address), je ne pense pas que cela te serve.
En tout cas, voici la syntaxe :
%propname:fromChar:toChar:options%
N’hésite pas à me faire un retour sur leur utilisation, ce serait intéressant de voir si finalement cela te permet d’arriver à tes fins !
Bonne journée à toi !
Je pense que ca peut convenir :)
Il me suffirait de ceci dans mes clients :
char *macaddress= »123456000082″;
openlog ( macaddress, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_INFO, « Un log… »);
closelog ();
Et d’un regle comme celle-ci dans mon fichier de configuration pour créer à la fois le repertoire (123456/) et le fichier 123456000082-trace.log :
$template CustomFormat, »%TIMESTAMP:::date-rfc3339% %msg%\n »
$ActionFileDefaultTemplate CustomFormat
$template DynFile, »/var/log/%programname:0:4:%/%programname%-trace.log »
*.*;auth,authpriv.none ?DynFile
Ca marche nickel, si ce n’est que le répertoire est créé avec les droits 0700 (le log en lui meme 0644), et ça en dépit de ceci :
#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
Je n’ai pas encore creusé cette dernière question jusqu’au bout, mais en ce qui concerne le nommage des fichiers, cela repond parfaitement à la problématique.
Merci !
Effectivement, ça me parait pas mal !
En tout cas merci à toi pour avoir partagé ton tips ! Je garde l’info sous le coude, disponible pour tous ceux que ça intéresse !
Bonne journée et merci encore !
Bonjour, est-ce possible de configurer rsyslog pour qu’il travaille sur des logs applicatifs type ceux d’Apache par exemple ?
Merci d’avance pour vos réponses.
Bonjour,
C’est tout-à-fait possible, et si tu veux la partie tech, tu peux jeter un oeil sur http://wiki.rsyslog.com/index.php/Working_Apache_and_Rsyslog_configuration
Bonne journée !