Enviando logs do Subversion para o Logstash

5

Meu requisito é enviar logs de subversão (ou seja, nome de usuário, número de revisão ...) para logstash para análise (então armazená-lo em pesquisa elástica e finalmente exibido via kibana). Desde subversão usar seu próprio banco de dados baseado em arquivo (FSFS ) e não arquivo de texto simples, eu tenho duas opções

  1. Execute o svn log através do cron (em intervalos de 1 min) e, em seguida, envie esse arquivo para logstash (realmente uma má ideia)
  2. Usado plugin do rio subversion, eu tentei e não está funcionando como não é capaz de indexar os dados em todos.Entre o seu desenvolvimento é parar quase 1 ano ago.Então, não ajuda em nada

Eu também pensei em post commit script que sempre que qualquer usuário checkin o aciona e então armazena os logs no arquivo de texto, mas é igual ao Point 1.

Qualquer ajuda / ideia para fazer isso é realmente apreciada

EDITAR

Escrevemos este pequeno post-commit como mencionei no ponto 3 para que sempre que o usuário fizer o check-in possamos salvar os metadados em algum arquivo e depois via syslog podemos transferir esse log para logstash server.Uma das maiores desvantagens do esta abordagem é eu estou lidando com TB de dados e 15 + checkin por min, este arquivo vai realmente grande (nós podemos usar logrotate) mas ao mesmo tempo enfrentando problema de condição de bloqueio (como vários usuários tentam fazer check-in e escrever no mesmo arquivo), o que acabará por levar a condição de corrida e piorar a situação.Envolver post-commit gancho abaixo para que possa ser útil para outras pessoas

 #!/bin/sh

 REPOS="$1"
 REV="$2"

 LOG="/tmp/svn.log"

 var1=/usr/bin/svnlook info -r $REV $REPOS | tr '\n' '|''
 var2=/usr/bin/svnlook changed -r $REV $REPOS | tr '\n' ' ''
 echo "r${REV}|${var1}|${var2}\n" | tee -a ${LOG} 2>&1
 echo " " | tee -a ${LOG} 2>&1
    
por Prashant Lakhera 21.02.2015 / 00:01

2 respostas

2

Eu vejo pelo menos uma opção conveniente: 1) Alimente seus logs SVN ao syslog, a maioria das distribuições usa o rsyslog agora, então aqui está um exemplo para o rsyslog (5.x):

$InputFileName /${path_to}/svn.log
$InputFileTag svn:
$InputFileStateFile /var/spool/rsyslog/svn_log

$InputFileSeverity notice
$InputFileFacility local7
$InputRunFileMonitor

:syslogtag, isequal, "svn:" @@${IP_of_logstash}:$PORT
&~

Por favor, note que essa configuração será diferente para versões mais recentes do rsyslog. versão 8.x config:

#reading SVN logs
input(type="imfile" File="/var/log/${path_to}/svn.log"
Tag="svn:"
StateFile="/var/spool/rsyslog/svn_log"
Severity="normal"
Facility="local7")

:syslogtag, isequal, "svn:" @@${IP_of_logstash}:$PORT
&~

2) Configurar logstash syslog listener e parser para logs

Neste caso, os logs não serão armazenados adicionalmente no syslog, mas encaminhados diretamente para o logstash e o transporte syslog cuidará disso.

    
por 26.02.2015 / 15:32
0

Uma possibilidade pode ser configurar o Syslog para aceitar os logs de subversão e enviá-lo para o logstash.

links úteis

link

link

link

    
por 26.02.2015 / 12:30