public inbox for gentoo-user-ru@lists.gentoo.org
 help / color / mirror / Atom feed
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, но за годы использования под 
разными нагрузками таких проблем не было. "Лучше меньше да лучше" (с)...


  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