Como configurar o armazenamento mysql para determinadas correspondências de entrada do rsyslog?

Como configurar o armazenamento mysql para determinadas correspondências de entrada do rsyslog?

Estou drenando vários logs do Heroku para um servidor rsyslog linux (ubuntu) e estou começando a ter um pouco mais para morder do que posso mastigar em termos de trabalhar com meus históricos de log.

Preciso poder retroceder no tempo com base em detalhes mais flexíveis e acesso mais flexível do que o (s) arquivo (s) syslog padrão fornecem.

Estou pensando que o log no mysql pode ser a abordagem correta, mas como faço para configurar isso de forma que ele extraia apenas certas entradas de log para uma tabela com base em uma identificação? Por exemplo, vejo uma longa string hexadecimal identificando cada entrada de log de uma determinada instância do aplicativo Heroku. Presumo que posso simplesmente canalizá-los para o soquete mysql versus TODAS as entradas do rsyslog para o mysql ...

Alguém poderia me indicar um recurso que possa me orientar no processo de configuração de algo assim ou simplesmente fornecer alguns detalhes que possam ajudar? Tenho mais de 15 anos de experiência em Unix, então só preciso de alguns empurrões na direção certa, já que não fiz muito trabalho com daemons syslog anteriormente em termos de agrupar vários servidores em um.

Além disso, eu estaria interessado em qualquer ferramenta de revisão de log que pudesse tornar o detalhamento de arranjos de log como esse mais útil para desenvolvedores.

Responder1

Acho que algo nesse sentido deve funcionar. Primeiro, certifique-se de ter a linha abaixo em seu arquivo conf rsyslog, para que o módulo de saída do MySQL seja carregado:

$ModLoad ommysql

Em seguida, filtre o que você deseja assim:

:msg, contains, "Heroku"     :ommysql:dbserver,dbname,dbuser,dbpass;heroku-template

Em seguida, você precisa criar um modelo para seus dados, para que o rsyslog saiba o que e como inserir em seu banco de dados. Aqui está um modelo de exemplo que registra apenas data e mensagem, exceto que você tenha uma tabela com apenas duas colunas datee message.

$template heroku-template, "INSERT INTO herokulog(date,message) VALUES ('%timestamp','%msg')\r\n", SQL

Algo assim deve funcionar. Observe que isso estava na minha cabeça e não foi testado, mas você entendeu. Informações muito mais detalhadas podem ser encontradas emsite do rsyslog, por exemplo ovalores de parâmetros de modelo disponíveispode lhe interessar.

Responder2

Eu canalizaria o syslog para um comando grep para extrair as linhas necessárias e, em seguida, para um script awk para gerar um arquivo csv bem formatado e, em seguida, puxaria o arquivo csv gerado para o mysql usando "LOAD DATA IN FILE"

Você também pode verificar o projeto phpsyslog-ng:http://www.gdd.net/index.php/PHP-Syslog-NG

informação relacionada