将 Subversion 日志发送到 Logstash

Pra*_*era 6 svn elasticsearch logstash

我的要求是将 subversion 日志(即用户名、修订号...)发送到 logstash 进行解析(然后将其存储在弹性搜索中,最后通过 kibana 显示)。因为 subversion 使用自己的基于文件的数据库(FSFS)而不是纯文本文件,我有两个选择

  1. 通过 cron 运行 svn log(以 1 分钟为间隔),然后将该文件发送到 logstash(非常糟糕的主意)
  2. 使用了 subversion river 插件,我试过了,但它不起作用,因为它根本无法索引数据。在它的开发之间,差不多一年前就停止了。所以根本没有帮助

我还考虑过提交后脚本,每当任何用户签入时,它都会触发它,然后将日志存储在文本文件中,但与第 1 点相同。

任何帮助/想法都非常感谢

编辑

正如我在第 3 点中提到的,我们编写了这个小的 post-commit,这样每当用户签入时,我们就可以将元数据保存在某个文件中,然后通过 syslog 我们可以将此日志传输到 logstash 服务器。这种方法的最大缺点之一是我正在处理 TB 数据和每分钟 15+ 次签入,这个文件变得非常大(我们可以使用 logrotate)但同时面临锁定条件问题(因为多个用户尝试签入并写入同一个文件)这最终会导致竞争条件并使情况更糟。在下面粘贴提交后钩子,以便对其他人有用

 #!/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
Run Code Online (Sandbox Code Playgroud)