
私の要件は、Subversion ログ (ユーザー名、リビジョン番号など) を解析のために logstash に送信することです (その後、それを Elastic Search に保存し、最後に Kibana で表示します)。Subversion はプレーンテキスト ファイルではなく独自のファイルベースのデータベース (FSFS) を使用するため、2 つのオプションがあります。
- cron 経由で svn log を実行し (1 分間隔で)、そのファイルを logstash に送信します (これは本当に悪い考えです)
- Subversion River プラグインを使用しましたが、データをまったくインデックスできないため動作しません。その間に開発はほぼ 1 年前に停止しました。そのため、まったく役に立ちません。
また、ユーザーがチェックインするたびにコミット後のスクリプトがトリガーされ、ログがテキスト ファイルに保存されるというコミット後のスクリプトについても考えましたが、これはポイント 1 と同じです。
そのための助けやアイデアがあれば本当にありがたいです
編集ポイント 3 で述べたように、この小さなコミット後の処理を記述することで、ユーザーがチェックインするたびにメタデータをファイルに保存し、syslog 経由でこのログを logstash サーバーに転送できます。このアプローチの最大の欠点の 1 つは、テラバイト単位のデータと 1 分あたり 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
答え1
少なくとも 1 つの便利なオプションがあります: 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 では設定が異なることに注意してください。バージョン 8.x の設定:
#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) ログ用のlogstash syslogリスナーとパーサーを構成する
この場合、ログは syslog に追加で保存されず、logstash に直接転送され、syslog トランスポートによって処理されます。
答え2
1 つの可能性としては、Subversion ログを受け入れて logstash に送信するように Syslog を構成することが挙げられます。
便利なリンク
http://logstash.net/docs/1.1.9/outputs/syslog
http://www.commandlinefu.com/commands/view/11687/send-apache-log-to-syslog-ng