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

1

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.

Eu estou precisando ser capaz de voltar no tempo com base em detalhes mais flexíveis e acesso mais flexível do que o (s) arquivo (s) syslog padrão (s).

Eu estou pensando que o log para o mysql pode ser a abordagem correta, mas como configuro isso de tal forma que ele puxa apenas certas entradas de log para uma tabela baseada em uma identificação? Por exemplo, vejo uma longa cadeia hexadecimal identificando cada entrada de log de uma determinada instância do aplicativo Heroku. Eu suponho que eu posso apenas canalizar para o soquete mysql vs ALL entrada rsyslog no mysql ...

Alguém poderia me direcionar para um recurso que possa me orientar no processo de definir algo assim ou simplesmente fornecer alguns detalhes que possam ajudar? Eu tenho mais de 15 anos de experiência em Unix, então eu só preciso de algumas cutucadas na direção certa, já que eu realmente não fiz uma quantidade enorme de trabalho com daemons de syslog anteriormente em termos de agrupar vários servidores em um.

Além disso, eu estaria interessado em qualquer ferramenta de análise de registros que pudesse tornar a perfuração através de arranjos de logs mais úteis para desenvolvedores.

    
por ylluminate 18.11.2011 / 10:00

2 respostas

3

Eu acho que algo ao longo disso deve funcionar. Primeiro, certifique-se de ter a linha abaixo em seu arquivo rsyslog conf, então o módulo de saída do MySQL é carregado:

$ModLoad ommysql

Em seguida, filtre as coisas que você quer 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 a data e a mensagem, e está excetuando você ter uma tabela com apenas duas colunas, date e message .

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

Algo como isso deve funcionar. Note que isso estava no topo da minha cabeça e não foi testado, mas você entendeu. Informações muito mais detalhadas podem ser encontradas no site do rsyslog , por exemplo, o valores de parâmetros do modelo disponíveis podem lhe interessar.

    
por 18.11.2011 / 11:52
1

Eu enviaria o syslog para um comando grep para extrair as linhas de que você precisa e, em seguida, para um script awk para gerar um arquivo csv bem formatado então eu puxaria o arquivo csv gerado para o mysql usando "LOAD DATA IN FILE"

Você também pode verificar o projeto phpsyslog-ng: link

    
por 18.11.2011 / 11:25