Логи Apache, назовите их по IP? - PullRequest
1 голос
/ 08 июля 2011

У меня установлен и работает Apache 2, я записываю материал в папку / logs, называемую «access / error.txt», и мне было интересно, как я много делаю, как заставить Apache генерировать новый файл журнала ACCESS для каждогоуникальный IP-адрес, который подключается, и регистрируйте все запросы этого пользователя в соответствующем файле.Например, парень в 173.49.91.61 посещает мой сервер, apache автоматически делает /logs/173.49.94.61.txt и регистрирует все обращения к нему.Получите?

Спасибо, я не знаю, возможно ли это.Надеюсь, кто-то узнает. невнятно ворчит себе

1 Ответ

0 голосов
/ 08 июля 2011

Позвольте мне сначала заявить, что это вообще плохая идея, поскольку у вас будет один файл на IP-адрес.Вы можете подумать, что это круто и легко управлять, и все, пока у вас не будет более 2 миллионов уникальных посетителей на вашем сайте, и вы не столкнетесь с серьезными проблемами.Эти проблемы включают в себя: очень низкую производительность диска, невозможность легко ls и rm в каталоге журналов и возможность исчерпания inode перед тем, как закончится свободное место на диске.Вы были предупреждены.

Тем не менее, если вы действительно все еще хотите это сделать, apache имеет директиву CustomLog:

http://httpd.apache.org/docs/current/logs.html#piped

С этим вы можете сделать что-то вроде этого:

CustomLog "|/path/to/script" common 

Где /path/to/script - это программа, которая читает stdin и записывает файлы на основе заданного IP-адреса.Вы должны написать это сами, так как я не знаю ничего доступного для этого.Это может выглядеть примерно так (perl):

#!/usr/bin/perl

while (<STDIN>) {

    if ($_ =~ /^(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)/) {
        open FILE, ">>", "/path/to/log/dir/" . $1 . ".txt";
        print FILE $_;
        close FILE;
    } else {
        print STDERR "invalid input format!\n";
    }

}

Этот скрипт является лишь примером, так как он будет иметь условия гонки и проблемы с производительностью, так как он открывает и закрывает файл при каждой записи.Однако будьте осторожны, как будто у вас слишком много открытых файловых дескрипторов одновременно, вы больше не сможете открывать.

...