On 05.02.2024 23:21, Evgeniy Berdnikov wrote:

Если у вас уже есть такое рабочее решение - поделитесь опытом, буду рад вас 
выслушать.

Создание нормального рабочего решения должно начинаться
с внимательного чтения документации и исходников nginx.

  Насчёт чтения исходников -- выглядит примерно таким же экстремизмом,
  как требование знания ассемблера для прикладного программиста... :)

Слово "должно" здесь означает SHOULD а не MUST,
то есть - это рекомендация, а не требование.

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

По крайней мере, это часто экономит время, если ответа нет
в документации - то мне обычно проще и быстрее посмотреть
в исходниках - документации №2, или провести эксперимент.

При чем тут ассемблер - не совсем понятно, nginx ведь на C написан,
как и большая часть операционной системы и всего системного софта.

Какую именно существующую проблему Вы пытаетесь решить
с помощью ротации лог-файлов с интервалом в 30 секунд?

  Товарищ отвечал на этот вопрос:
  
https://mailman.nginx.org/pipermail/nginx-ru/2024-January/MD45SEEP573DPPEQYAFT26MPMUK5646B.html

почему не подходит вариант делать ротацию логов с помощью USR1 ?

Потому что если программа, которая читает данные из unix socket`а
отвалится - тогда произойдет переполенение буфера и nginx тогда
заблокируется на операции записи в unix socket, и как следствие
этого - перестанет выполнять свою основную функцию - перестанет
отвечать на запросы клиентов по http / https протоколу.

  Если так, и без вариантов, то это скорее недостаток nginx-а. Нужно делать
  запись в сислог через неблокирующийся сокет, и дропать записи если
  отправлять их не удаётся. Потому что в подавляющем большинстве случаев
  факт работоспобности сервиса ВАЖНЕЕ правильности его работы и отсутствия
  разных недостатков, вроде пропуска записей в логах. А ещё лучше дать юзеру
  ручку, управляющую поведением программы при блокировке записи в лог.

Возможно, я что-то напутали и помню или старое поведение nginx,
или путаю сейчас nginx с другой программой, или вообще -
путаю unix socket`ы с пайпами.

Но текущее поведение nginx можно легко узнать с помощью эксперимента.
Мне обычных логов вполне хватает, поэтому записью логов nginx
в unix socket никогда не занимался.

По мне так пример разумного подхода -- сквидовский logfile-daemon.

Сейчас логи каждый воркер пишет в файл напрямую, а если писать логи
через какой-то дополнительный процесс - это увеличит накладные расходы
на IPC и сложность, не принося при этом никакой пользы и ценности, IMHO.

--
Best regards,
 Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить