20.4. Utiliser des files d'attente dans Rsyslog

Figure 20.1. Flux de messages dans Rsyslog
/etc/rsyslog.conf
sont appliquées. Basé sur ces règles, le processeur de règles évalue quelles sont les actions devant être effectuées. Chaque action possède sa propre file d'attente d'actions. Les messages sont transférés à travers cette file vers le processeur d'action respectif, qui créera la sortie finale. Remarquez qu'à ce moment, plusieurs actions peuvent être exécutées simultanément sur un seul message. Dans ce but précis, un message est dupliqué et transféré vers de multiples processeurs d'actions.
- elles servent de tampon, découplant les producteurs et consommateurs dans la structure de rsyslog
- elles permettent la parallélisation des actions effectués sur des messages
Avertissement
SSH
, ce qui peut ensuite interdire l'accès SSH
. Il est donc recommandé d'utiliser des files d'actions dédiées pour les sorties transférées à travers un réseau ou une base de données.
20.4.1. Définir des files d'attente
/etc/rsyslog.conf
:
$objectQueueType queue_type
$objectQueueType queue_type
MainMsg
) ou pour une file d'actions (remplacez object par Action
). Remplacez queue_type par direct
, linkedlist
ou fixedarray
(qui sont des files en mémoire), ou par disk
.
Files « Direct »
$objectQueueType Direct
$objectQueueType Direct
MainMsg
ou par Action
pour utiliser cette option sur la file de messages principale ou pour une file d'actions, respectivement. Avec une file « Direct », les messages sont immédiatement et directement transférés du producteur au consommateur.
Files « Disk »
/etc/rsyslog.conf
:
$objectQueueType Disk
$objectQueueType Disk
MainMsg
ou par Action
pour utiliser cette option pour la file de messages principale ou pour une file d'actions, respectivement. Les files « Disk » sont écrites sur différentes parties, avec une taille par défaut de 10 Mo. Cette taille par défaut peut être modifiée avec la directive de configuration suivante :
$objectQueueMaxFileSize size
$objectQueueMaxFileSize size
$objectQueueFilename name
$objectQueueFilename name
Files « In-memory »
$ActionQueueSaveOnShutdown
pour enregistrer les données avant la fermeture. Il existe deux types de files en mémoire :
- La file FixedArray — mode par défaut de la file de messages principale, avec une limite de 10,000 éléments. Ce type de file utilise une matrice fixée, pré-allouée qui contient des pointeurs vers des éléments de files d'attente. À cause de ces pointeurs, même si la file est vide, une bonne quantité de mémoire est utilisée. Cependant, FixedArray offre des meilleures performances de temps d'activité et est optimal lorsque vous vous attendez à un nombre relativement faible de messages en file d'attente et à des performances élevées.
- File LinkedList — ici, toutes les structures sont allouées dynamiquement dans une liste liée. Ainsi, la mémoire est uniquement allouée lorsque nécessaire. Les files LinkedList gèrent également très bien les rafales occasionnelles de messages.
$objectQueueType LinkedList
$objectQueueType LinkedList
$objectQueueType FixedArray
$objectQueueType FixedArray
MainMsg
ou par Action
pour utiliser cette option sur la file de messages principale ou la file d'actions, respectivement.
Files « Disk-Assisted In-memory »
$objectQueueFileName
pour définir un nom de fichier pour l'assistance disque. Cette file deviendra ainsi une file assistée par disque, ce qui signifie qu'une file en mémoire est combinée à une file de disque et celles-ci fonctionneront en tandem.
$objectQueueHighWatermark number
$objectQueueHighWatermark number
$objectQueueLowWatermark number
$objectQueueLowWatermark number
MainMsg
ou par Action
pour utiliser cette option pour la file de messages principale ou pour une file d'actions, respectivement. Remplacez number par le nombre de messages mis en file d'attente. Lorsqu'une file en mémoire atteint le nombre défini par le filigrane du haut, les messages commencent à être écrits sur le disque et cela continue jusqu'à ce que la taille de la file en mémoire passe sous le nombre défini par le filigrane du bas. La définition correcte des filigranes minimise les écritures sur disque non nécessaires, mais cela laisse également de l'espace mémoire pour les rafales de messages, puisque l'écriture sur fichiers de disque est relativement longue. Ainsi, le filigrane du haut doit être plus bas que la totalité de la capacité de la file définie avec $objectQueueSize. La différence entre le filigrane du haut et la taille de la file en général est un tampon de mémoire supplémentaire réservé aux rafales de message. D'autre part, définir le filigrane du haut trop bas activera l'assistance par disque trop souvent.
Exemple 20.12. Transférer des messages journaux sur un serveur de manière fiable
UDP
.
Procédure 20.1. Effectuer un transfert sur un seul serveur
- Veuillez utiliser la configuration suivante dans
/etc/rsyslog.conf
ou créez un fichier avec le contenu suivant dans le répertoire/etc/rsyslog.d/
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow $ActionQueueType LinkedList $ActionQueueFileName example_fwd $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example.com:6514
$ActionQueueType LinkedList $ActionQueueFileName example_fwd $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example.com:6514
Où :$ActionQueueType
active une file en mémoire LinkedList,$ActionFileName
définit un stockage sur disque. Dans ce cas, les fichiers de sauvegarde sont créés dans le répertoire/var/lib/rsyslog/
avec le préfixe example_fwd,- le paramètre
$ActionResumeRetryCount -1
empêche rsyslog d'abandonner des messages lorsqu'il essaie de se connecter à nouveau si le serveur ne répond pas, $ActionQueueSaveOnShutdown
activé enregistre les données en mémoire si rsyslog s'éteint,- la dernière ligne transfère tous les messages reçus au serveur d'enregistrement, la spécification de port est optionnelle.
Avec la configuration ci-dessus, rsyslog conserve les messages en mémoire si le serveur distant n'est pas joignable. Un fichier sur disque est uniquement créé si rsyslog ne possède plus d'espace configuré de file d'attente en mémoire ou s'il doit s'éteindre, ce qui profite aux performances système.
Procédure 20.2. Effectuer un transfert vers plusieurs serveurs
- Chaque serveur destinataire requiert une règle de transfert séparée, une spécification de file d'actions séparée, et un fichier de sauvegarde sur disque séparé. Par exemple, veuillez utiliser la configuration suivante dans
/etc/rsyslog.conf
ou créez un fichier avec le contenu suivant dans le répertoire/etc/rsyslog.d/
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow $ActionQueueType LinkedList $ActionQueueFileName example_fwd1 $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example1.com $ActionQueueType LinkedList $ActionQueueFileName example_fwd2 $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example2.com
$ActionQueueType LinkedList $ActionQueueFileName example_fwd1 $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example1.com $ActionQueueType LinkedList $ActionQueueFileName example_fwd2 $ActionResumeRetryCount -1 $ActionQueueSaveOnShutdown on *.* @@example2.com
20.4.2. Créez un nouveau répertoire pour les fichiers de journalisation rsyslog
syslogd
et est géré par SELinux. De ce fait, tous les fichiers dans lesquels rsyslog écrit doivent posséder le contexte de fichier SELinux qui convient.
Procédure 20.3. Création d'un nouveau répertoire de travail
- Si vous avez besoin d'un répertoire différent pour stocker les fichiers de travail, créer un répertoire comme suit :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# mkdir /rsyslog
~]# mkdir /rsyslog
- Installer les utilitaires requis pour la Stratégie SELinux :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# yum install policycoreutils-python
~]# yum install policycoreutils-python
- Définir le contexte de répertoire SELinux pour qu'il corresponde à celui du répertoire
/var/lib/rsyslog/
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# semanage fcontext -a -t syslogd_var_lib_t /rsyslog
~]# semanage fcontext -a -t syslogd_var_lib_t /rsyslog
- Appliquer le contexte SELinux :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# restorecon -R -v /rsyslog restorecon reset /rsyslog context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:syslogd_var_lib_t:s0
~]# restorecon -R -v /rsyslog restorecon reset /rsyslog context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:syslogd_var_lib_t:s0
- Si nécessaire, vérifiez le contexte SELinux comme suit :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# ls -Zd /rsyslog drwxr-xr-x. root root system_u:object_r:syslogd_var_lib_t:s0 /rsyslog
~]# ls -Zd /rsyslog drwxr-xr-x. root root system_u:object_r:syslogd_var_lib_t:s0 /rsyslog
- Créer des sous-répertoires selon les besoins. Exemple :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Les sous-répertoires seront créés avec le même contexte SELinux que le répertoire parent.~]# mkdir /rsyslog/work/
~]# mkdir /rsyslog/work/
- Ajouter la ligne suivante dans
/etc/rsyslog.conf
juste avant qu'elle puisse entrer en vigueur :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ce paramétre demeurera valide jusqu'à ce que l'on rencontre une nouvelle directive de$WorkDirectory /rsyslog/work
$WorkDirectory /rsyslog/work
WorkDirectory
lors de l'analyse des fichiers de configuration.
20.4.3. Gestion des files
Limiter la taille de file d'attente
$objectQueueHighWatermark number
$objectQueueHighWatermark number
MainMsg
ou par Action
pour utiliser cette option pour la file de messages principale ou pour une file d'actions, respectivement. Remplacez nombre par le nombre de messages mis en file d'attente. Vous pouvez uniquement définir la taille de la file en tant que nombre de messages, et non en tant que taille de mémoire. La taille de la file par défaut s'élève à 10,000 messages pour la file de messages principale et les files ruleset, et à 1000 pour les files d'actions.
$objectQueueMaxDiscSpace number
$objectQueueMaxDiscSpace number
MainMsg
ou par Action
. Lorsque la limite de la taille spécifiée par le nombre est atteinte, les messages sont abandonnés jusqu'à ce que suffisamment d'espace soit libéré par les messages sortis de la file.
Abandonner des messages
$objectQueueDiscardMark number
$objectQueueDiscardMark number
MainMsg
ou par Action
pour utiliser cette option sur la file de messages principale ou sur une file d'actions, respectivement. Le nombre correspond au nombre de messages qui doit se trouver dans la file pour lancer le processus d'abandon. Pour définir quels messages abandonner, veuillez utiliser :
$objectQueueDiscardSeverity priority
$objectQueueDiscardSeverity priority
debug
(7), info
(6), notice
(5), warning
(4), err
(3), crit
(2), alert
(1), et emerg
(0). Avec ce paramètre, les messages entrants et les messages se trouvant déjà en file d'attente avec une priorité plus basse que celle qui est définie, sont effacés de la file dès que la marque d'abandon aura été atteinte.
Utiliser des délais
$objectQueueDequeueTimeBegin hour
$objectQueueDequeueTimeBegin hour
$objectQueueDequeueTimeEnd hour
$objectQueueDequeueTimeEnd hour
Configurer les threads de travail
$objectQueueWorkerThreadMinimumMessages number
$objectQueueWorkerThreadMinimumMessages number
$objectQueueWorkerThreads number
$objectQueueWorkerThreads number
$objectQueueWorkerTimeoutThreadShutdown time
$objectQueueWorkerTimeoutThreadShutdown time
-1
, aucun thread ne sera fermé.
Retirer un lot de la file
$objectQueueDequeueBatchSize number
$objectQueueDequeueBatchSize number
Terminer des files d'attente
$objectQueueTimeoutShutdown time
$objectQueueTimeoutShutdown time
$objectQueueTimeoutActionCompletion time
$objectQueueTimeoutActionCompletion time
$objectQueueTimeoutSaveOnShutdown time
$objectQueueTimeoutSaveOnShutdown time
20.4.4. Utilisation d'une nouvelle syntaxe pour les files d'attente rsyslog
action()
qui peut être utilisé à la fois séparemment ou à l'intérieur d'un ruleset dans /etc/rsyslog.conf
. Le format d'une file d'attente d'action ressemble à ce qui suit :
action(type="action_type" queue.size="queue_size" queue.type="queue_type" queue.filename="file_name")
action(type="action_type" queue.size="queue_size" queue.type="queue_type" queue.filename="file_name")
disk
ou bien, parmi l'une des files d'attente en mémoire : direct
, linkedlist
ou fixedarray
. Pour file_name ne spécifier qu'un nom de fichier, et non pas un chemin. Notez que si vous créez une nouveau répertoire contenant les fichiers de journalisation, le context SELinux devra être défini. Voir un exemple dans Section 20.4.2, « Créez un nouveau répertoire pour les fichiers de journalisation rsyslog ».
Exemple 20.13. Définir une File d'attente d'action
action(type="omfile" queue.size="10000" queue.type="linkedlist" queue.filename="logfile")
action(type="omfile" queue.size="10000" queue.type="linkedlist" queue.filename="logfile")
*.* action(type="omfile" file="/var/lib/rsyslog/log_file )
*.* action(type="omfile" file="/var/lib/rsyslog/log_file
)
*.* action(type="omfile" queue.filename="log_file" queue.type="linkedlist" queue.size="10000" )
*.* action(type="omfile"
queue.filename="log_file"
queue.type="linkedlist"
queue.size="10000"
)
global(workDirectory="/directory")
global(workDirectory="/directory")
Exemple 20.14. Redirection vers un Serveur unique avec la nouvelle Syntaxe
omfwd
est utilisé pour le transfert via UDP
ou TCP
. La valeur par défaut est UDP
. Comme le greffon est intégré, il n'a pas besoin d'être téléchargé.
/etc/rsyslog.conf
ou créez un fichier avec le contenu suivant dans le répertoire /etc/rsyslog.d/
:
*.* action(type="omfwd" queue.type="linkedlist" queue.filename="example_fwd" action.resumeRetryCount="-1" queue.saveOnShutdown="on" target="example.com" port="6514" protocol="tcp" )
*.* action(type="omfwd"
queue.type="linkedlist"
queue.filename="example_fwd"
action.resumeRetryCount="-1"
queue.saveOnShutdown="on"
target="example.com" port="6514" protocol="tcp"
)
queue.type="linkedlist"
permet d'avoir une file d'attente LinkedList en mémoire,queue.filename
définit un stockage sur disque. Les fichiers de sauvegarde sont créés avec le préfixe example_fwd, dans le répertoire de travail spécifié par la directiveworkDirectory
globale qui précède,- le paramètre
action.resumeRetryCount -1
empêche rsyslog d'abandonner des messages lorsqu'il essaie de se connecter à nouveau si le serveur ne répond pas, queue.saveOnShutdown="on"
activé enregistre les données en mémoire si rsyslog s'éteint,- la dernière ligne transfère tous les messages reçus au serveur d'enregistrement, la spécification de port est optionnelle.