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

импортированный журнал в rsyslog не отправляется на удаленный сервер при ротации

Итак, прямо сейчас у меня есть несколько производственных серверов, и я настраиваю удаленное ведение журнала через rsyslog на наши промежуточные серверы. Для всего, что на самом деле регистрируется через rsyslog, он работает нормально (даже при ротации), но наш журнал php5_errors не обрабатывается через rsyslog по нескольким различным причинам, в том числе у нас есть экземпляры php, записывающие в него сами (это было еще одно решение разработчиков, которое я не могу легко изменить)

В любом случае, казалось, что простой вариант - импортировать файлы журналов, которые я хотел (также это можно сделать с помощью файла журнала modsecurity)

В любом случае, всякий раз, когда файлы журнала меняются, он перестает отправлять новую информацию на удаленный сервер. Пока мне не удалось понять, как это исправить без перезапуска rsyslog.

Любая помощь по этому поводу будет оценена

все серверы являются серверами debian squeeze, на которых запущены rsyslog и php 5.3

Проблема здесь в том, что ваш поворот переместит текущий файл (например, mylog), на новое имя (например, mylog.0) и откройте новый с тем же именем.

Однако rsyslog открывает файл только при первом запуске. После этого он продолжает читать из того же файла - даже если вы переименуете файл во время его работы.

Решение здесь - исправить ваш вращающийся скрипт. Вместо того, чтобы перемещать файл и создавать новый с тем же именем, он должен скопировать содержимое файла, а затем обнулить его. Таким образом, rsyslog сможет продолжать чтение с того же дескриптора файла. Как именно это сделать, зависит от того, что вы используете для ротации журналов - если это общий logrotate, вы просто добавляете опцию

copytruncate

к записи журнала.