From: Sergey Kobzar <sergey.kobzar@mail.ru>
To: gentoo-user-ru@lists.gentoo.org
Subject: Re: [gentoo-user-ru] Logrotate не посылает сигнал процессу
Date: Fri, 23 Aug 2013 16:26:51 +0300 [thread overview]
Message-ID: <5217631B.50803@mail.ru> (raw)
In-Reply-To: <20130823091016.GA4381@home.power>
On 08/23/13 12:10, Alex Efros wrote:
> Hi!
>
> On Fri, Aug 23, 2013 at 11:03:55AM +0300, Sergey Kobzar wrote:
>> Пора выбрасывать logrotate на свалку?
>
> Я промолчал в начале обсуждения чтобы не лезть с не очень конструктивными
> предложениями, но раз уж дошло до такого вопроса, то могу поделиться своим
> мнением: не просто пора, с ним изначально не стоило связываться!
>
> Изначально подход logrotate достаточно порочен: ротацией логов должен
> заниматься тот, кто их пишет. Более того, если вас интересует надёжная и
> единообразная работа с логами, то нужно писать _все_ логи через
> специализированные приложения. А конкретно я имею в виду либо DJB'шный
> multilog из пакета daemontools либо его более продвинутый форк svlogd из
> пакета runit. Подробнее: http://smarden.org/runit/svlogd.8.html
>
> Обычно в идеологии daemontools/runit супервизор сервиса запускает два
> процесса - главный демон, который свои логи выдаёт на STDOUT, и связанный
> с ним через конвейер демон логгирования (multilog/svlogd), который на
> свой STDIN получает STDOUT главного демона и пишет его в лог-файлы.
> Когда в системе все сервисы запущены через такие супервизоры то
> получается, что практически все логи единообразно и надёжно пишутся,
> фильтруются и ротируются через multilog/svlogd (кроме Xorg.0.log,
> emerge.log и ещё парочки).
>
> Но есть пара нюансов. Во-первых это не работает для таких сервисов как
> apache или nginx т.к. у них не один лог-файл, а несколько, так что
> направить их вместе на STDOUT не вариант. Во-вторых конкретно nginx иногда
> нельзя запускать под супервизором daemontools/runit т.к. они несовместимы
> с режимом горячего обновления nginx (если оно необходимо для вашего сайта).
>
> В результате для демонов вроде apache/nginx используется другой подход:
> через супервизор запускается несколько сервисов-логгеров multilog/svlogd,
> по одному на каждый лог-файл apache/nginx, которые считывают данные из
> FIFO-файлов, в который apache/nginx пишут логи.
>
> Пример настройки логов nginx для runit:
>
> # создаём каталоги, куда будут писаться логи
> install -d -m 2750 -o log /var/log/nginx/access
> install -d -m 2750 -o log /var/log/nginx/error
>
> # даём сервисам svlogd доступ к этим каталогам (они будут работать от
> # юзера log, а не root)
> chown log /var/log/nginx/
>
> # для примера, настраиваем кол-во сохраняемых access-лог-файлов
> echo n500 >/var/log/nginx/access/config
>
> # заменяем файлы куда пишет логи nginx на FIFOшки
> mv /var/log/nginx/access_log{,.old}
> mv /var/log/nginx/error_log{,.old}
> mkfifo /var/log/nginx/access_log
> mkfifo /var/log/nginx/error_log
>
> # создаём новые сервисы (у меня сервисы runit находятся в /service/,
> # а активные сервисы в /var/service/ - это как бы аналоги /etc/init.d/
> # и /etc/runlevels/default/ - но у вас эти каталоги могут быть другими)
> mkdir /service/nginx-log-access/
> mkdir /service/nginx-log-error/
> echo 'exec chpst -u log svlogd /var/log/nginx/access/ <>/var/log/nginx/access_log' > /service/nginx-log-access/run
> echo 'exec chpst -u log svlogd /var/log/nginx/error/ <>/var/log/nginx/error_log' > /service/nginx-log-error/run
> chmod +x /service/nginx-log-access/run
> chmod +x /service/nginx-log-error/run
>
> # запускаем лог-сервисы
> ln -s /service/nginx-log-access/ /var/service/
> ln -s /service/nginx-log-error/ /var/service/
>
> # перезапускаем nginx (у меня это `sv t nginx`, у вас вероятно
> # `/etc/init.d/nginx restart`)
>
> У меня ./run-файлы сервисов содержат в начале ещё пару строк:
> #!/bin/sh
> exec 2>/dev/null
> я их для простоты описания опустил и думаю что всё будет работать и без них.
>
Спасибо за подробное описание. Я с данной системой не знаком - нужно
покопаться.
У меня по совместительству под рукой есть FreeBSD с ее newsyslog. Он
конесно менее фитчастый чем logrotate, но за годы использования под
разными нагрузками таких проблем не было. "Лучше меньше да лучше" (с)...
next prev parent reply other threads:[~2013-08-23 13:26 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-21 18:30 [gentoo-user-ru] Logrotate не посылает сигнал процессу Sergey Kobzar
2013-08-21 18:42 ` Edward Toroshchin
2013-08-21 18:55 ` Sergey Kobzar
2013-08-21 19:08 ` Sergey Kobzar
2013-08-22 18:34 ` Peter Volkov
2013-08-22 19:08 ` Sergey Kobzar
2013-08-23 8:03 ` Sergey Kobzar
2013-08-23 9:10 ` Alex Efros
2013-08-23 13:26 ` Sergey Kobzar [this message]
2013-08-23 9:52 ` Peter Volkov
2013-08-23 13:34 ` Sergey Kobzar
2013-08-23 13:48 ` Pavel Labushev
[not found] ` <20130823134904.773C6E0C13@pigeon.gentoo.org>
2013-08-23 14:07 ` Sergey Kobzar
2013-08-23 14:51 ` Pavel Labushev
[not found] ` <20130823145231.89FF4E0AAA@pigeon.gentoo.org>
2013-08-23 14:59 ` Sergey Kobzar
2013-08-25 8:53 ` Sergey Kobzar
2013-08-28 9:44 ` Sergey Kobzar
2013-08-28 9:51 ` Sergey Kobzar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5217631B.50803@mail.ru \
--to=sergey.kobzar@mail.ru \
--cc=gentoo-user-ru@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox