
我的要求是將顛覆日誌(即用戶名,修訂號...)發送到logstash進行解析(然後將其儲存在彈性搜尋中,最後透過kibana顯示)。 )而不是純文字文件,我有兩個選擇
- 透過 cron 執行 svn log(間隔 1 分鐘),然後將該檔案傳送到logstash(真是個壞主意)
- 使用了 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
一種可能是配置 Syslog 以接受顛覆日誌並將其傳送到logstash。
有用的連結
http://logstash.net/docs/1.1.9/outputs/syslog
http://linux.die.net/man/5/syslog.conf
http://www.commandlinefu.com/commands/view/11687/send-apache-log-to-syslog-ng