
내 요구 사항은 구문 분석을 위해 Logstash에 Subversion 로그(예: 사용자 이름, 개정 번호...)를 보내는 것입니다(그런 다음 이를 탄력적 검색에 저장하고 마지막으로 kibana를 통해 표시). Subversion은 자체 파일 기반 데이터베이스(FSFS)를 사용하고 일반 텍스트 파일에는 두 가지 옵션이 있습니다
- cron을 통해 svn log를 실행하고(1분 간격으로) 해당 파일을 logstash로 보냅니다(정말 나쁜 생각입니다)
- Subversion River 플러그인을 사용했는데 데이터를 전혀 색인화할 수 없어 작동하지 않았습니다. 개발이 거의 1년 전에 중단되었습니다. 그래서 전혀 도움이 되지 않습니다.
또한 사용자가 체크인할 때마다 이를 트리거한 다음 텍스트 파일에 로그를 저장하는 포스트 커밋 스크립트에 대해서도 생각했지만 이는 포인트 1과 동일합니다.
이를 수행하는 데 도움이나 아이디어가 있으면 정말 감사하겠습니다.
편집하다우리는 포인트 3에서 언급한 대로 이 작은 사후 커밋을 작성하여 사용자가 체크인할 때마다 메타데이터를 일부 파일에 저장할 수 있고 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
답변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) 로그에 대한 logtash syslog 수신기 및 파서 구성
이 경우 로그는 syslog에 추가로 저장되지 않고, logstash로 직접 전달되며 syslog 전송이 이를 처리합니다.
답변2
한 가지 가능성은 Subversion 로그를 수락하고 이를 Logstash로 보내도록 Syslog를 구성하는 것입니다.
유용한 링크
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