Сервер 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 и создать правильную статистику.

Другие вопросы по тегам