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

24

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

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

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

Должен ли я использовать модуль apache? Или есть другой способ сделать это?

pkaeding
источник

Ответы:

23

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

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

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'
Ксеркс
источник
5
бесполезное использование cat: awk '...' /var/log/apache/access.log тоже работает
marco
Будут ли предложенные способы рассчитывать трафик, отправляемый с некоторых веб-страниц в Интернет (исходящий трафик)?
Халед
2
Да. Но будьте осторожны, чтобы случайно не суммировать коды ответов. Я понял, что мои показатели были слишком низкими, потому что для меня $ 10 - это код ответа http. Для моего пользовательского журнала apache мне нужно было использовать {SUM + = $ 11}.
Фил
3

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

Антуан Бенкемун
источник
3

Я предлагаю вам использовать замечательный механизм ведения журнала Apache и его менее известные флаги % I и % 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 (как и для моего Apache Debian).

октябрь
источник
2
Hum, также как указано в документации Apache 2.0: обратите внимание, что в httpd 2.0, в отличие от 1.3, строки формата% b и% B представляют не количество байтов, отправленных клиенту, а просто размер в байтах ответа HTTP ( который будет отличаться, например, если соединение прервано или если используется SSL). Формат% O, предоставляемый mod_logio, регистрирует фактическое количество байтов, отправленных по сети.
Октябрь
2

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

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

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 Analytics (или любого отслеживания на основе javascript) для мониторинга пропускной способности сервера, поскольку вы полагаетесь на то, что клиент будет отправлять отчеты через javascript. GA не сообщает вам людей, у которых отключен JavaScript, а также никаких сканеров / пауков / ботов.

user12345
источник
1

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

\ [([0-9] +) / (\ W +) / ([0-9] {4}) [^ \]] + \] \ S (\ d {1,3}. \ Д {1, 3}. \ д {1,3}. \ д {1,3}) \ с ([^ /] +) [^ \ s] + \ с (\ d +) \ s (\ d +)

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

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

Матчи:

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

Приветствия.

hjaltij
источник
1

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

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

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

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 
Майкл
источник
0

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

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

Роб Дадли
источник
0

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

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

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

Дэвид
источник