Использование системного журнала в приложении rails

Я думаю об использовании системного журнала в своих приложениях для рельсов. Процесс описан в этой записи блога:

  1. Добавьте gem 'SyslogLogger' к Gemfile
  2. Добавьте require 'syslog_logger' в начало config/environments/production.rb
  3. Также раскомментируйте строку config.logger = в том же файле.

В производственной коробке у меня есть 4 приложения rails, работающие с использованием пассажира. Если я переключусь на использование syslogger для всех 4 моих приложений, то я боюсь, что сообщения журнала из всех 4 приложений будут попадать в один файл, а сообщения журнала будут чередоваться. Конечно, я могу использовать splunk, но сначала я хотел проверить, могу ли я получить один файл журнала для каждого из моих приложений rails. Это было бы желательно для моей ситуации.

Это возможно?


person Roger    schedule 18.09.2009    source источник


Ответы (2)


Ответ @cite охватывает один вариант различения приложений. Однако кадр сообщения системного журнала на самом деле имеет 2 поля, которые делают его еще проще: hostname и tag (более известные и используемые как имя программы).

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

Более интересным является tag. Ваше приложение определяет tag при создании экземпляра SyslogLogger. Например:

SyslogLogger.new('app1')

Класс регистратора будет отправлять в системный syslogd как app1, и это отображается как в локальном файле журнала, так и в любых удаленных местах назначения системного журнала (без необходимости изменять само сообщение журнала). По умолчанию rails. Все современные демоны системного журнала могут фильтровать на основе tag; см. program() для syslog-ng и $programname для rsyslog.

Кроме того, стоит отметить, что SyslogLogger в основном является оберткой для функций C openlog() и syslog(), поэтому в основном вся конфигурация после регистрации происходит в системном демоне. Как правило, это желательно, но иногда вы можете захотеть, чтобы ваше приложение Rails регистрировалось непосредственно в определенном месте назначения (например, для упрощения автоматического развертывания, изменения атрибутов, не разрешенных syslog(), или запуска в средах без доступа к системному демону).

Мы столкнулись с парой таких случаев и сделали вставную замену Logger, которая сама генерирует UDP-пакеты. Драгоценный камень remote_syslog_logger находится на GitHub.

person Troy Davis    schedule 06.04.2012

Да, по умолчанию почти все Unix syslogds будут записывать сообщения, указанные в средствах user или local*, в один и тот же файл. Тем не менее, каждый известный мне syslogd позволит вам указать файлы журналов для каждого объекта, поэтому вы можете иметь журнал вашего первого приложения для local1.*, второго для local2.* и так далее.

Кроме того, более новые демоны системного журнала, такие как syslog-ng, позволяют разбивать сообщения по разным файлам, оценивая сообщение по регулярному выражению (записывать строки журнала, содержащие railsapp_1, в /var/log/railsapp_1.log и т. д.).

Итак, настройте свой syslogd соответствующим образом, и все готово (кровавые подробности изменения этой конфигурации следует запрашивать на serverfault.com, если справочные страницы вашей системы не содержат не поможет вам сделать это.)

person cite    schedule 19.09.2009