fopen — php лучший способ анализа access_log

Я хочу, чтобы анализ access_log, а затем сохранить ip посетителей, дату, просмотр страницы или изображения в таблицу MySQL.

Я планирую использовать cron job, вызывать php-скрипт каждую минуту, открыть access_log.

Но теперь access_log имеет уже более 500 МБ, и он будет увеличиваться примерно на 0,4 МБ в минуту. (обычно 50-350 записей)

так как открыть такой большой файл в php? прочитайте последние 500 записей, затем regex получите записи за последнюю минуту. Мой сервер имеет 32 ГБ ОЗУ, память не проблема, но мне нужно меньше процессора. Кто-нибудь может помочь мне с простым кодом? Благодарю.

редактировать

примите совет @Jeremiah Winsley, я использую rotatelogs в моем httpd.conf. Но журнал не был создан. в чем проблема?

<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" com                                                                                        bined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I                                                                                         %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined env=!dontlog
CustomLog "|sbin/rotatelogs -f logs/my_log 60" combined env=!dontlog
#create a my_log every 1 minute.
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
SetEnvIf Remote_Addr "::1" dontlog
</IfModule>

-2

Решение

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

Дайте этому парсеру PHP попробовать и сэкономьте время.

https://github.com/kassner/log-parser

Как уже отмечалось, я не буду делать это на живых файлах. Вам, вероятно, следует настроить cronjob примерно на каждые 5 или 10 минут и чаще вращать файлы. И используйте недавно повернутый файл. Однако это может привести к созданию большого количества файлов.

0

Другие решения

Других решений пока нет …