20.3. Utiliser le nouveau format de configuration

Sur la version 7 de rsyslog, installée par défaut pour Red Hat Enterprise Linux 7 dans le paquet rsyslog, une nouvelle syntaxe de configuration est présentée. Ce nouveau format de configuration vise à être plus puissant, plus intuitif, et à empêcher que des erreurs communes se produisent en interdisant certained constructions invalides. Les améliorations de la syntaxe sont autorisées par le nouveau processeur de configuration qui repose sur RainerScript. Le format hérité est toujours pris en charge et est utilisé par défaut dans le fichier de configuration /etc/rsyslog.conf.
RainerScript est un langage de script conçu pour traiter des événements réseau et pour configurer des processeurs d'événements tels que rsyslog. RainerScript était tout d'abord utilisé pour définir des filtres basés sur expressions, veuillez consulter l'Exemple 20.3, « Filtres basés Expression ». La version RainerScript en rsyslog version 7 implémente les déclarations input() et ruleset(), qui permettent au fichier de configuration /etc/rsyslog.conf d'être écrit sous le nouveau style uniquement. La différence avec la nouvelle syntaxe, c'est qu'elle est plus structurée ; les paramètres sont passés sous forme d'arguments aux déclarations, telles que les entrées, les actions, les modèles et les chargements de modules. L'étendue des options est réduite en blocs. Cela améliore la lisibilité et diminue le nombre de bogues causés par les problèmes de configuration. Il y a également une amélioration de performance importante. Certaines fonctionnalités sont dans les deux syntaxes, certaines dans une seule.
Vous allez pouvoir effectuer une comparaison avec la configuration écrite avec les paramètres utilisant le style hérité :
$InputFileName /tmp/inputfile
$InputFileTag tag1:
$InputFileStateFile inputfile-state
$InputRunFileMonitor
et la même configuration utilisant le nouveau format de déclaration :
input(type="imfile" file="/tmp/inputfile" tag="tag1:" statefile="inputfile-state")
Cela réduit de manière significative le nombre de paramètres utilisés dans la configuration, améliore la lisibilité, et offre également une vitesse d'exécution plus rapide. Pour obtenir davantage d'informations sur les déclarations et paramètres RainerScript, veuillez consulter la section intitulée « Documentation en ligne ».

20.3.1. Rulesets

Laissant les directives spéciales de côté, rsyslog gère les messages comme défini par des règles consistant d'une condition de filtre et d'une action à effectuer si la condition est « true ». Avec un fichier /etc/rsyslog.conf écrit de manière traditionnelle, toutes les règles sont évaluées dans leur ordre d'apparition pour chaque message d'entrée. Ce processus est lancé avec la première règle et continue jusqu'à ce que toutes les règles soient traitées ou jusqu'à ce que le message soit rejeté par l'une des règles.
Cependant les règles peuvent être regroupées en séquences appellées des rulesets. Avec des rulesets, il est possible de limiter l'effet de certaines règles uniquement à certaines entrées sélectionnées ou d'améliorer les performances de rsyslog en définissant un ensemble d'actions limitées à une entrée spécifique. Autrement dit, les conditions du filtre qui seront inévitablement évaluées comme fausses pour certains types de messages peuvent être ignorées. La définition du ruleset dans /etc/rsyslog.conf ressemblera à ceci :
$RuleSet rulesetname
rule
rule2
La règle se termine dès qu'une autre règle est définie, ou bien, quand le ruleset par défaut est actionné ainsi :
$RuleSet RSYSLOG_DefaultRuleset
Avec le nouveau format de configuration de rsyslog 7, les déclarations input() et ruleset() sont réservées à cette opération. Le nouveau format de la définition du ruleset de /etc/rsyslog.conf ressemble à ceci :
ruleset(name="rulesetname") { 
      rule
      rule2
      call rulesetname2
      … 
}
Remplacez rulesetname par un identifiant pour le ruleset. Le nom du ruleset ne peut pas commencer par RSYSLOG_ car l'utilisation de cet espace nom est réservé à rsyslog. RSYSLOG_DefaultRuleset définit ensuite un ensemble de règles à effectuer si aucun autre ruleset n'est assigné au message. Avec rule et rule2, vous pouvez définir les règles sous le format de filtrage d'actions mentionné ci-dessus. Avec le paramètre call, vous pouvez imbriquer des rulesets en les appelant à partir d'autres blocs de rulesets.
Après avoir créé un ruleset, vous devrez spécifier l'entrée à laquelle celui-ci sera appliqué :
input(type="input_type" port="port_num" ruleset="rulesetname");
Il est possible d'identifier ici un message d'entrée par input_type, qui est un module d'entrée collectant le message, ou par port_num – le numéro du port. D'autres paramètres, tels que file ou tag peuvent être spécifiés pour input(). Remplacez rulesetname par le nom du ruleset devant être évalué avec le message. Au cas où un message d'entrée n'est pas explicitement limité à un ruleset, le ruleset par défaut est déclenché.
Il est également possible d'utiliser le format hérité pour définir des rulesets. Pour obtenir davantage d'information, veuillez consulter la section intitulée « Documentation en ligne ».

Exemple 20.11. Utiliser des rulesets

Les rulesets suivants assurent une gestion différente des messages distants en provenance de différents ports. Ajoutez ce qui suit dans /etc/rsyslog.conf :
ruleset(name="remote-6514") {
    action(type="omfile" file="/var/log/remote-6514")
}

ruleset(name="remote-601") {
    cron.* action(type="omfile" file="/var/log/remote-601-cron")
    mail.* action(type="omfile" file="/var/log/remote-601-mail")
}

input(type="imtcp" port="6514" ruleset="remote-6514");
input(type="imtcp" port="601" ruleset="remote-601");
Les rulesets affichés dans l'exemple ci-dessus définissent les destinations des journaux pour l'entrée distante de deux ports. Dans le cas du port 601, les messages sont triés selon la fonctionnalité. Puis, l'entrée TCP est activée et elle est limitée aux rulesets. Remarquez que vous devez charger les modules requis (imtcp) pour que cette configuration fonctionne.

20.3.2. Compatibilité avec sysklogd

Le mode de compatibilité spécifié via l'option -c existe en rsyslog version 5, mais pas en version 7. Les options de ligne de commande de style sysklogd sont dépréciées et la configuration de rsyslog à l'aide de ces options de ligne de commande doit être évitée. Cependant, vous pouvez utiliser plusieurs modèles et directives pour configurer rsyslogd afin d'émuler un comportement similaire à sysklogd.
Pour obtenir davantage d'informations sur les diverses options rsyslogd, veuillez consulter la page man de rsyslogd(8).