Почему только некоторые мои журналы меняют?

Я использую Ubuntu 14.04. У меня есть следующее в файле /etc/logrotate.conf ...

/home/rails/myproject/log { daily rotate 3 compress delaycompress missingok notifempty create 644 rails rails } /var/log/postgresql { daily rotate 3 compress delaycompress missingok notifempty create 644 root root }

Каждую ночь я смотрел на свои журналы с рельсами, и это всегда было бы больше - то есть это не казалось как журналы были повернуты ...

myuser@myproject:~$ ls -al /home/rails/myproject/log total 4574368 drwxr-xr-x 2 rails rails 4096 May 30 12:04 . drwxr-xr-x 15 rails rails 4096 May 30 12:03 .. -rw-rw-r-- 1 rails rails 14960 Jun 1 22:39 development.log -rw-rw-r-- 1 rails rails 0 Oct 22 2016 .keep -rw-r--r-- 1 rails rails 4523480004 Jun 22 10:19 production.log -rw-rw-r-- 1 rails rails 156358087 Jun 22 10:19 sidekiq.log -rw-rw-r-- 1 rails rails 54246 Apr 10 14:34 test.log

Когда я запускаю команду вручную, я вижу, что некоторые из журналов кажутся поворотными ...

myuser@myproject:~$ sudo logrotate /etc/logrotate.conf myuser@myproject:~$ ls -al /home/rails/myproject/log total 4570288 drwxr-xr-x 2 rails rails 4096 Jun 22 10:22 . drwxr-xr-x 15 rails rails 4096 May 30 12:03 .. -rw-rw-r-- 1 rails rails 0 Jun 22 10:22 development.log -rw-rw-r-- 1 rails rails 14960 Jun 1 22:39 development.log.1 -rw-rw-r-- 1 rails rails 0 Oct 22 2016 .keep -rw-r--r-- 1 rails rails 0 Jun 22 10:22 production.log -rw-r--r-- 1 rails rails 4523505906 Jun 22 10:23 production.log.1 -rw-rw-r-- 1 rails rails 156369048 Jun 22 10:23 sidekiq.log -rw-rw-r-- 1 rails rails 54246 Apr 10 14:34 test.log

Как мне понять, почему мои рельсовые журналы не вращаются ночью? Обратите внимание, что другие журналы в системе выглядят. Выше, я включил мою настройку postgres, и когда я смотрю на журналы там, кажется, что они нормально вращаются ...

myuser@myproject:~$ ls -al /var/log/postgresql total 1832 drwxrwxr-t 2 root postgres 4096 May 2 20:42 . drwxr-xr-x 13 root root 4096 Jun 22 10:22 .. -rw-r----- 1 postgres adm 1861361 Jun 22 10:14 postgresql-9.6-main.log

Спасибо, - Дейв

Редактирование: установка конфигурация в отдельном файле, похоже, ничего не сделала. Ниже приведена моя конфигурация, а также журналы, которые, похоже, не вращаются ...

myuser@myapp:~$ sudo cat /etc/logrotate.d/myapp [sudo] password for myuser: /home/rails/myapp/log/*.log { daily missingok compress notifempty rotate 12 create delaycompress missingok su rails rails }

Вот журналы. Кажется, ничего не случилось ...

myuser@myapp:~$ ls -al /home/rails/myapp/log total 4635956 drwxr-xr-x 2 rails rails 4096 Jun 22 10:22 . drwxr-xr-x 15 rails rails 4096 May 30 12:03 .. -rw-rw-r-- 1 rails rails 0 Jun 22 10:22 development.log -rw-rw-r-- 1 rails rails 14960 Jun 1 22:39 development.log.1 -rw-rw-r-- 1 rails rails 0 Oct 22 2016 .keep -rw-r--r-- 1 rails rails 0 Jun 22 10:22 production.log -rw-r--r-- 1 rails rails 4546785231 Jun 24 12:12 production.log.1 -rw-rw-r-- 1 rails rails 200336693 Jun 24 12:51 sidekiq.log -rw-rw-r-- 1 rails rails 54246 Apr 10 14:34 test.log
3
задан 24 June 2017 в 19:56

9 ответов

Задача Logrotate - перемещать (переименовывать) и сжимать файлы. Вы сконфигурировали его в этом случае, чтобы переименовать и сжать файлы журнала Rails, а затем создать новые с исходными именами.

Имена файлов - это способ поиска файла, но фактический файл - это просто некоторые пространство на диске. Файл может иметь несколько имен (жестких ссылок) или без имен (вы можете rm открыть файл, но он по-прежнему занимает место на диске, пока файл открыт в некотором процессе).

[d2 ] Проблема, с которой вам кажется, заключается в том, что приложение Rails уже открыло файл, когда оно переименовано. Регистратор Rails не замечает изменения имени, потому что он использует имя один раз, чтобы открыть файл, а затем полностью перестало заботиться о его имени.

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

Если вы посмотрите в /etc/logrotate.d, вы увидите много примеров этого, в зависимости от того, что вы установили.

[d5 ] Например, rsyslog имеет:

postrotate
    invoke-rc.d rsyslog rotate > /dev/null
endscript

stunnel имеет:

postrotate
    /etc/init.d/stunnel4 reopen-logs > /dev/null
endscript

Это скрипты, чтобы сообщить соответствующему процессу, что файл нуждается в повторном открытии. Конкретный механизм зависит от программы, но то, что это имеет тенденцию делать, - это отправить HUP (или иногда USR1) (см. [F9]), которые длительные процессы принимают как инструкцию для закрытия и повторного открытия logfiles.

В случае с Rails способ его изменения зависит от того, какой логгер вы используете. Я только что видел несколько советов, предполагающих, что вы должны использовать copytruncate, который в основном является «чит-вариантом» в logrotate, говорящим, что он вручную копирует содержимое и пуст файл, а не перемещает его и создает новый. (см. man logrotate.conf). Это используется вместо create следующим образом:

/home/rails/myapp/log/*.log {
    daily
    missingok
    compress
    notifempty
    rotate 12
    copytruncate
    delaycompress
    missingok
    su rails rails
}

Это не отличное решение, поскольку оно буквально копирует весь файл (чтобы создать его снимок как есть) перед удалением его содержимого , что довольно неэффективно.

Однако, если вы используете Unicorn для запуска вашего приложения (которое мультиплексирует запросы через кучу идентичных рабочих процессов Rails), он поддерживает сигнал USR1 как обычно (убивая и заменяя все рабочие, что фактически заставляет их повторно открывать файлы), и вы можете просто отправить его в postrotate с помощью pkill или аналогичного, возможно, так:

/home/rails/myapp/log/*.log {
    daily
    missingok
    compress
    notifempty
    rotate 12
    create
    delaycompress
    missingok
    su rails rails
    postrotate
        pkill -USR1 -u rails unicorn
    endscript
}

pkill - это инструмент для искать запущенные процессы и отправлять им сигналы, так что это найдет все с именем unicorn, запущенным как пользователь rails, и отправит ему сигнал USR1, который сообщает ему повторно открыть файлы журнала. (Примеры, которые я дал из файлов Ubuntu пакетов /etc/logrotate.d, фактически делают то же самое, но эти службы имеют поиск, скрытый в функциях в их сценариях /etc/init.d.)

Я уверен, что быть каким-то образом настроить разумную postrotate для любой настройки Rails, которую вы получили (в худшем и простом случае, просто перезапустите ее), но, надеюсь, это объясняет все стороны Ubuntu ...

0
ответ дан 22 May 2018 в 21:16
  • 1
    Я все еще новичок, и я не понимаю, что вы объясняете. Вы говорите, что проблема связана с Rails, а не с моим logrotate? Просто для пинков, какая конфигурация я бы вам сделал для этого варианта обмана, который вы упомянули? Пока он выполняет свою работу, я рад обмануть. – Dave 3 July 2017 в 06:21
  • 2
    Я попытался немного уточнить, а также привел пример copytruncate. Это просто другой (менее эффективный) метод, который заменяет create, предназначенный для процессов, которые не могут повторно открывать файлы должным образом. – Tom Spurling 3 July 2017 в 13:58
  • 3
    Спасибо за эти разъяснения. Есть ли способ проверить это, прежде чем ждать, чтобы проверить, выполняются ли они сегодня? Я не хочу оставлять вас навеки на щедрость, если это действительно решает мою проблему. – Dave 3 July 2017 в 23:05
  • 4
    Я немного опаздываю, но да, вы можете инициировать раннее вращение для любого конкретного файла конфигурации: например, sudo logrotate -fv /etc/logrotate.d/rails. -f означает «игнорировать тот факт, что файл не достаточно старый и просто сделать это». -v означает «объяснить, что вы делаете». (Альтернативно -d, что означает «скажите, что бы вы сделали, не делая этого», хотя в этом случае это не очень полезно, поскольку вас больше интересует, ведет ли приложение Rails после вращения.) Удачи! – Tom Spurling 4 July 2017 в 04:44
  • 5
    Это напоминает мне, вероятно, это основная причина использования отдельных конфигурационных файлов для каждого приложения (кроме необходимости разбивать его на пакеты). Если материал, который вы хотели протестировать, был в /etc/logrotate.conf, ваш тестовый прогон закончил бы все, потому что он говорит include /etc/logrotate.d. – Tom Spurling 4 July 2017 в 04:51

Задача Logrotate - перемещать (переименовывать) и сжимать файлы. Вы сконфигурировали его в этом случае, чтобы переименовать и сжать файлы журнала Rails, а затем создать новые с исходными именами.

Имена файлов - это способ поиска файла, но фактический файл - это просто некоторые пространство на диске. Файл может иметь несколько имен (жестких ссылок) или без имен (вы можете rm открыть файл, но он по-прежнему занимает место на диске, пока файл открыт в некотором процессе).

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

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

Если вы посмотрите в /etc/logrotate.d, вы увидите много примеров этого, в зависимости от того, что вы установили.

Например, rsyslog имеет:

postrotate invoke-rc.d rsyslog rotate > /dev/null endscript

stunnel имеет:

postrotate /etc/init.d/stunnel4 reopen-logs > /dev/null endscript

Это скрипты, чтобы сообщить соответствующему процессу, что файл нуждается в повторном открытии. Конкретный механизм зависит от программы, но то, что это имеет тенденцию делать, - это отправить HUP (или иногда USR1) (см. [F9]), которые длительные процессы принимают как инструкцию для закрытия и повторного открытия logfiles.

В случае с Rails способ его изменения зависит от того, какой логгер вы используете. Я только что видел несколько советов, предполагающих, что вы должны использовать copytruncate, который в основном является «чит-вариантом» в logrotate, говорящим, что он вручную копирует содержимое и пуст файл, а не перемещает его и создает новый. (см. man logrotate.conf). Это используется вместо create следующим образом:

/home/rails/myapp/log/*.log { daily missingok compress notifempty rotate 12 copytruncate delaycompress missingok su rails rails }

Это не отличное решение, поскольку оно буквально копирует весь файл (чтобы создать его снимок как есть) перед удалением его содержимого , что довольно неэффективно.

Однако, если вы используете Unicorn для запуска вашего приложения (которое мультиплексирует запросы через кучу идентичных рабочих процессов Rails), он поддерживает сигнал USR1 как обычно (убивая и заменяя все рабочие, что фактически заставляет их повторно открывать файлы), и вы можете просто отправить его в postrotate с помощью pkill или аналогичного, возможно, так:

/home/rails/myapp/log/*.log { daily missingok compress notifempty rotate 12 create delaycompress missingok su rails rails postrotate pkill -USR1 -u rails unicorn endscript }

pkill - это инструмент для искать запущенные процессы и отправлять им сигналы, так что это найдет все с именем unicorn, запущенным как пользователь rails, и отправит ему сигнал USR1, который сообщает ему повторно открыть файлы журнала. (Примеры, которые я дал из файлов Ubuntu пакетов /etc/logrotate.d, фактически делают то же самое, но эти службы имеют поиск, скрытый в функциях в их сценариях /etc/init.d.)

Я уверен, что быть каким-то образом настроить разумную postrotate для любой настройки Rails, которую вы получили (в худшем и простом случае, просто перезапустите ее), но, надеюсь, это объясняет все стороны Ubuntu ...

0
ответ дан 18 July 2018 в 11:14

Задача Logrotate - перемещать (переименовывать) и сжимать файлы. Вы сконфигурировали его в этом случае, чтобы переименовать и сжать файлы журнала Rails, а затем создать новые с исходными именами.

Имена файлов - это способ поиска файла, но фактический файл - это просто некоторые пространство на диске. Файл может иметь несколько имен (жестких ссылок) или без имен (вы можете rm открыть файл, но он по-прежнему занимает место на диске, пока файл открыт в некотором процессе).

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

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

Если вы посмотрите в /etc/logrotate.d, вы увидите много примеров этого, в зависимости от того, что вы установили.

Например, rsyslog имеет:

postrotate invoke-rc.d rsyslog rotate > /dev/null endscript

stunnel имеет:

postrotate /etc/init.d/stunnel4 reopen-logs > /dev/null endscript

Это скрипты, чтобы сообщить соответствующему процессу, что файл нуждается в повторном открытии. Конкретный механизм зависит от программы, но то, что это имеет тенденцию делать, - это отправить HUP (или иногда USR1) (см. [F9]), которые длительные процессы принимают как инструкцию для закрытия и повторного открытия logfiles.

В случае с Rails способ его изменения зависит от того, какой логгер вы используете. Я только что видел несколько советов, предполагающих, что вы должны использовать copytruncate, который в основном является «чит-вариантом» в logrotate, говорящим, что он вручную копирует содержимое и пуст файл, а не перемещает его и создает новый. (см. man logrotate.conf). Это используется вместо create следующим образом:

/home/rails/myapp/log/*.log { daily missingok compress notifempty rotate 12 copytruncate delaycompress missingok su rails rails }

Это не отличное решение, поскольку оно буквально копирует весь файл (чтобы создать его снимок как есть) перед удалением его содержимого , что довольно неэффективно.

Однако, если вы используете Unicorn для запуска вашего приложения (которое мультиплексирует запросы через кучу идентичных рабочих процессов Rails), он поддерживает сигнал USR1 как обычно (убивая и заменяя все рабочие, что фактически заставляет их повторно открывать файлы), и вы можете просто отправить его в postrotate с помощью pkill или аналогичного, возможно, так:

/home/rails/myapp/log/*.log { daily missingok compress notifempty rotate 12 create delaycompress missingok su rails rails postrotate pkill -USR1 -u rails unicorn endscript }

pkill - это инструмент для искать запущенные процессы и отправлять им сигналы, так что это найдет все с именем unicorn, запущенным как пользователь rails, и отправит ему сигнал USR1, который сообщает ему повторно открыть файлы журнала. (Примеры, которые я дал из файлов Ubuntu пакетов /etc/logrotate.d, фактически делают то же самое, но эти службы имеют поиск, скрытый в функциях в их сценариях /etc/init.d.)

Я уверен, что быть каким-то образом настроить разумную postrotate для любой настройки Rails, которую вы получили (в худшем и простом случае, просто перезапустите ее), но, надеюсь, это объясняет все стороны Ubuntu ...

0
ответ дан 24 July 2018 в 19:45

Похоже, проблема сводится к тому, что вы указываете каталог для вращения файла вместо фактических имен файлов.

Чтобы повернуть все файлы с расширением .log в вашем каталоге /home/rails/myproject/log, вы можете использовать следующую строку вместо первой строки ваша конфигурация:

/home/rails/myproject/log/*.log {

и аналогично в конфигурации каталога postgres

/var/log/postgresql/*.log {

Можно использовать подстановочный символ * без расширения .log, чтобы повернуть все файлы (за исключением скрытых, начиная с .) в вашем каталоге postgresql, но я предпочитаю добавленный элемент управления только для указания файлов .log:

/var/log/postgresql/* {

. В качестве примечания обратите внимание на то, как вы создайте новые версии файла журнала с помощью logrotate, если вы создадите новый журнал postgresql с 644 восьмеричными разрешениями, принадлежащими пользователю root, тогда пользователь postgres не сможет записать в новый файл журнала.

1
ответ дан 22 May 2018 в 21:16
  • 1
    Я больше беспокоюсь о журналах Rails, так как они, похоже, продолжают расти, поэтому позвольте мне применить настройки, которые у вас есть, и посмотреть, как вещи вытряхиваются сегодня вечером. - Дэйв – Dave 22 June 2017 в 21:32
  • 2
    Возможно, вам придется подождать до тех пор, пока второй день не пройдет, когда журналы будут вращаться, если вчера вы запустили logrotate вручную. Кажется, я что-то помню, потому что он был суетлив в течение 24 часов. Скрещенные пальцы! – Arronical 23 June 2017 в 11:37
  • 3
    О, стреляй, я не видел твоих комментариев. Похоже, что вчера не было вещей, и я буду ждать сегодня вечером, а завтра выйдет завтра. благодаря – Dave 23 June 2017 в 18:32
  • 4
    Привет, Хорошо, я отредактировал мой вопрос, чтобы включить то, что выглядели журналы после прогона за одну ночь. Они одинаковые. Не похоже, чтобы все было повернуто. Есть ли журналы waht / etc / logrotate? Мне любопытно, почему он, кажется, ничего не вращает. – Dave 24 June 2017 в 19:57

Проверьте статус в /var/lib/logrotate/status, если вы видите какие-либо проблемы

Пожалуйста, проверьте разрешения и права собственности на файлы в /etc/logrotate.d корневом владельце и режиме разрешения 644. фрагмент кода для logrotate:

/home/rails/myapp/log/*.log {
   rotate 12
   daily
   missingok
   compress
   notifempty
   create 640 rails rails
   delaycompress
   missingok
}

проверять вывод logrotate вручную с помощью --verbose Если вам требуется логротация более чем для определенного размера, вы можете поэкспериментировать с параметрами maxsize и size в файле конфигурации logrotate

0
ответ дан 22 May 2018 в 21:16
  • 1
    Мои права и права собственности на файл конфигурации: «rr-r-r-- 1 корень root 161 Jun 22 12:04 rails_config», который аналогичен всем другим конфигурациям. Я предполагаю, что это были разрешения, на которые вы ссылались? – Dave 3 July 2017 в 23:03
  • 2
    Да, теперь проверьте состояние поворота журнала прошлой ночью. Будет какая-то подсказка, связанная с вращением или пропуском конкретного файла по какой-то причине – v_sukt 4 July 2017 в 06:44

Похоже, проблема сводится к тому, что вы указываете каталог для вращения файла вместо фактических имен файлов.

Чтобы повернуть все файлы с расширением .log в вашем каталоге /home/rails/myproject/log, вы можете использовать следующую строку вместо первой строки ваша конфигурация:

/home/rails/myproject/log/*.log {

и аналогично в конфигурации каталога postgres

/var/log/postgresql/*.log {

Можно использовать подстановочный символ * без расширения .log, чтобы повернуть все файлы (за исключением скрытых, начиная с .) в вашем каталоге postgresql, но я предпочитаю добавленный элемент управления только для указания файлов .log:

/var/log/postgresql/* {

. В качестве примечания обратите внимание на то, как вы создайте новые версии файла журнала с помощью logrotate, если вы создадите новый журнал postgresql с 644 восьмеричными разрешениями, принадлежащими пользователю root, тогда пользователь postgres не сможет записать в новый файл журнала.

1
ответ дан 18 July 2018 в 11:14

Проверьте статус в /var/lib/logrotate/status, если вы видите какие-либо проблемы

Пожалуйста, проверьте разрешения и права собственности на файлы в /etc/logrotate.d корневом владельце и режиме разрешения 644. фрагмент кода для logrotate:

/home/rails/myapp/log/*.log { rotate 12 daily missingok compress notifempty create 640 rails rails delaycompress missingok }

проверять вывод logrotate вручную с помощью --verbose Если вам требуется логротация более чем для определенного размера, вы можете поэкспериментировать с параметрами maxsize и size в файле конфигурации logrotate

0
ответ дан 18 July 2018 в 11:14

Похоже, проблема сводится к тому, что вы указываете каталог для вращения файла вместо фактических имен файлов.

Чтобы повернуть все файлы с расширением .log в вашем каталоге /home/rails/myproject/log, вы можете использовать следующую строку вместо первой строки ваша конфигурация:

/home/rails/myproject/log/*.log {

и аналогично в конфигурации каталога postgres

/var/log/postgresql/*.log {

Можно использовать подстановочный символ * без расширения .log, чтобы повернуть все файлы (за исключением скрытых, начиная с .) в вашем каталоге postgresql, но я предпочитаю добавленный элемент управления только для указания файлов .log:

/var/log/postgresql/* {

. В качестве примечания обратите внимание на то, как вы создайте новые версии файла журнала с помощью logrotate, если вы создадите новый журнал postgresql с 644 восьмеричными разрешениями, принадлежащими пользователю root, тогда пользователь postgres не сможет записать в новый файл журнала.

1
ответ дан 24 July 2018 в 19:45
  • 1
    Я больше беспокоюсь о журналах Rails, так как они, похоже, продолжают расти, поэтому позвольте мне применить настройки, которые у вас есть, и посмотреть, как вещи вытряхиваются сегодня вечером. - Дэйв – Dave 22 June 2017 в 21:32
  • 2
    Возможно, вам придется подождать до тех пор, пока второй день не пройдет, когда журналы будут вращаться, если вчера вы запустили logrotate вручную. Кажется, я что-то помню, потому что он был суетлив в течение 24 часов. Скрещенные пальцы! – Arronical 23 June 2017 в 11:37
  • 3
    О, стреляй, я не видел твоих комментариев. Похоже, что вчера не было вещей, и я буду ждать сегодня вечером, а завтра выйдет завтра. благодаря – Dave 23 June 2017 в 18:32
  • 4
    Привет, Хорошо, я отредактировал мой вопрос, чтобы включить то, что выглядели журналы после прогона за одну ночь. Они одинаковые. Не похоже, чтобы все было повернуто. Есть ли журналы waht / etc / logrotate? Мне любопытно, почему он, кажется, ничего не вращает. – Dave 24 June 2017 в 19:57

Проверьте статус в /var/lib/logrotate/status, если вы видите какие-либо проблемы

Пожалуйста, проверьте разрешения и права собственности на файлы в /etc/logrotate.d корневом владельце и режиме разрешения 644. фрагмент кода для logrotate:

/home/rails/myapp/log/*.log { rotate 12 daily missingok compress notifempty create 640 rails rails delaycompress missingok }

проверять вывод logrotate вручную с помощью --verbose Если вам требуется логротация более чем для определенного размера, вы можете поэкспериментировать с параметрами maxsize и size в файле конфигурации logrotate

0
ответ дан 24 July 2018 в 19:45
  • 1
    Мои права и права собственности на файл конфигурации: «rr-r-r-- 1 корень root 161 Jun 22 12:04 rails_config», который аналогичен всем другим конфигурациям. Я предполагаю, что это были разрешения, на которые вы ссылались? – Dave 3 July 2017 в 23:03
  • 2
    Да, теперь проверьте состояние поворота журнала прошлой ночью. Будет какая-то подсказка, связанная с вращением или пропуском конкретного файла по какой-то причине – v_sukt 4 July 2017 в 06:44

Другие вопросы по тегам:

Похожие вопросы: