Назад | Перейти на главную страницу

Отправка журналов Subversion в Logstash

Мое требование - отправлять журналы подрывной деятельности (т.е. имя пользователя, номер версии ...) в logstash для синтаксического анализа (затем сохранять их в эластичном поиске и, наконец, отображать через кибану). Поскольку подрывная деятельность использует свою собственную базу данных на основе файлов (FSFS), а не простой текстовый файл, у меня есть два варианта

  1. Запустите журнал svn через cron (с интервалом в 1 минуту), а затем отправьте этот файл в logstash (действительно плохая идея)
  2. Я использовал плагин subversion river, я попробовал его, но он не работает, так как он вообще не может индексировать данные. В промежутке его разработка остановлена ​​почти год назад. Так что никакой помощи

Я также подумал о сценарии пост-фиксации, который всякий раз, когда любой пользователь регистрирует его, запускает его, а затем сохраняет журналы в текстовом файле, но он такой же, как в пункте 1.

Любая помощь / идея для этого действительно приветствуется

EDIT

Мы пишем этот небольшой пост-коммит, как я упоминал в пункте 3, чтобы при каждом входе пользователя мы могли сохранить метаданные в каком-либо файле, а затем через системный журнал мы могли передать этот журнал на сервер logstash. Одним из самых больших недостатков этого подхода является Я имею дело с ТБ данных и 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) Подать вам журналы 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, а будут перенаправлены непосредственно в logstash, и транспорт syslog позаботится об этом.

Одна из возможностей может заключаться в настройке 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