У меня есть Linux-сервер, предназначенный для awstats. На этом сервере размещается приложение awstats и создается / публикуется статистика для нескольких веб-сайтов, размещенных на нескольких веб-серверах, развернутых в моей инфраструктуре.
Для выполнения этой работы в этот момент каждый веб-сервер экспортирует через NFS свои каталоги журналов веб-доступа, а сервер awstats монтирует их только для чтения. Таким образом, все работает нормально, и awstats может читать журналы всех серверов.
Основная проблема этого решения заключается в том, что всякий раз, когда я выключаю / включаю веб-сервер, мне приходится перенастраивать как монтирование NFS, так и конфигурацию Awstats внутри сервера awstats. Учитывая, что у меня динамическая среда (частное облако), бывает, что мне приходится выключать и включать веб-серверы много раз в течение дня в зависимости от нагрузки на них.
Знаете ли вы какую-либо другую возможную и разумную конфигурацию, которую я могу применить к awstats, чтобы удовлетворить эту потребность без необходимости ее каждый раз перенастраивать?
Большое спасибо.
Когда я делаю аналогичные вещи в AWS или подобных облаках, я использую autofs
смонтировать каталоги журналов. Это означает, что каталоги журналов монтируются по запросу, т.е. не до тех пор, пока они не понадобятся, и размонтируются вскоре после этого. Это также означает, что доступ к каталогу, который соответствует неработающему серверу, требует короткого ожидания перед возвратом пустого каталога вместо длительного зависания NFS.
Затем я веду единый центральный список серверов, работающих в настоящее время для опроса, так что задание журнала не опрашивает серверы, которые не работают, и даже не имеет autofs
Подождите; но это всего лишь уточнение.
Альтернативой может быть настройка веб-серверов для передачи журналов доступа с помощью системного журнала на ваш сервер awstats.
Это будет означать нулевое изменение конфигурации конфигурации awstats при включении и выключении веб-серверов.
На веб-сервере Apache теперь у вас может быть что-то вроде:
ErrorLog "/var/log/www/error.log"
CustomLog "/var/log/www/access.log" combined
Замените их трубкой, чтобы logger
(стандартная утилита, которая преобразует stdin в сообщения системного журнала) и при необходимости использовать tee
для дублирования сообщений журнала, чтобы существующий файл журнала также сохранялся:
ErrorLog "|/bin/sh -c '/usr/bin/tee -a /var/log/www/error.log | /usr/bin/logger -thttpd -plocal6'"
CustomLog "|/usr/bin/logger -thttpd -plocal7" combined
Затем дайте команду демону syslog на каждом веб-сервере отправлять файлы журнала на ваш сервер awstats:
# syslog.conf
local6.* @192.168.0.1
local7.* @192.168.0.1
Где входящие сообщения могут быть собраны и сохранены для дальнейшей обработки с помощью awstats.
Если у вас несколько разных виртуальных хостов, вы можете добавить дополнительный LogFormat
директива, которая также записывает VirtualHost:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined-with-vhost
и использовать
CustomLog "|/usr/bin/logger -thttpd -plocal7" combined-with-vhost
Затем вы можете выполнить некоторую предварительную обработку и разделить записи для каждого VirtualHost в собственный файл журнала или изменить свой конфигурация awstats иметь дело с такими записями %virtualname
и создавать правильную статистику.