Установка, настройка и связывание RSyslog и Sentry

Захотелось собирать все логи из ОС (со всех серверов) в Sentry, естественно придется использовать UDP для передачи логов, к счастью в Sentry уже есть поддержка UDP. Посовещавшись с Сашей Мироновым, я решил использовать RSyslog, немного погуглив я обнаружил вот такой Gist Bridge to send rsyslog logs to sentry (который я потом успешно форкнул и отрефакторил). Теперь осталось только написать правила и запустить эту цепь.
Статья в основном для FreeBSD, но как обычно конфиги совпадают, просто заменяйте слова "установить из портов" на "установить из пакетов". Не думаю, что в остальном что-то серьзено изменится.
Запускаем UDP-сервер для Sentry
Зайдите на сервер где вы ранее устанавливали Sentry и откройте конфигурационный файл:
emacs /etc/sentry.conf
Добавьте следующее:
SENTRY_UDP_HOST = '198.51.100.1' # Внешний IP-адрес вашего сетевого интерфейса SENTRY_UDP_PORT = 9091
Доустанавливаем нужные приложения:
. /var/www/sentry/bin/activate pip install raven eventlet
И проверяем работает ли UDP-сервер:
/var/www/sentry/bin/sentry --config=/etc/sentry.conf start udp
Теперь, добавьте в Supervisor следующие строки:
[program:sentry_udp]
directory=/var/www/sentry
command=/var/www/sentry/bin/sentry --config=/etc/sentry.conf start udp autostart=true
autorestart=true
Обновите список программ в Supervisor и запустите sentry_udp:
supervisorctl reread supervisorctl start sentry_udp
Устанавливаем и настраиваем RSyslog
Теперь войдите на сервер, который будет посылать логи (вообщем, в нашей схеме это получается клиент на FreeBSD):
cd /usr/ports/sysutils/rsyslog6 make install clean
Теперь настроим RSyslog, например для логов Nginx:
emacs /usr/local/etc/rsyslog.conf
$ModLoad imfile # Nginx $InputFileName /var/log/nginx-error.log $InputFileTag nginx-error: $InputFileStateFile stat-nginx-error $InputFileSeverity info $InputRunFileMonitor $ActionQueueType LinkedList # use asynchronous processing $ActionQueueFileName test # set file name, also enables disk mode $ActionResumeRetryCount -1 # infinite retries on insert failure $ActionQueueSaveOnShutdown on # save in-memory data if rsyslog shuts down # Transfer all of the logs to this UDP port *.* @@127.0.0.1:10514;RSYSLOG_SyslogProtocol23Format
Где, "127.0.0.1" - IP-адрес локального моста RSyslog->Sentry, речь о котором пойдет ниже, а "10514" - его UDP-порт.
Далее, остановим Syslog, запустим RSyslog:
echo 'syslogd_enable="NO"' >> /etc/rc.conf echo 'rsyslogd_enable="YES"' >> /etc/rc.conf /etc/rc.d/syslogd stop /usr/local/etc/rc.d/rsyslogd start
Всё, теперь мы посылаем логи по UDP на наш мост, осталось только настроить и запустить его на этом же сервере.
Запускаем мост RSyslog->Sentry
Спасибо Patrick, за то что съэкономил мое и ваше время, написав этот мост. Установим нужные мосту зависимости:
pip install raven loggerglue
Качаем мой форк моста:
fetch -o /path/to/rsyslog_sentry.py
Теперь откройте этот файл на редактирование и найдите строчку <your dsn here>, укажите DSN полученный из Sentry (не забудьте добавить номер UDP-порта, который вы указали в SENTRY_UDP_PORT):
client = Client(dsn='udp://<PUBLIC_KEY>:<SECRET_KEY>@sentry.example.org:9091/2')
Конечно вы можете передавать логи и по http:client = Client(dsn='http://<PUBLIC_KEY>:<SECRET_KEY>@sentry.example.org/2')
После чего найдите строку где поднимается SyslogServer (он будет локально слушать UDP-порт, на который буду приходить сообщения от RSyslog) и укажите нужный IP-адрес и UDP-порт:
s = SyslogServer(('127.0.0.1', 10514), SimpleHandler)
Сейчас, вы уже можете запустить:
python /path/to/rsyslog_sentry.py
Но лучше добавить в Supervisor:
[program:rsyslog_sentry] command=python /path/to/rsyslog_sentry.py autostart=true autorestart=true
Запускаем в Supervisor:
supervisorctl reread supervisorctl start rsyslog_sentry
Вот и всё, цепь настроена, если возникнут проблемы - пишите!
Комментарии
О_о) я теперь медийная персона!
Ну а как же! Пора бы уже :-)
hi :)
I changed the IP, dsn and rsyslog conf like if $programname == 'supervisord' then @@192.168.1.101:10514, and run the sсript, when my rsyslog logs send to my server, the sсript got an exception,like
my supervisor log like this Aug 13 15:25:26 ubuntu supervisord: svtest SVTEST Tue Aug 13 15:25:25 2013
and in rfc5424.py,the line value like this '<14>1 2013-08-13T15:29:42+08:00 ubuntu supervisord - - svtest SVTEST Tue Aug 13 15:29:41 2013'
can u help me? :) thanks. my OS is ubuntu 12.04
Оставьте свой комментарий