將 Subversion 日誌傳送到 Logstash

將 Subversion 日誌傳送到 Logstash

我的要求是將顛覆日誌(即用戶名,修訂號...)發送到logstash進行解析(然後將其儲存在彈性搜尋中,最後透過kibana顯示)。 )而不是純文字文件,我有兩個選擇

  1. 透過 cron 執行 svn log(間隔 1 分鐘),然後將該檔案傳送到logstash(真是個壞主意)
  2. 使用了 subversion River 插件,我嘗試了它,但它不起作用,因為它根本無法索引數據。

我還考慮了提交後腳本,每當任何用戶簽入時,它都會觸發它,然後將日誌儲存在文字檔案中,但它與第 1 點相同。

任何幫助/想法都非常感謝

編輯

正如我在第3 點中提到的,我們編寫了這個小的提交後操作,以便每當用戶簽入時我們都可以將元資料保存在某個文件中,然後透過syslog 我們可以將此日誌傳輸到Logstash 伺服器。嘗試簽入並寫入同一個文件)這最終會導致競爭狀況並使情況變得更糟。

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

相關內容