Analice los mensajes de syslog en tablas MySQL separadas con rsyslog

10

Fuera de la caja, rsyslog volcará todo en la SystemEventstabla dentro de la base de datos `Syslog (si usa el esquema predeterminado proporcionado). Me gustaría usar una expresión regular para filtrar los mensajes entrantes en tablas de base de datos separadas.

He jugado con esto, pero me está costando encontrar la mejor manera de lograr esto (o incluso una forma que funcione).

En mi 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

Este fue mi último intento, pero estoy atascado.

(la tabla RogueAPs es solo un clon de la tabla predeterminada de SystemEvents que se incluye con rsyslog)


Información de la versión:

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
fuente

Respuestas:

1

de echar un vistazo a este tutorial, no veo diferencia.

Pero echando un vistazo a la documentación de la plantilla de rsyslog , parece haber una diferencia con mysql dependiendo de la configuración del parámetro NO_BACKSLASH_ESCAPES.

De los documentos:

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.
cristiano
fuente
0

La documentación de rsyslog, lamentablemente, no es terriblemente completa ni fácil de entender en algunas áreas. He pasado una buena parte de las últimas semanas trabajando en rsyslog / MySQL / regex.

¿Puede publicar una muestra de la línea de registro con la que está intentando coincidir expresiones regulares, el esquema de la tabla en la que desea que entre, etc.? Parece que las cosas que publicaste deberían funcionar ... ¿qué estás tratando de filtrar? ¿Y es el esquema predeterminado utilizable para usted?

En una nota al margen, no pude evitar notar que estás usando una tabla llamada RogueAPs. No sé qué proveedor está utilizando, pero tengo reglas de expresiones regulares para los mensajes de registro de autenticación de Meru Networks y los controladores BlueSocket.

Jason Antman
fuente