Analyser les messages syslog dans des tables MySQL distinctes avec rsyslog

10

Hors de la boîte rsyslog va tout vider dans la SystemEventstable dans la base de données `Syslog (si vous utilisez le schéma par défaut fourni). Je voudrais utiliser une expression régulière pour filtrer les messages entrants dans des tables de base de données distinctes.

J'ai joué avec ça, mais j'ai du mal à trouver la meilleure façon d'y parvenir (ou même une manière qui fonctionne).

Dans mon rsyslog.conf:

$template wireless, \
 "insert into RogueAPs \
 (ReceivedAt, DeviceReportedTime, Facility, Priority, FromHost, Message) \
 VALUES('%timegenerated%', '%timereported%', '%syslogfacility%', '%syslogpriority%', '%fromhost-ip%', '%msg%');", \ 
 stdsql

if $msg contains 'subtype=wireless' then :ommysql:127.0.0.1,Syslog,dbusername,dbpassword;wireless

*.* :ommysql:127.0.0.1,Syslog,dbusername,dbpassword

C'était ma dernière tentative, mais je suis coincé.

(la table RogueAPs n'est qu'un clone de la table SystemEvents par défaut livrée avec rsyslog)


Informations sur la version:

shell# /usr/local/sbin/rsyslogd -v
rsyslogd 5.5.5, compiled with:
        FEATURE_REGEXP:                         Yes
        FEATURE_LARGEFILE:                      No
        FEATURE_NETZIP (message compression):   Yes
        GSSAPI Kerberos 5 support:              No
        FEATURE_DEBUG (debug build, slow code): No
        Atomic operations supported:            Yes
        Runtime Instrumentation (slow code):    No

See http://www.rsyslog.com for more information.
efk
la source

Réponses:

1

de jeter un oeil à ce tutoriel, je ne vois aucune différence.

Mais en jetant un œil à la documentation du modèle de rsyslog , il semble y avoir une différence avec mysql selon le réglage du paramètre NO_BACKSLASH_ESCAPES.

De la documentation:

sql - format the string suitable for a SQL statement in MySQL format. This will 
replace single quotes ("'") and the backslash character by their backslash-escaped
counterpart ("\'" and "\\") inside each field. Please note that in MySQL
configuration, the NO_BACKSLASH_ESCAPES mode must be turned off for this format to
work (this is the default).

stdsql - format the string suitable for a SQL statement that is to be sent to a
standards-compliant sql server. This will replace single quotes ("'") by two single
quotes ("''") inside each field. You must use stdsql together with MySQL if in MySQL
configuration the NO_BACKSLASH_ESCAPES is turned on.
Christian
la source
0

La documentation de rsyslog n'est malheureusement pas très complète ou facile à comprendre dans certains domaines. J'ai passé une bonne partie des dernières semaines à travailler sur des trucs rsyslog / MySQL / regex.

Pouvez-vous publier un échantillon de la ligne de journal dans laquelle vous essayez de faire correspondre regex, le schéma de la table dans laquelle vous voulez qu'elle entre, etc.? Les informations que vous avez publiées semblent fonctionner ... qu'est-ce que vous essayez de filtrer? Et le schéma par défaut est-il utilisable pour vous?

En passant, je n'ai pas pu m'empêcher de remarquer que vous utilisez une table appelée RogueAPs. Je ne sais pas quel fournisseur vous utilisez, mais j'ai des règles d'expression régulière pour les messages du journal d'authentification des contrôleurs Meru Networks et BlueSocket.

Jason Antman
la source