Analysieren Sie Syslog-Nachrichten mit rsyslog in separate MySQL-Tabellen

10

Out of the box rsyslog wird alles in die Dump - SystemEventsTabelle in der `Syslog - Datenbank (wenn Sie das Standardschema bereitgestellt verwenden). Ich möchte einen regulären Ausdruck verwenden, um eingehende Nachrichten in separate Datenbanktabellen zu filtern.

Ich habe damit gespielt, aber es fällt mir schwer, den besten Weg zu finden, um dies zu erreichen (oder sogar einen Weg, der funktioniert).

In meiner 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

Dies war mein letzter Versuch, aber ich stecke fest.

(Die RogueAPs-Tabelle ist nur ein Klon der Standard-SystemEvents-Tabelle, die mit rsyslog geliefert wird.)


Versions Information:

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
quelle

Antworten:

1

Wenn ich mir dieses Tutorial anschaue , sehe ich keinen Unterschied.

Wenn Sie sich jedoch die Vorlagendokumentation von rsyslog ansehen , scheint es je nach Einstellung für Parameter einen Unterschied zu mysql zu geben NO_BACKSLASH_ESCAPES.

Aus den Dokumenten:

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
quelle
0

Die rsyslog-Dokumentation ist leider in einigen Bereichen nicht besonders vollständig oder leicht zu verstehen. Ich habe einen Großteil der letzten Wochen damit verbracht, an rsyslog / MySQL / regex-Sachen zu arbeiten.

Können Sie ein Beispiel für die Protokollzeile, für die Sie eine Regex-Übereinstimmung versuchen, das Schema der Tabelle, in die sie eingefügt werden soll, usw. veröffentlichen? Das Zeug, das du gepostet hast, scheint zu funktionieren ... was versuchst du herauszufiltern? Und ist das Standardschema für Sie verwendbar?

Nebenbei bemerkt, ich konnte nicht anders, als zu bemerken, dass Sie eine Tabelle namens RogueAPs verwenden. Ich weiß nicht, welchen Anbieter Sie verwenden, aber ich habe Regex-Regeln für Authentifizierungsprotokollnachrichten von Meru Networks und BlueSocket-Controllern.

Jason Antman
quelle