Назад | Перейти на главную страницу

Как узнать, какую пропускную способность использует каждый виртуальный хост Apache?

У меня есть Apache, настроенный для обслуживания нескольких виртуальных хостов, и я хотел бы увидеть, какую пропускную способность использует каждый сайт. Я вижу, сколько использует весь сервер, но хотелось бы более подробных отчетов.

Большинство вещей, которые я обнаружил, предназначены для ограничения пропускной способности виртуальных хостов, но я не хочу этого делать; Я просто хочу видеть, какие сайты используют какую полосу пропускания.

Это не для выставления счетов, а просто для информации.

Есть ли модуль apache, который мне следует использовать? Или есть другой способ сделать это?

Вся необходимая информация находится в журналах, поэтому вам следует посмотреть на анализатор журналов, например AWStats. Другой вариант - использовать Google Analytics.

Для анализа журналов вот примерный пример, который вы можете использовать, чтобы узнать, сколько МБ трафика сообщает файл журнала из командной строки:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'

Я предлагаю вам использовать замечательный механизм ведения журнала apache и его менее известный и % O флаги:

Определите формат:

LogFormat "% t% a% v% U% q% I% O" IOFormat

Используйте его в своей основной httpd.conf:

CustomLog /var/log/apache2/all-bw.log IOFormat

Значения, вероятно, не учитывают всю информацию заголовков, но достаточно точны, чтобы иметь точное представление о трафике VirtualHost.

Сканируйте журналы с помощью Perl-скрипта для агрегирования по виртуальному хосту каждые n минут (например, 5 минут) и отправляйте это в cacti.

Эти флаги предоставляются модулем mod_logio, который, вероятно, встроен в ваш Apache (как и в моем Debian Apache).

Awstats это один из способов сделать это, но, вероятно, не лучший

Если вы решите использовать awstats с Apache, он сразу же покажет вам агрегированную пропускную способность для всего вашего сервера.

Чтобы увидеть пропускную способность для каждого виртуального хоста, я рекомендую установить влогер.

Vlogger фактически будет собирать информацию журнала доступа Apache для каждого из ваших виртуальных хостов, которые вы настроили для этого, в отдельных каталогах / файлах.

Например, если ваш файл журнала Apache находится в / var / log / apache2, типичная установка vlogger создаст что-то вроде этого для ваших виртуальных хостов (например, vhost1.com vhost2.com):

/var/log/apache2/vhost1.com/access.log
/var/log/apache2/vhost2.com/access.log

Vlogger дает вам возможность ротации этих журналов для вас, предоставляет способ изменить шаблон именования файла журнала доступа (например, добавить дату) и утверждает, что он обрабатывает большое количество файлов журнала лучше, чем Apache.

Обратной стороной является то, что у вас больше не будет агрегированного представления сервера (вам нужно будет агрегировать журналы отдельно или, возможно, использовать дополнительную настройку apache или, возможно, какой-либо другой метод?).

Я бы предостерег от использования аналитики Google (или любого отслеживания на основе javascript) для мониторинга пропускной способности сервера, поскольку вы полагаетесь на то, что клиент будет сообщать через javascript. GA не сообщает вам о людях, у которых отключен JavaScript, а также о каких-либо сканерах / пауках / ботах.

Вот некоторое регулярное выражение для анализа формата журнала, предложенного Xerxes.

\ [([0-9] +) / (\ w +) / ([0-9] {4}) [^ \]] + \] \ s (\ d {1,3}. \ D {1, 3}. \ D {1,3}. \ D {1,3}) \ s ([^ /] +) [^ \ s] + \ s (\ d +) \ s (\ d +)

Пример журнала:

[12 января 2011 года: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 581 669 [12 января 2011 года: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 624 747 [12 января 2011 года: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /icons/blank.gif 687 186 [12 января 2011 года: 14: 25: 04 +0000] 157.157. 12.206 files.hjaltijakobsson.com /icons/compressed.gif 693 188 [12 января 2011 г .: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /favicon.ico 592512

Спички:

Подпаттерн 1 (день месяца): 12
Подпаттерн 2 (сокр. Месяц): янв.
Субпаттерн 3 (год): 2011
Подшаблон 4 (гостевой хост): 157.157.12.206
Подпаттерн 5 (виртуальный хост): files.hjaltijakobsson.com
Подшаблон 6 (входящие байты): 581
Подшаблон 7 (исходящие байты): 669

Ура.

Небольшая доработка принятого ответа, предполагая, что на самом деле на сервере есть несколько vhosts (и, следовательно, несколько site.com.access_log). Это отсортирует и перечислит каждый виртуальный хост

for f in *.access_log ; do echo `awk '{SUM+=$10}END{print SUM/1024/1024}' $f` $f ; done | sort -rn | more

и для каталога архивированных журналов

for f in *.access_log.*.gz ; do echo `zcat $f|awk '{SUM+=$10}END{print SUM/1024/1024}'` $f `stat -c%z $f`; done | sort -rn | more 

Хм, вы можете получить зло с IPTables и сопоставлением строк, чтобы регистрировать пакеты для более поздних отчетов. Однако будет работать только для соединений без SSL.

Или что-то вроде протокола и сеанса, такого как Snort, можно было бы использовать ...

Верный. Фильтрация журнала - хорошая идея. Я также хочу получить пропускную способность моего сервера Apache при загрузке файлов.

LogFormat "%h %l %t %u \"%r\" %>s %b/%D**" combined

Рассчитывает %b и %d выход, который даст вам полосу пропускания тока.