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