Ротация логов и syslog-ng
Гость 23 февраля, 2007 - 22:32
Здравствуйте.
Подскажите, пожалуйста, как организовать ротацию логов в системе.
Раньше я использовал демон logrotate но в связи с переходом на syslog-ng ставить его нет смысла так как syslog-ng вроде сам умеет их ротейтить. Гугл особо не помог или я чего-то не понимаю. Некоторые попрежнему используют logrotate совместно с -ng.
Как например попросить syslog-ng ротейтить /var/log/messages
»
- Для комментирования войдите или зарегистрируйтесь
Вроде syslog-ng
Вроде syslog-ng требует logrotate.
man syslog-ng, что тут скажешь...
_________________
Ko annan lobbaa, siiz lentääd grobbaa (-:E
Интересно, но в
А в хендбуке сказано что требует:
---------
Если вы планируете использовать sysklogd или syslog-ng, позднее может потребоваться установка logrotate, поскольку в этих службах журналирования не предусмотрен никакой механизм ротации системных журналов.
----------
http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?part=1&chap=9#doc_chap2
.
Пожалуй подниму тему :-)
Народ подскажите как ротатнуть свой лог? Ну допустим у меня запущен некий процесс, который сам пишет логи в /var/log/my.log. Как его ротатнуть ежедневно?
man logrotate Очевидно же.
man logrotate
Очевидно же.
Не грусти, товарищ! Всё хорошо, beautiful good!
Не совсем понятен сам вопрос :(
1 logrotate
2 cron
Не совсем понятен сам вопрос :(
Я ♥ Gentoo & Funtoo
.
Так тогда конкретнее: что написать в файле /etc/logrotate.d/myprog ? Просто не очень понимаю принципа работы logrotate, зачем требуется останов программы, логи которой ротатятся?
Сейчас написал:
Насколько это верно?
Моя программа запускается скриптом. Если я убью свою прогу она же не запустится потом? Или я что-то не понимаю?
Цитата: Просто не очень
Удаление/усечение файла закрывает его дескриптор. А программа этого не видит и будет писать в старый. Соответственно после ротейта файл будет пустым, если его вообще кто-то создаст.
.
Смотря что ты хочешь делать (т.е. вопрос через тебя замыкается на
man logrotate
).Не-а.
Оно не (с)только к нему относится, сколько к общим принципам логирования (и понимания файловой системы в принципе).
Твоя прога пишет лог в файл (принципиальнейший и ключевой момент).
==> дескриптор файла.
Что происходит при ротации? Файл архивируется (оригинал убивается, дескриптор в общем случае указывает в никуда).
Вопрос: куда попадают сообщения программы, направленные в лог?
Для твоей задачи - понятия не имею.
У меня для Apache прописано:
1. Никто тебе не запрещает в
postrotate
прописать запуск программы;2. ...или логировать через
syslogd
;3. Но в любом случае без внимательного изучения
man kill
тебе не обойтись. Обратить особое внимание на сигналы -1 (HUP), -15 (TERM) и -9 (KILL).:wq
--
Live free or die
.
Вот к этому я и веду, поподбронее как это сделать? Еще нужно учесть что у меня запускается два процесса (по одному на каждое ядро процессора) программы одним и тем же скриптом.
Т.е. я могу вместо kill -HUP написать типа myprog_restart.sh ?
.
Для программы из одного корневого процесса функционально равноценно (процедурно - смотря что у тебя прописано в
myprog_restart.sh
).ЗЫ: Почему не хочешь подумать на предмет логирования через syslogd?
:wq
--
Live free or die
.
Ну в myprog_restart.sh еще ничего не написано :-) я образно.
А про syslog хочу подумать, но не знаю как? :-)
.
все таки видимо придется делать либо через сислог, либо создать скрипт в /etc/init.d/ с возможностью рестарта. Потому что очень многое нужно учесть/проверить при запуске программы...
Одно другого не
Одно другого не исключает.
Логирование через
syslogd
никоим образом не отменяет необходимости написания правильного стартового скрипта.Ты бы уж написал на каком языке твоя программа...
Но в любом случае, чтение
$ man {2,3} syslog
категорически показано.Также показано продумать принципы логирования на этапе проектирования (ещё не написания) программы).
Для случая языка С умные люди пишут:
ЗЫ: Относительно количества экземпляров и числа
PID
'ов всё тоже несколько сложнее, чем ты представляешь...:wq
--
Live free or die
.
Да суть не в том что за программа. Программу вообще-то писал не я. Просто нужно сделать ротацию некого файла. И все. Не суть важно кто его пишет. И несколько процессов там без проблем реализуется.
Логирование в "программах",
Логирование в "программах", написанных не вполне понимающими что они делают (или не всё понимающими) индивидуумами, да реализованное по остаточному принципу...
Видел я такой кошмар :(
:wq
--
Live free or die
1. Некоторые программы
1. Некоторые программы (например, syslog) пишут логи в определённый файл, logrotate его переименовывает, но syslog продолжает писать в переименованный. Чтобы этого не происходило, производят перезапуск syslog. Извините за сумбурное изложение, я - не программист и поэтому сам понимаю, но объяснить не могу :(
2.Скрипт, по-моему, правильный, но у logrotate больше опций :)
Всё же man logrotate.
Я ♥ Gentoo & Funtoo
Ага :)
"Нутром чую, что литр, но доказать не могу" (с) :)))
:wq
--
Live free or die
>>Моя программа запускается
>>Моя программа запускается скриптом. Если я убью свою прогу она же не запустится потом? Или я что-то не понимаю?
Все зависит от того, как ваша программа реагирует на сигнал HUP. Многие демоны рассматривают его как сигнал к рестарту/реконфигурации и т.д. Как конкретно что они делают и делают ли вообще - смотреть в документации на прогу или ежели очень жостко -в исходник. Обычные программы считают что HUP это закрытие родительского процесса (терминала). После чего они как правило помирают ежели не запущены через nohup. Еще многое зависит от того, есть ли у вашей программы возможность писать в стандартный сислог. Тогда проблему моно решить логротацией с хапом системного логгера, типа syslog-ng. Ежели ваш демон писан пионером,и ничего подобного не умеет тогда рестарт рукописным скриптом.
.
Все верно говорите... Но главная проблема в том, что программа писана не только пионэром, а еще и на коленке... Вариант с рестартом я реализовал, но делать ей рестарт пусть даже раз в месяц - не тру. Сейчас думаю как бы извратиться чтобы программа не падала без рестарта. Вот думаю может ей pipe подсунуть? Пусть думает что пишет в файл.
Лучше переделать программу на
Лучше переделать программу на вызов системного syslog() и не париться по поводу проблем перезапуска.
Не грусти, товарищ! Всё хорошо, beautiful good!
Есть мнение, что с учётом
Есть мнение, что с учётом того, как написана программа оно потянет за собой как минимум пересмотр механизма логирования, а в результате - фактически полное переписывание программы (правда, есть подозрение, что этот путь --- лучший).
:wq
--
Live free or die
.
Возможно и лучший, но долгий и непростой... Рыскал по теме pipe и вот наткнулся на проект: http://reki.ru/products/logpipe/ Надо попробовать :-)
Как бы она не была написана,
Как бы она не была написана, вывод в файл делается одной, вполне определенной конструкцией типа fprint(....). Можно легко заменить на вывод в сислог. Плюс операции открытия и закрытия файла неплохо было бы убрать.
Можно добавить перехватчик сигнала HUP. Это будет отдельная функция, которая порешает все ваши задачи, плюс процедура установки перехватчика в начале main.
Можно еще на этапе создания файла внутри программы создать фифо (скорей всего это только один вызов). Для пайпов можете почитать
man mkfifo
info mkfifo
Можно вообще попытаться заменить файл на фифо. Сие, однако, весьма непредсказуемо. Ибо программа не знает что вместо файла надо создавать фифо, и настройка может запросто слететь. И вообще фифо это не совсем файл. Там свои тараканы с блокировками и последовательностями записи-чтения могут повылазить.
:)
Я уже обдумывал все эти варианты. Но остановился на logpipe'е. Отлично работает. И нагрузку выдерживает.
.
Установил его, я надеюсь, правильно? :)
:wq
--
Live free or die
.
Типа юмор? Ну тогда типа смеюсь.
Если бы...
Вопрос таки достаточно серьёзен.
В нулевом приближении гугл не подтвердил предположения о существовании ебилда.
:wq
--
Live free or die
.
Достаточно пройти по ссылке проекта и увидеть, что он состоит из одного лишь файла .c. Проект примитивен и хорошо документирован.
Кстати, раз уж подняли тему :)
Интересно почему в Gentoo по умолчанию проверка логов на соответствие условиям ротации проводится раз в сутки (или я уже отстал от жизни?)?
:wq
--
Live free or die
Неужели нужно чаще?
Неужели нужно чаще?
Я ♥ Gentoo & Funtoo
Функция задачи и много чего
Функция задачи и много чего ещё...
Есть вполне обоснованные (из практики) подозрения, что в ряде случаев таки может оказаться нужным.
:wq
--
Live free or die
И что мешает запускать
И что мешает запускать logrotate через cron чаще, тем более условием ротации может быть не только время, но и размер файла, количество ротаций и т. д.
Я ♥ Gentoo & Funtoo
syslog-ng
Может здесь правда?
http://www.ibm.com/developerworks/ru/library/l-ubuntu-inotify/?S_TACT=105AGX99&S_CMP=GR01
Интересная статейка про Inotify , но мне - не по зубам :)
Может об этом была речь?
http://www.unixnotes.ru/?cat=14&id=37