Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

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

Задача по включении системного логирования во внешний лог описывается в соответствующей теме "Запись syslog на внешний USB-диск с помощю Syslog-ng", (автор Roman_Petrov).

Здесь рассмотрим непосредственно механизм ротации логов.

1. Необходимо установить через opkg пакеты logrotate и cron.

Cron нужен для периодического запуска logrotate. А logrotate в свою очередь требуется для проверки необходимости ротации логов и непосредственно их ротации в соответствии с заданными условиями (например, интервал времени и объем). 

С cron могут возникнуть проблемы, если файловая система диска fat или ntfs, т.к. на конфигурационных файлах будут неправильные (с точки зрения linux/cron) атрибуты файлов. И задачи просто не будут запускаться. Решение имеется, но нужно ставить crontab из busybox (п.2).

Второй и третий вариант решения проблемы с cron и ntfs/fat - это изменить файловую систему подключенного диска на ext2 или ext3, либо поставить поддержку opkg на отдельную флэшку (раздел) с ext2/ext3 (если, не хочется возиться с преобразованием основного диска). Для себя я выбрал третий вариант (хотя и на диске с файлами у меня ext3). Но т.к. основной диск у меня используется редко, и я хочу, чтобы он "засыпал" и отключал питание, то все логи пишу на отдельную флэшку (достаточно будет размером 1 Гб).

2. Настраиваем ротацию логов. Основной конф /opt/etc/logrotate.conf не трогаем и делаем отдельную конфигурацию для ротации файла /opt/var/log/messages (таким же образом можно будет настроить ротирование и других логов, если они у вас имеются - например, от прокси). Для этого в подключаемом по-умолчанию каталоге /opt/etc/logrotate.d (указано в основной конфигурации /opt/etc/logrotate.conf) создаем конф-файл messages и добавляем в него следующие строки:

  Показать контент

Здесь ротация производится по достижению размера лога 1Мб, хранится всего три последних файла. После ротации лога перезапускается сервис syslog-ng (нужно для правильного продолжения записи в новый лог). С учетом основной конфигурации (см. файл /opt/etc/logrotate.conf, опция weekly) ротация лога будет производиться каждую неделю или же при достижении объема 1Мб.

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

Перевод документации по logrotate можно посмотреть на сайте OpenNET.

3. Далее настраиваем cron в основном файле /opt/etc/crontab. Т.к. по-умолчанию задач, выполняемых ежедневно, еженедельно и т.п., у меня нет, то он выглядит так:

  Показать контент

Раскоментарена только строка для выполнения ежедневных задач. По-умолчанию после установки cron запускаются все задачи (все строки раскоментарены). Т.е. можно данный файл и не изменять, но при этом в /opt/var/log/messages при выполнении этих задач-заглушек (с частотой, как минимум 1 минута) будет появляться соответствующая запись о выполнении данной задачи. Поэтому решать вам.

Нужно также перезапустить службу cron. Для этого необходимо выполнить команду с консоли:

/opt/etc/init.d/S10cron restart

4. Добавляем в cron задачу, которая будет выполняться один раз в сутки. Для этого в каталоге /opt/etc/cron.daily размещаем исполняемый файл. Я его назвал /opt/etc/cron.daily/logrotate . В нем размещены следующие команды:

  Показать контент

Исполняемым файл можно сделать через пакет mc (файловый менджер - must have) или с командной строки:

chmod 755 /opt/etc/cron.daily/logrotate

Можно проверять необходимость ротации логов чаще, а не только раз в сутки. Для этого нужно раскоментировать соответствующие записи /opt/etc/crontab и поместить задачу logrotate в соответствующий каталог.

Но, как правило, в нашем случае логи быстро не увеличивают размер и в этом необходимости нет.

Обращаю внимание, что linux очень часто плохо относится к тому, если в текстовых конф-файлах и т.п. последняя строка не заканчивается символом возврата каретки. Поэтому необходимо после последней строки в файле нажимать Enter для перевода курсора на новую пустую строку. В приведенных мной примерах эта пустая строка имеется.

Всё.

Если хочется сразу проверить ротацию лога вручную (и его размер в соответствии с конфом уже больше 1Мб), то команду ротации можно принудительно выполнить с консоли (или просто запустить исполняемый файл-задачу):

/opt/sbin/logrotate /opt/etc/logrotate.conf
или (т.к. файл у нас уже исполняемый) запустить задачу
/opt/etc/cron.daily/logrotate
Опубликовано

А почему просто в имени файла не использовать дату? Или номер недели+год, месяц+год.... на выбор по желаемому объёму? Старые файлы кроном раз в день чистить по маске.

Опубликовано
  В 10.10.2016 в 12:13, makc22 сказал:

А почему просто в имени файла не использовать дату? Или номер недели+год, месяц+год.... на выбор по желаемому объёму? Старые файлы кроном раз в день чистить по маске.

Показать  

Не совсем понял о чем вопрос. logrotate как раз и предназначен для того, чтобы не изобретать велосипед и иметь возможность достаточно гибко настроить ротацию логов (особенно если их несколько). Он сам и удаляет старые файлы.

Архивные файлы в зависимости от настроек могут как раз и содержать в имени файла дату ротации (по-умолчанию как раз так и есть). Для указанного примера, это будет выглядеть так:

n                        Name                         │ Size  │Modify time 
..                                                    │UP--DIR│июл 16 23:38
messages                                              │   5075│окт 10 12:21
messages-20160926                                     │ 247934│сен 26 04:02
messages-20161002                                     │ 187521│окт  2 04:02
messages-20161010                                     │ 451485│окт 10 04:02

 

Опубликовано

Если почитать документацию на syslog-ng (для Кинетиков, кстати, собрана далеко не последняя версия, нет многих возможностей),

то в документации для ротации логов рекомендованы два способа:

1) внешний костыль logrotate и

2) штатное средство в виде имен файлов с датой: destination messages_dst {  file("/opt/log/${YEAR}_${MONTH}_${DAY}.log");  };
 

При этом, оба эти способа имеют нюансы:

1) в той же документации написано, что на время работы внешнего logrotate желательно syslog-ng останавливать, и

2) как будут отрабатываться имена файлов с датой при перезагрузке устройства - непонятно, так как при перезагрузке дата сбивается, и остается неправильной до обновления даты через NTP.

Правильным решением ротации логов было бы собрать и использовать вместо пакета sysslog-ng логгер nxlog, в котором ротация предусмотрена штатно и без костылей, но я не умею собирать пакеты.

Log files can be rotated by size or time without the need of external log rotation tools. Log rotation can also be scheduled in order to guarantee timely file rotation.

The file input reader module supports external log-rotation scripts, it can detect when an input file was moved/renamed and will reopen its input. Similarly, the file output writer module can also monitor when the file being written to is rotated and will reopen its original output. This way it is possible to keep using external log rotation tools without the need to migrate to the built-in log rotation.

Для себя пока остановился на дате в имени файлов, и на чистке барахла cron-ом: 00 6 * * * root find /opt/log/*.log* -daystart -mtime +14 -type f -exec rm {} \;

Опубликовано
  В 11.10.2016 в 13:35, HuduGuru сказал:

Если почитать документацию на syslog-ng (для Кинетиков, кстати, собрана далеко не последняя версия, нет многих возможностей),

то в документации для ротации логов рекомендованы два способа:

1) внешний костыль logrotate

Показать  

Ну вообще-то называть logrotate костылем, я бы не стал. Как правило, в linux он является штатным средством для ротации, архивирования, удаления логов. Его преимущество заключается в гибкости настроек и универсальности.

Возможно, ng-syslog и может самостоятельно сохранять логи в требуемом формате, но удалять-то их все-равно придется через cron. А если требуется старые логи сжимать, то тут вообще, скорее всего, без вариантов.

Но выбор средства борьбы с логами, конечно, остается за пользователем.

Но я не зря в начале темы указал, что таким образом можно управлять логами не только от syslog. Есть и другие сервисы и службы (например, почтовые-сервера, прокси, tor и т.д.- благо entware нам позволяет это делать!), которые могут сохранять свои логи, причем в разных каталогах и с различным наименованием. В этом случае logrotate сможет легко с ними управляться.

  В 11.10.2016 в 13:35, HuduGuru сказал:

в той же документации написано, что на время работы внешнего logrotate желательно syslog-ng останавливать

Показать  

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

Но если захотеть, то можно в конфе logrotate сначала останавливать ng-syslog, а потом после ротации запускать. Возможность для этого имеется, но я не вижу в этом необходимости, т.к. данного механизма достаточно.

  В 11.10.2016 в 13:35, HuduGuru сказал:

как будут отрабатываться имена файлов с датой при перезагрузке устройства - непонятно, так как при перезагрузке дата сбивается, и остается неправильной до обновления даты через NTP.

Показать  

Да, тут могут быть, наверное, проблемы. Но это не вина ng-syslog или logrotate. Поэтому для себя и не вижу смысла писать логи ng-syslog в формате ${YEAR}_${MONTH}_${DAY}.log, а ротацию логов по нужному мне формату раз в сутки доверить logrotate.

  • 3 недели спустя...
Опубликовано

А можно как

  В 11.10.2016 в 17:44, gvan сказал:

причем в разных каталогах и с различным наименованием. В этом случае logrotate сможет легко с ними управляться.

Показать  

А можно как-то эти логи(от разных так скажем сервисов) складывать в одну папку?

Опубликовано (изменено)
  В 27.10.2016 в 17:14, Илларион сказал:

А можно как-то эти логи(от разных так скажем сервисов) складывать в одну папку?

Показать  

1. Проводить ротацию логов можно в разных каталогах. Делайте, например, отдельный конф-файл для этого.

2. В соответствии с документацией, существует опция olddir

  Цитата

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

Показать  

Это требуется?

Документацию можно посмотреть в интернете. Например, есть перевод мануала на сайте OpenNET.

Изменено пользователем gvan
  • 2 месяца спустя...
Опубликовано
~ # chmod 755 /opt/etc/cron.daily/logrotate
~ # /opt/sbin/logrotate /opt/etc/logrotate.conf
error: Ignoring messages because of bad file mode - must be 0644 or 0444.
~ #


Почему???

Опубликовано
  В 27.01.2017 в 13:31, Oleg Shabanov сказал:

error: Ignoring messages because of bad file mode - must be 0644 or 0444.

Показать  

Файловая система на диске с entware какая? Что показывает команда:

$ ls -l /opt/etc/logrotate.conf
-rw-------    1 root     root           893 Dec 24 17:46 /opt/etc/logrotate.conf

Должно быть так, как в пример выше - только чтение/запись для root. Но если файловая система ntfs, то корректно права на нужные изменить не удастся.

Опубликовано
  В 28.01.2017 в 09:30, gvan сказал:

Файловая система на диске с entware какая? Что показывает команда:

$ ls -l /opt/etc/logrotate.conf
-rw-------    1 root     root           893 Dec 24 17:46 /opt/etc/logrotate.conf

Должно быть так, как в пример выше - только чтение/запись для root. Но если файловая система ntfs, то корректно права на нужные изменить не удастся.

Показать  

~ # ls -l /opt/etc/logrotate.conf
-rw-------    1 root     root           893 Dec 25 23:57 /opt/etc/logrotate.conf
~ #

 

Опубликовано
  В 05.02.2017 в 09:07, Oleg Shabanov сказал:

~ # ls -l /opt/etc/logrotate.conf

Показать  

Тогда нужно еще:

$ ls -l /opt/etc/logrotate.d/
-rw-r--r--    1 root     root           158 Oct 10 09:19 messages

Я думаю, что на файле /opt/etc/logrotate.d/messages у вас стоят права rwrwrw. Попробовал у себя поменять на такие - тоже появилась подобная ошибка.

Опубликовано
  В 06.02.2017 в 07:45, gvan сказал:

Тогда нужно еще:

$ ls -l /opt/etc/logrotate.d/
-rw-r--r--    1 root     root           158 Oct 10 09:19 messages

Я думаю, что на файле /opt/etc/logrotate.d/messages у вас стоят права rwrwrw. Попробовал у себя поменять на такие - тоже появилась подобная ошибка.

Показать  

BusyBox v1.25.1 () built-in shell (ash)

~ # ls -l /opt/etc/logrotate.d/
-rwxrw-rw-    1 root     root           176 Jan 27 17:21 messages

 

  • 1 месяц спустя...
Опубликовано
  В 10.10.2016 в 09:26, gvan сказал:

и я хочу, чтобы он "засыпал" и отключал питание, то все логи пишу на

Показать  

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

Опубликовано
  В 13.03.2017 в 17:32, Илларион сказал:

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

Показать  

Где-то на форуме от разработчиков проскакивала информация, что в последних версиях прошивки логическое засыпание винта отключили. В веб-интерфейсе это вообще давно убрали.

У меня винт засыпает, скорее всего, из-за того, что сам контроллер (или прослойка между USB-SATA) решает отключить HDD. Т.е. через SMART и hddparm у меня принудительно отключать питание не удалось - винт все равно засыпает.

Но это не тема для обсуждения данной проблемы здесь...

  • 2 года спустя...
Опубликовано (изменено)

Добрый день.

У меня что-то явно пошло не так.

Скажите, по какому пути должны файлы логов появляться?

У меня в var/log файл messages обновляться перестал. Но я нигде не вижу новых файлов - как результата этой инструкции.

Или я что-то не так сделал. Прошу помощи.

  Показать контент

 

Изменено пользователем Алексей Саратовский
Опубликовано
  В 09.09.2019 в 05:34, Алексей Саратовский сказал:

Скажите, по какому пути должны файлы логов появляться?

Показать  

Логи в entware лежат по пути /opt/var/log.

Файл messages тоже находится там. Если он перестал обновляться, то настройка ротации логов вряд ли виновата. Для проверки можно сделать рестарт службы syslog-ng и посмотреть, станут ли в него добавляться новые данные. Если нет, то вопрос следует задать в соответствующей теме (ссылка есть в первом сообщении).

Опубликовано

то есть должно одновременно всё быть: и обновление messages и ротация в той же папке, верно?

И скажите, пожалуйста, именно по вашей теме - я всё верно сделал (скрин выше)?

Опубликовано
  В 09.09.2019 в 06:02, Алексей Саратовский сказал:

то есть должно одновременно всё быть: и обновление messages и ротация в той же папке, верно?

И скажите, пожалуйста, именно по вашей теме - я всё верно сделал (скрин выше)?

Показать  

Ротация никакого отношения к обновлению логов не имеет. Ее задача правильно перенести/архивировать файлы журналов.

На скрине выше вообще непонятно, что вы там настроили. 

Повторюсь. Если у вас перестали обновляться логи, что ротация здесь не причем (за исключением уж совсем клинических случаев).

Сначала разберитесь с обновлением логов и добейтесь того, чтобы данные в них писались. Удалите пакет logrotate и скрипт /opt/etc/cron.daily/logrotate, перезапустите роутер, проверьте данные.

  • 1 год спустя...
Опубликовано

сделал файл logs.conf и положил в etc/logrotate.d

/opt/var/log/nginx/*.log
{
	rotate 4
	size 2k
	compress
	compresscmd /opt/bin/gzip
	uncompresscmd /opt/bin/gunzip
	compressext .gz
	copytruncate
	missingok
	olddir /opt/var/log/nginx/old
	dateext
}

другой test.sh в cron etc/cron.hourly

#!/bin/sh
cd /opt/sbin
logrotate -s /opt/var/lib/logrotate.status /opt/etc/logrotate.conf

по задумке хотелось чтоб cron давал команду logrotate раз в час вертеть логи при достижении размера и паковать. где я делаю ошибку?

Опубликовано (изменено)
  Показать контент

при отладке вроде без ошибок.

Изменено пользователем Meccep45
Опубликовано (изменено)
  В 18.03.2021 в 16:02, Meccep45 сказал:

при отладке вроде без ошибок

Показать  

Т.е.при ручном запуске/отладке вертит правильно (при достижении нужных критериев), но по крону не отрабатывает? Могу предположить, что нужно в основном файле crontab убрать комментарий для разрешения запуска почасовых задач (в первом сообщении темы об этом есть информация). А скрипт /opt/etc/cron.daily/logrotate просто также скопировать в cron.hourly (test.sh по сути не нужен).

Изменено пользователем gvan
  • 5 месяцев спустя...
Опубликовано (изменено)

I did syslog (to external disk) successfully via @Roman_Petrov guide. Thanks to him.  image.png.d0ab48f19a193dff52f366e19ab1c9ab.png

But I can not rotate these logs.

Test action give me this error: image.png.96f50c346c7132ea8ece4cea6e894890.png

 

My Opkg Disk : Ext4

My External Disk : Ext2

logrotate.conf is permission 775

 

My syslogs file in /opt/etc/logrotate.d/

 

/tmp/mnt/b8ba1277-55a4-d701-90b8-127755a4d701/syslogs
{
    maxsize 1M
    rotate 3
    sharedscripts
    postrotate
                /opt/etc/init.d/S01syslog-ng reconfigure
    endscript
}

 

 

I miss something which I can not see. :( 

Изменено пользователем yerebakan
  • 3 месяца спустя...
Опубликовано
  В 19.12.2021 в 17:22, ale_xb сказал:

Хочу понять, зачем ставить cron из entaware? Разве crond из состава прошивки/busybox не достаточно для этого?

Показать  

В первом сообщение есть примечание по cron (на момент написания сообщения). Если все устраивает и работает (задачи из crontab выполняются) с существующим cron, то необходимости в установке нет.

  • 2 года спустя...
Опубликовано

При ротацмм логов на отдельный раздел флешки стало выдавать ошибку

/tmp/mnt/BackUp/log/messages" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

не получается исправить. какие права он хочет на эти папки? подскажите пжлста.
 

Опубликовано
  В 14.06.2024 в 12:52, vitslayer сказал:

При ротацмм логов на отдельный раздел флешки стало выдавать ошибку

/tmp/mnt/BackUp/log/messages" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

не получается исправить. какие права он хочет на эти папки? подскажите пжлста.
 

Показать  

Решил проблему путем добавления su root root в opt/etc/logrotate.d/messages

 

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.