发送Subversion日志到Logstash

我的要求是发送颠覆日志(即用户名,修订号…)logstash进行parsing(然后将其存储在弹性search,最后通过kibana显示)。由于Subversion使用自己的基于文件的数据库(FSFS)而不是纯文本文件,我有两个选项

  1. 通过cron运行svn日志(间隔1分钟),然后将该文件发送到logstash(真是个坏主意)
  2. 使用颠覆河插件,我试过了,它不工作,因为它根本无法索引数据。它的发展之间停止了大约1年前,所以没有任何帮助

我也想过提交后脚本,每当用户签入它将触发它,然后将日志存储在文本文件中,但它与第1点相同。

任何帮助/想法做到这一点真的很感激

编辑

正如我在第3点中提到的那样,我们编写这个小的post-commit,以便每当用户签入时,我们可以将元数据保存在某个文件中,然后通过syslog将这个日志传输到logstash服务器。这种方法最大的缺点之一是我正在处理TB的数据和每分钟15+签入,这个文件真的很大(我们可以使用logrotate),但同时面临locking条件问题(因为多个用户试图登记和写入同一个文件)这最终会导致竞争状况,并使情况更糟糕。下面提供post-commit hook,以便对其他人有用

#!/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 

我看到至less有一个方便的select:1)将SVN日志提供给syslog,大多数发行版现在使用rsyslog,所以这里是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 &~ 

请注意,对于较新版本的rsyslog,该configuration将有所不同。 版本8.xconfiguration:

 #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)为日志configurationlogstash syslog监听器和分析器

在这种情况下,日志将不会另外存储在系统日志中,而是直接转发到logstash,系统日志传输将处理它。