Сервер awstats в динамической инфраструктуре
У меня есть сервер Linux, посвященный awstats. Этот сервер содержит приложение awstats и генерирует / публикует статистику для нескольких веб-сайтов, размещенных на нескольких веб-серверах, развернутых в моей инфраструктуре.
Чтобы выполнить эту работу в данный момент, каждый веб-сервер экспортирует через NFS свои каталоги web-access-logs, а сервер awstats монтирует их только для чтения. Таким образом, все работает нормально, и awstats может читать журналы всех серверов.
Основная проблема этого решения заключается в том, что всякий раз, когда я выключаю / включаю веб-сервер, мне приходится переконфигурировать как монтирование NFS, так и конфигурацию Awstats внутри сервера awstats. Учитывая, что у меня динамическая среда (частное облако), случается, что мне приходится выключать и включать веб-серверы много раз в течение дня в зависимости от нагрузки на них.
Знаете ли вы какие-либо другие возможные и умные настройки, которые я могу применить к awstats для выполнения этой задачи без необходимости каждый раз переконфигурировать ее?
Большое спасибо.
2 ответа
Когда я делаю подобные вещи в AWS или подобных облаках, я использую autofs
смонтировать каталоги журналов. Это означает, что каталоги журналов монтируются по запросу, то есть не до тех пор, пока не понадобятся, и вскоре после этого будут демонтированы. Это также означает, что доступ к каталогу, который отображается на отключенный сервер, включает в себя короткое ожидание, прежде чем возвращается пустой каталог, вместо длительного зависания NFS.
Затем я веду единый центральный список текущих серверов для опроса, чтобы задание журнала не опрашивало неработающие серверы и даже не autofs
Подождите; но это просто уточнение.
Альтернативой может быть настройка веб-серверов для передачи их журналов доступа посредством syslog на ваш сервер 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
А затем дайте команду демону системного журнала на каждом веб-сервере отправлять файлы журнала на ваш сервер 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
и создать правильную статистику.