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

17

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

Je peux envoyer tout le trafic au serveur distant avec

*.* @remote_server

Comment puis-je le filtrer?

Simmo
la source
1
Cela a répondu à ma question. stackoverflow.com/questions/4042115/ruby-syslog-custom-facility
Simmo

Réponses:

37

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

Rsyslog lit les fichiers de conf de manière séquentielle, il est donc important que vous nommiez votre fichier de configuration afin que la configuration spécifique soit chargée avant toute autre chose. Donc, nommez votre fichier en commençant par les premiers zéro, c.-à-d.00-my-file.conf . Il est préférable de créer un nouveau fichier pour que les mises à jour, etc. ne remplacent 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 & ~moyen d'arrêter le traitement des entrées correspondantes (ligne précédente uniquement!).

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'informations: http://wiki.rsyslog.com/index.php/Configuration_Samples

oubli
la source
1
pouvons-nous réparer le lien brisé?
Mark Walsh
1

On peut aussi essayer ça. Ça marche bien pour moi.

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

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

chown syslog:syslog testing_docker
Nagaraj
la source