Analizuj wiadomości syslog w oddzielnych tabelach MySQL za pomocą rsyslog

10

Po wyjęciu z pudełka rsyslog zrzuci wszystko do SystemEventstabeli w bazie danych `Syslog (jeśli używasz dostarczonego domyślnego schematu). Chciałbym użyć wyrażenia regularnego do filtrowania wiadomości przychodzących do oddzielnych tabel bazy danych.

Grałem z tym, ale trudno mi znaleźć najlepszy sposób, aby to osiągnąć (lub nawet sposób, który działa).

W moim pliku 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

To była moja ostatnia próba, ale utknąłem.

(tabela RogueAPs to tylko klon domyślnej tabeli SystemEvents, która jest dostarczana z rsyslog)


Informacje o wersji:

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
źródło

Odpowiedzi:

1

patrząc na ten samouczek nie widzę różnicy.

Ale patrząc na dokumentację szablonu z rsyslog , wydaje się, że istnieje różnica w mysql w zależności od ustawienia parametru NO_BACKSLASH_ESCAPES.

Z dokumentów:

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.
chrześcijanin
źródło
0

Dokumentacja rsyslog nie jest niestety zbyt kompletna ani łatwa do zrozumienia w niektórych obszarach. Spędziłem sporą część ostatnich tygodni pracując nad rzeczami rsyslog / MySQL / regex.

Czy możesz opublikować próbkę wiersza dziennika, w którym próbujesz dopasować wyrażenie regularne, schemat tabeli, do której chcesz przejść itp.? Wydaje się, że rzeczy, które opublikowałeś, powinny działać ... co próbujesz odfiltrować? I czy można zastosować domyślny schemat?

Na marginesie, nie mogłem nie zauważyć, że używasz tabeli o nazwie RogueAPs. Nie wiem, jakiego dostawcy używasz, ale mam reguły wyrażeń regularnych dla komunikatów dziennika uwierzytelniania z kontrolerów Meru Networks i BlueSocket.

Jason Antman
źródło