piped logging from Nginx to MySQL

Ihalainen Nickolay ihanick на gmail.com
Ср Дек 16 12:38:49 MSK 2009


2009/12/16 Anton Yuzhaninov <citrin at citrin.ru>:
> Ihalainen Nickolay wrote:
>
>> Вариант с tail конешно хорош, но зачем эти бешенные гигабайты писать на диск?
>> gzip поможет с этой проблемой, однако, он будет дважды использовать
>> cpu: для записи на диск и для чтения с него.
>
> Запись логов из nginx на диск линейная, и в таком режиме можно писать много
> создавая небольшую нагрузку на диск.
>
> А вот mysql на каждую строчку которую в него insert-ят будет делать кучу сиков и
> создаст на диск нагрузку гораздо больше.
сишный или перловый парсер лога вообще может на диск/базу не писать.
Насколько я понимаю база нужна не для хранения, а для анализа. делая
анализ на лету а не по крону можно сильно экономить процессор и
дисковую полосу. запрещение | в логах это запрет стрелять, под
предлогом, что выстрел в собственную ногу это опасно.

Хотя стрелять в ногу никто не запрещает:
/etc/init.d/nginx stop
rm /var/log/access.log
mkfifo /var/log/nginx/access.log
(tail -f /var/log/nginx/access.log | /usr/local/bin/logtomysql ) &
/etc/init.d/nginx start

опять же, что если хочется ловить типовые запросы или медленные? тогда
5% от всех записей вполне можно добавлять в базу используя кольцевой
буфер и polling без задержек в nginx.
или пайпы работают медленней чем файлы?


Подробная информация о списке рассылки nginx-ru