web-dev-qa-db-fra.com

Comment configurer rsyslog pour envoyer les journaux d'un programme spécifique à un serveur syslog distant?

J'ai un programme qui sort vers syslog avec un tag/nom de programme donné. J'aimerais pouvoir filtrer le trafic syslog de ce programme et l'envoyer à un serveur syslog distant, en laissant tous les autres trafics syslog locaux.

Je peux envoyer tout le trafic au serveur distant avec

*.* @remote_server

Comment puis-je le filtrer?

16
Simmo

Les fichiers de configuration de Rsyslog se trouvent dans: /etc/rsyslog.d/*.conf

Rsyslog lit les fichiers de configuration de manière séquentielle. Il est donc important de nommer votre fichier de configuration afin que la configuration spécifique soit chargée avant toute autre opération. Donc, nommez votre fichier en commençant par les zéros en tête, c'est-à-dire 00-my-file.conf. Il est préférable de créer un nouveau fichier afin que les mises à jour, etc., n'écrasent pas votre configuration locale.

Exemple:

if $programname == 'programname' and $msg contains 'a text string' and $syslogseverity <= '6' then /var/log/custom/bind.log

Ou si vous souhaitez simplement supprimer certaines entrées:

if $programname == 'programname' then ~

Dans votre cas: (UDP)

if $programname == 'programname' then @remote.syslog.server
& ~

ou (TCP)

if $programname == 'programname' then @@remote.syslog.server
& ~

Le & ~ signifie qu'il faut arrêter de traiter les entrées de correspondance (ligne précédente seulement!).

Quelques informations plus générales:

Assurez-vous également que les filtres sont sur la même ligne:

# Example: Log mail server control messages to mail-queue.log
if $hostname == 'titus'\
and $programname == 'smtp.queue.'\
and $syslogseverity <= '6' then /var/log/titus/mail-queue.log
& ~

Filtres utiles:

$hostname
$programname
$msg
$syslogseverity

Les opérateurs:

== (equals)
contains
and
or

Plus d'infos: http://wiki.rsyslog.com/index.php/Configuration_Samples

35
oblivian

Nous pouvons aussi essayer cela. Cela fonctionne bien pour moi.

$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs

NOTE: Ici, la propriété du dossier testing_docker devrait être donnée à l'utilisateur syslog. Suivez la commande ci-dessous pour définir les autorisations.

chown syslog:syslog testing_docker
1
Nagaraj