Analise mensagens syslog em tabelas MySQL separadas com rsyslog

10

Fora da caixa, o rsyslog colocará tudo na SystemEventstabela dentro do banco de dados `Syslog (se você usar o esquema padrão fornecido). Eu gostaria de usar uma expressão regular para filtrar mensagens de entrada em tabelas de banco de dados separadas.

Eu brinquei com isso, mas estou tendo dificuldades para descobrir a melhor maneira de conseguir isso (ou até mesmo uma maneira que funcione).

No meu 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

Esta foi minha última tentativa, mas estou presa.

(a tabela RogueAPs é apenas um clone da tabela SystemEvents padrão fornecida com o rsyslog)


Informação da versão:

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
fonte

Respostas:

1

de dar uma olhada neste tutorial, não vejo diferença.

Mas, dando uma olhada na documentação do modelo do rsyslog , parece haver uma diferença no mysql, dependendo da configuração do parâmetro NO_BACKSLASH_ESCAPES.

Dos 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.
cristão
fonte
0

Infelizmente, a documentação do rsyslog não é terrivelmente completa ou fácil de entender em algumas áreas. Passei boa parte das últimas semanas trabalhando no material rsyslog / MySQL / regex.

Você pode postar uma amostra da linha de log na qual você está tentando regex corresponder, o esquema da tabela na qual deseja que ela entre etc.? O material que você postou parece que deve funcionar ... o que você está tentando filtrar? E o esquema padrão é utilizável para você?

Em uma nota lateral, não pude deixar de notar que você está usando uma tabela chamada RogueAPs. Não sei qual fornecedor você está usando, mas tenho regras de regex para mensagens de log de autenticação dos controladores Meru Networks e BlueSocket.

Jason Antman
fonte