4 lignes pour RSyslog

17/03/10

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 !